1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-05 23:26:38 +02:00

52725: updated named reference semantics

This commit is contained in:
Bart Schaefer 2024-03-09 22:02:57 -08:00
parent 47c7bc9b14
commit ea5a5d6ec4
2 changed files with 36 additions and 12 deletions

View File

@ -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

View File

@ -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;