mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-05-21 12:01:54 +02:00
52725: updated named reference semantics
This commit is contained in:
parent
47c7bc9b14
commit
ea5a5d6ec4
2 changed files with 36 additions and 12 deletions
|
@ -1,3 +1,7 @@
|
|||
2024-03-09 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* 52725: Src/Modules/ksh93.c: updated named reference semantics
|
||||
|
||||
2024-03-09 Stephane Chazelas <stephane@chazelas.org>
|
||||
|
||||
* 52721: fix metafication and regexp/subject confusion in
|
||||
|
|
|
@ -113,18 +113,17 @@ static char sh_edmode[2];
|
|||
* obviously includes those commented out here.
|
||||
*/
|
||||
static struct paramdef partab[] = {
|
||||
PARAMDEF(".sh.command", PM_NAMEREF|PM_READONLY, "ZSH_DEBUG_CMD", &constant_gsu),
|
||||
PARAMDEF(".sh.edchar", PM_SCALAR|PM_SPECIAL, &sh_edchar, &sh_edchar_gsu),
|
||||
PARAMDEF(".sh.edcol", PM_NAMEREF|PM_READONLY, "CURSOR", &constant_gsu),
|
||||
PARAMDEF(".sh.edmode", PM_SCALAR|PM_READONLY|PM_SPECIAL, &sh_edmode, &sh_edmode_gsu),
|
||||
PARAMDEF(".sh.edtext", PM_NAMEREF|PM_READONLY, "BUFFER", &constant_gsu),
|
||||
PARAMDEF(".sh.edchar", PM_SCALAR|PM_SPECIAL,
|
||||
&sh_edchar, &sh_edchar_gsu),
|
||||
PARAMDEF(".sh.edmode", PM_SCALAR|PM_READONLY|PM_SPECIAL,
|
||||
&sh_edmode, &sh_edmode_gsu),
|
||||
PARAMDEF(".sh.file", PM_NAMEREF|PM_READONLY, "ZSH_SCRIPT", &constant_gsu),
|
||||
/* PARAMDEF(".sh.fun", PM_SCALAR|PM_UNSET, NULL, &constant_gsu), */
|
||||
/* PARAMDEF(".sh.level", PM_INTEGER|PM_UNSET, NULL, &constant_gsu), */
|
||||
PARAMDEF(".sh.lineno", PM_NAMEREF|PM_READONLY, "LINENO", &constant_gsu),
|
||||
PARAMDEF(".sh.match", PM_ARRAY|PM_READONLY, NULL, &sh_match_gsu),
|
||||
PARAMDEF(".sh.name", PM_SCALAR|PM_READONLY|PM_SPECIAL, &sh_name, &sh_name_gsu),
|
||||
PARAMDEF(".sh.subscript", PM_SCALAR|PM_READONLY|PM_SPECIAL, &sh_subscript, &sh_subscript_gsu),
|
||||
PARAMDEF(".sh.name", PM_SCALAR|PM_READONLY|PM_SPECIAL,
|
||||
&sh_name, &sh_name_gsu),
|
||||
PARAMDEF(".sh.subscript", PM_SCALAR|PM_READONLY|PM_SPECIAL,
|
||||
&sh_subscript, &sh_subscript_gsu),
|
||||
PARAMDEF(".sh.subshell", PM_NAMEREF|PM_READONLY, "ZSH_SUBSHELL", &constant_gsu),
|
||||
/* SPECIALPMDEF(".sh.value", 0, NULL, NULL, NULL), */
|
||||
PARAMDEF(".sh.version", PM_NAMEREF|PM_READONLY, "ZSH_PATCHLEVEL", &constant_gsu)
|
||||
|
@ -156,15 +155,35 @@ ksh93_wrapper(Eprog prog, FuncWrap w, char *name)
|
|||
|
||||
queue_signals();
|
||||
++locallevel; /* Make these local */
|
||||
if ((pm = createparam(".sh.level", PM_LOCAL|PM_UNSET))) {
|
||||
#define LOCAL_NAMEREF (PM_LOCAL|PM_UNSET|PM_NAMEREF)
|
||||
if ((pm = createparam(".sh.command", LOCAL_NAMEREF))) {
|
||||
pm->level = locallevel; /* Why is this necessary? */
|
||||
setiparam(".sh.level", num);
|
||||
/* Force scoping by assignent hack */
|
||||
setloopvar(".sh.command", "ZSH_DEBUG_CMD");
|
||||
pm->node.flags |= PM_READONLY;
|
||||
}
|
||||
/* .sh.edchar is in partab and below */
|
||||
if (zleactive && (pm = createparam(".sh.edcol", LOCAL_NAMEREF))) {
|
||||
pm->level = locallevel;
|
||||
setloopvar(".sh.edcol", "CURSOR");
|
||||
pm->node.flags |= (PM_NAMEREF|PM_READONLY);
|
||||
}
|
||||
/* .sh.edmode is in partab and below */
|
||||
if (zleactive && (pm = createparam(".sh.edtext", LOCAL_NAMEREF))) {
|
||||
pm->level = locallevel;
|
||||
setloopvar(".sh.edtext", "BUFFER");
|
||||
pm->node.flags |= PM_READONLY;
|
||||
}
|
||||
|
||||
if ((pm = createparam(".sh.fun", PM_LOCAL|PM_UNSET))) {
|
||||
pm->level = locallevel;
|
||||
setsparam(".sh.fun", ztrdup(name));
|
||||
pm->node.flags |= PM_READONLY;
|
||||
}
|
||||
if ((pm = createparam(".sh.level", PM_LOCAL|PM_UNSET))) {
|
||||
pm->level = locallevel;
|
||||
setiparam(".sh.level", num);
|
||||
}
|
||||
if (zleactive) {
|
||||
extern mod_import_variable char *curkeymapname; /* XXX */
|
||||
extern mod_import_variable char *varedarg; /* XXX */
|
||||
|
@ -186,9 +205,10 @@ ksh93_wrapper(Eprog prog, FuncWrap w, char *name)
|
|||
*--ie = '\0';
|
||||
} else
|
||||
sh_subscript = NULL;
|
||||
if ((pm = createparam(".sh.value", PM_LOCAL|PM_NAMEREF|PM_UNSET))) {
|
||||
if ((pm = createparam(".sh.value", LOCAL_NAMEREF))) {
|
||||
pm->level = locallevel;
|
||||
setloopvar(".sh.value", "BUFFER"); /* Hack */
|
||||
pm->node.flags |= PM_READONLY;
|
||||
}
|
||||
} else
|
||||
sh_name = sh_subscript = NULL;
|
||||
|
|
Loading…
Reference in a new issue