Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] Eliminate paramtab and rename realparamtab into paramtab
- X-seq: zsh-workers 55148
- From: Philippe Altherr <philippe.altherr@xxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: [PATCH] Eliminate paramtab and rename realparamtab into paramtab
- Date: Thu, 10 Sep 2026 23:38:00 +0200
- Arc-authentication-results: i=1; mx.google.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=ex6xDFAV1JQ56N9C7or/YyT7kzKsc6XZvlxphsVVrlg=; fh=BgAYDYpL6Ne/A5nWEMVJiHiBtrz8Imz3uf26RDwgQX4=; b=VdxeuTHfyJWw1RYWGgdaOXiu13tRXN5jCPaeKkkcDev40fC9/M73gENQMoOsZkQf7V xB7Q1FGOsUtlAqDt5eVb78WPSiReKfg7HhtbsejOgszmZ/icTlJGOvEdZiVsXqtfLkm8 GSBDs1c/FK6HtZBb3DFpYNqlqwflvirvJAX3Qq5VmmWAHoa8D1JpG5GuaJiMZ5rkNenv hJ/mLij/DesZvOlA1flEmWsf84ul/Ww9h6lSKtMm5FdmyhxyxAeQ0SQHaLa7pcXS8NSF 2DtrUK8IxK2cubnVxzjb0qbL4fTpgT5uvpvJMkAwCOdrAZUjAijDimdBbpYuTYF2vHjM 2R9g==; darn=zsh.org
- Arc-seal: i=1; a=rsa-sha256; t=1789076292; cv=none; d=google.com; s=arc-20260327; b=e0c4Eu/iy5u4X16CrOsYtg9EFFv3Ztmf1pealYz4OHcfEmB38mP3AfZqXBOn3pKa4L TI81inHWe4Lr60qF10in3uBr1+NAX+cdK091pW6VJebQT2nFc/EQUh188ZMQtJCygfb7 MBmt/BYiZR+/AM1ClEXIFmp/OQ/3difdtEYeO+WAiFM0DzTcSgNNHCmwZyLo3EAD9mg/ O0JtfX75Qt5C1b4aR+f3zIoeHugAnmuSWGxowya5aPy7/Yg8abKLUVRGG0LqXyMJXZVz 0hSZIaF81LXknkX3PSkGCpAFzYGO1x56+HRm3QrJ0Bu1ugvC1DuHQkZ3+IB23M9f0Gth kYWQ==
- Archived-at: <https://zsh.org/workers/55148>
- List-id: <zsh-workers.zsh.org>
It turns out that among the functions that access paramtab, createparam() and unsetparam() are the only ones that are ever called while paramtab is different from realparamtab. This patch adds an explicit HashTable parameter to these functions, then eliminates paramtab, and finally renames realparamtab into paramtab.
Philippe
diff --git a/Src/Modules/param_private.c b/Src/Modules/param_private.c
index e1feb2936..e1edb9658 100644
--- a/Src/Modules/param_private.c
+++ b/Src/Modules/param_private.c
@@ -248,7 +248,7 @@ bin_private(char *nam, char **args, LinkList assigns, Options ops, int func)
fakelevel = locallevel;
startparamscope();
from_typeset = bin_typeset("private", args, assigns, ops, func);
- scanhashtable(realparamtab, 0, 0, 0, makeprivate, 0);
+ scanhashtable(paramtab, 0, 0, 0, makeprivate, 0);
endparamscope();
fakelevel = ofake;
unqueue_signals();
@@ -552,9 +552,9 @@ wrap_private(Eprog prog, FuncWrap w, char *name)
if (private_wraplevel < locallevel /* && strcmp(name, "(anon)") != 0 */) {
int owl = private_wraplevel;
private_wraplevel = locallevel;
- scanhashtable(realparamtab, 0, 0, 0, scopeprivate, PM_UNSET);
+ scanhashtable(paramtab, 0, 0, 0, scopeprivate, PM_UNSET);
runshfunc(prog, w, name);
- scanhashtable(realparamtab, 0, 0, 0, scopeprivate, 0);
+ scanhashtable(paramtab, 0, 0, 0, scopeprivate, 0);
private_wraplevel = owl;
return 0;
}
@@ -642,10 +642,10 @@ setup_(UNUSED(Module m))
HashNode hn = builtintab->getnode(builtintab, "local");
/* Horrible, horrible hack */
- save_getnode2 = realparamtab->getnode2;
- save_printnode = realparamtab->printnode;
- realparamtab->getnode2 = getprivatenode2;
- realparamtab->printnode = printprivatenode;
+ save_getnode2 = paramtab->getnode2;
+ save_printnode = paramtab->printnode;
+ paramtab->getnode2 = getprivatenode2;
+ paramtab->printnode = printprivatenode;
/* Even more horrible hack */
save_local = *(Builtin)hn;
@@ -689,8 +689,8 @@ cleanup_(Module m)
removehashnode(reswdtab, "private");
- realparamtab->getnode2 = save_getnode2;
- realparamtab->printnode = save_printnode;
+ paramtab->getnode2 = save_getnode2;
+ paramtab->printnode = save_printnode;
deletewrapper(m, wrapper);
return setfeatureenables(m, &module_features, NULL);
diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
index 972496d42..f6c4c074f 100644
--- a/Src/Modules/parameter.c
+++ b/Src/Modules/parameter.c
@@ -131,8 +131,8 @@ scanpmparameters(UNUSED(HashTable ht), ScanFunc func, int flags)
pm.node.flags = PM_SCALAR | PM_READONLY;
pm.gsu.s = &nullsetscalar_gsu;
- for (i = 0; i < realparamtab->hsize; i++)
- for (hn = realparamtab->nodes[i]; hn; hn = hn->next) {
+ for (i = 0; i < paramtab->hsize; i++)
+ for (hn = paramtab->nodes[i]; hn; hn = hn->next) {
if (((Param)hn)->node.flags & PM_UNSET)
continue;
pm.node.nam = hn->nam;
@@ -1125,8 +1125,8 @@ scanpmmodules(UNUSED(HashTable ht), ScanFunc func, int flags)
addlinknode(done, pm.node.nam);
func(&pm.node, flags);
}
- for (i = 0; i < realparamtab->hsize; i++)
- for (hn = realparamtab->nodes[i]; hn; hn = hn->next) {
+ for (i = 0; i < paramtab->hsize; i++)
+ for (hn = paramtab->nodes[i]; hn; hn = hn->next) {
if ((((Param) hn)->node.flags & PM_AUTOLOAD) &&
!linknodebystring(done, ((Param) hn)->u.str)) {
pm.node.nam = ((Param) hn)->u.str;
diff --git a/Src/Zle/compctl.c b/Src/Zle/compctl.c
index 347f5532c..c66bca888 100644
--- a/Src/Zle/compctl.c
+++ b/Src/Zle/compctl.c
@@ -3664,7 +3664,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
dumphashtable(cmdnamtab, -3);
/* And parameter names if autocd and cdablevars are set. */
if (isset(AUTOCD) && isset(CDABLEVARS))
- dumphashtable(realparamtab, -4);
+ dumphashtable(paramtab, -4);
}
oaw = addwhat = (cc->mask & CC_QUOTEFLAG) ? -2 : CC_QUOTEFLAG;
@@ -3676,7 +3676,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
dumphashtable(optiontab, addwhat);
if (cc->mask & CC_VARS) {
/* And parameter names. */
- dumphashtable(realparamtab, -9);
+ dumphashtable(paramtab, -9);
addwhat = oaw;
}
if (cc->mask & CC_BINDINGS) {
@@ -3843,7 +3843,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
if ((t = cc->mask & (CC_ARRAYS | CC_INTVARS | CC_ENVVARS | CC_SCALARS |
CC_READONLYS | CC_SPECIALS | CC_PARAMS)))
/* Add various flavours of parameters. */
- dumphashtable(realparamtab, t);
+ dumphashtable(paramtab, t);
if ((t = cc->mask & CC_SHFUNCS))
/* Add shell functions. */
dumphashtable(shfunctab, t | (cc->mask & (CC_DISCMDS|CC_EXCMDS)));
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index 60bf6eb6b..6903bb8eb 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -1308,13 +1308,13 @@ static struct compparam compkparams[] = {
#define COMPSTATENAME "compstate"
static void
-addcompparams(struct compparam *cp, Param *pp)
+addcompparams(HashTable ht, struct compparam *cp, Param *pp)
{
for (; cp->name; cp++, pp++) {
- Param pm = createparam(cp->name,
- cp->type |PM_SPECIAL|PM_REMOVABLE|PM_LOCAL);
+ Param pm = createparam_ht(ht, cp->name,
+ cp->type |PM_SPECIAL|PM_REMOVABLE|PM_LOCAL);
if (!pm)
- pm = (Param) paramtab->getnode2(paramtab, cp->name);
+ pm = (Param) ht->getnode2(ht, cp->name);
DPUTS1(!pm, "param %s not set in addcompparams", cp->name);
*pp = pm;
@@ -1347,7 +1347,7 @@ makecompparams(void)
{
Param cpm;
- addcompparams(comprparams, comprpms);
+ addcompparams(paramtab, comprparams, comprpms);
if (!(cpm = createparam(
COMPSTATENAME,
@@ -1358,9 +1358,8 @@ makecompparams(void)
comprpms[CPN_COMPSTATE] = cpm;
cpm->level = locallevel + 1;
cpm->gsu.h = &compstate_gsu;
- cpm->u.hash = paramtab = newparamtable(31, COMPSTATENAME);
- addcompparams(compkparams, compkpms);
- paramtab = realparamtab;
+ cpm->u.hash = newparamtable(31, COMPSTATENAME);
+ addcompparams(cpm->u.hash, compkparams, compkpms);
}
/**/
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index b3ff29c2f..c0f5d2a2b 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -437,8 +437,8 @@ checkparams(char *p)
int t0, n, l = strlen(p), e = 0;
struct hashnode *hn;
- for (t0 = realparamtab->hsize - 1, n = 0; n < 2 && t0 >= 0; t0--)
- for (hn = realparamtab->nodes[t0]; n < 2 && hn; hn = hn->next)
+ for (t0 = paramtab->hsize - 1, n = 0; n < 2 && t0 >= 0; t0--)
+ for (hn = paramtab->nodes[t0]; n < 2 && hn; hn = hn->next)
if (pfxlen(p, hn->nam) == l) {
n++;
if ((int)strlen(hn->nam) == l)
diff --git a/Src/builtin.c b/Src/builtin.c
index 15d669cef..5bf8a49e1 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -2027,7 +2027,6 @@ typeset_single(char *cname, char *pname, Param pm, int func,
int on, int off, int roff, Asgment asg, Param altpm,
Options ops, int joinchar)
{
- DPUTS(paramtab != realparamtab, "BUG: typeset_single: paramtab != realparamtab");
int usepm, tc, keeplocal = 0, newspecial = NS_NONE, readonly, dont_set = 0;
char *subscript;
@@ -2665,7 +2664,6 @@ typeset_single(char *cname, char *pname, Param pm, int func,
mod_export int
bin_typeset(char *name, char **argv, LinkList assigns, Options ops, int func)
{
- DPUTS(paramtab != realparamtab, "BUG: bin_typeset: paramtab != realparamtab");
Param pm;
Asgment asg;
Patprog pprog;
@@ -3084,7 +3082,7 @@ bin_typeset(char *name, char **argv, LinkList assigns, Options ops, int func)
* Search through the parameter table and change all parameters
* matching the glob pattern to have these flags and/or value.
* Bad news: if the parameter gets altered, e.g. by
- * a type conversion, then paramtab can be shifted around,
+ * a type conversion, then the table can be shifted around,
* so we need to store the parameters to alter on a separate
* list for later use.
*/
@@ -3788,7 +3786,6 @@ mkautofn(Shfunc shf)
int
bin_unset(char *name, char **argv, Options ops, int func)
{
- DPUTS(paramtab != realparamtab, "BUG: bin_unset: paramtab != realparamtab");
Param pm, next;
Patprog pprog;
char *s;
@@ -3868,10 +3865,9 @@ bin_unset(char *name, char **argv, Options ops, int func)
continue;
}
if (PM_TYPE(pm->node.flags) == PM_HASHED) {
- HashTable tht = paramtab;
- if ((paramtab = pm->gsu.h->getfn(pm)))
- unsetparam(subscript);
- paramtab = tht;
+ HashTable ht;
+ if ((ht = pm->gsu.h->getfn(pm)))
+ unsetparam_ht(ht, subscript);
} else if (PM_TYPE(pm->node.flags) == PM_SCALAR ||
PM_TYPE(pm->node.flags) == PM_ARRAY) {
struct value vbuf;
diff --git a/Src/module.c b/Src/module.c
index c95dbb4a8..14bfdba4f 100644
--- a/Src/module.c
+++ b/Src/module.c
@@ -1146,10 +1146,10 @@ deleteparamdef(Paramdef d)
if (!searchpm)
return 1;
- realparamtab->removenode(realparamtab, pm->node.nam);
+ paramtab->removenode(paramtab, pm->node.nam);
prevpm->old = searchpm->old;
searchpm->old = pm;
- realparamtab->addnode(realparamtab, searchpm->node.nam, searchpm);
+ paramtab->addnode(paramtab, searchpm->node.nam, searchpm);
pm = searchpm;
}
@@ -2759,7 +2759,7 @@ bin_zmodload_auto(char *nam, char **args, Options ops)
} else if (OPT_ISSET(ops,'p')) {
if (!*args) {
/* list autoloaded parameters */
- scanhashtable(realparamtab, 1, 0, 0, printautoparams,
+ scanhashtable(paramtab, 1, 0, 0, printautoparams,
OPT_ISSET(ops,'L'));
return 0;
}
diff --git a/Src/params.c b/Src/params.c
index 03ab0479f..e0a17d5b7 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -539,16 +539,10 @@ static size_t argnparams_size;
static LinkList *scoperefs = NULL;
static int scoperefs_num = 0;
-/* "parameter table" - hash table containing the parameters
- *
- * realparamtab always points to the shell's global table. paramtab is sometimes
- * temporarily changed to point at another table, while dealing with the keys
- * of an associative array (for example, see makecompparams() which initializes
- * the associative array ${compstate}).
- */
-
+/* "parameter table" - hash table containing the parameters */
+
/**/
-mod_export HashTable paramtab, realparamtab;
+mod_export HashTable paramtab;
/**/
mod_export HashTable
@@ -614,7 +608,6 @@ isplaceholderref(Param pm)
mod_export Param
getparam(const char *name)
{
- DPUTS(paramtab != realparamtab, "BUG: getparam: paramtab != realparamtab");
return (Param) paramtab->getnode2(paramtab, name);
}
@@ -732,7 +725,6 @@ resolveparamref_pm(Param pm, int load, Param *lastref)
static Param
resolveparamref_rec(Param pm, int load, Param *lastref, const Param stop)
{
- DPUTS(paramtab != realparamtab, "BUG: resolveparam_rec: paramtab != realparamtab");
Param ref;
char *refname;
if (load)
@@ -763,7 +755,7 @@ resolveparamref_rec(Param pm, int load, Param *lastref, const Param stop)
pm->gsu.s = &argn_gsu;
}
unqueue_signals();
- } else if ((pm = (Param)gethashnode2(realparamtab, refname)) &&
+ } else if ((pm = (Param)gethashnode2(paramtab, refname)) &&
(pm = upscope(pm, ref)) && pm != stop)
pm = resolveparamref_rec(pm, load, lastref, stop);
return pm;
@@ -1026,7 +1018,7 @@ createparamtable(void)
char *machinebuf;
#endif
- paramtab = realparamtab = newparamtable(151, "paramtab");
+ paramtab = newparamtable(151, "paramtab");
/* Add the special parameters to the hash table */
for (ip = special_params; ip->node.nam; ip++)
paramtab->addnode(paramtab, ztrdup(ip->node.nam), ip);
@@ -1223,20 +1215,27 @@ assigngetset(Param pm)
/**/
mod_export Param
createparam(char *name, int flags)
+{
+ return createparam_ht(paramtab, name, flags);
+}
+
+/**/
+mod_export Param
+createparam_ht(HashTable ht, char *name, int flags)
{
Param pm, oldpm;
- if (paramtab != realparamtab)
+ if (ht != paramtab)
flags = (flags & ~PM_EXPORTED) | PM_HASHELEM;
if (name != nulstring) {
- oldpm = (Param) (paramtab == realparamtab ?
+ oldpm = (Param) (ht == paramtab ?
/* gethashnode2() for direct table read */
gethashnode2(paramtab, name) :
- paramtab->getnode(paramtab, name));
+ ht->getnode(ht, name));
if (oldpm && (oldpm->node.flags & PM_RO_BY_DESIGN)) {
- DPUTS(paramtab != realparamtab, "BUG: createparam/ro-by-design: paramtab != realparamtab");
+ DPUTS(ht != paramtab, "BUG: createparam/ro-by-design: ht != paramtab");
if (!(flags & PM_LOCAL)) {
/* Must call the API for namerefs and specials to work */
pm = getparam(oldpm->node.nam);
@@ -1258,7 +1257,7 @@ createparam(char *name, int flags)
if (isset_pm(oldpm) &&
(oldpm->level == locallevel || !(flags & PM_LOCAL)) &&
!(flags & PM_NAMEREF) && (oldpm->node.flags & PM_NAMEREF)) {
- DPUTS(paramtab != realparamtab, "BUG: createparam/nameref: paramtab != realparamtab");
+ DPUTS(ht != paramtab, "BUG: createparam/nameref: ht != paramtab");
/* The reference oldpm should either refer to a paramater
* that was unset or that does not yet exist, or it should
* be or refer to a placeholder reference. If it refers to
@@ -1317,7 +1316,7 @@ createparam(char *name, int flags)
}
oldpm->node.flags &= ~PM_UNSET;
if ((oldpm->node.flags & PM_SPECIAL) && oldpm->ename) {
- DPUTS(paramtab != realparamtab, "BUG: createparam/ename: paramtab != realparamtab");
+ DPUTS(ht != paramtab, "BUG: createparam/ename: ht != paramtab");
Param altpm = resolveparam(oldpm->ename, 1);
if (altpm)
altpm->node.flags &= ~PM_UNSET;
@@ -1336,9 +1335,9 @@ createparam(char *name, int flags)
*/
if (oldpm->env)
delenv(oldpm);
- paramtab->removenode(paramtab, name);
+ ht->removenode(ht, name);
}
- paramtab->addnode(paramtab, ztrdup(name), pm);
+ ht->addnode(ht, ztrdup(name), pm);
}
if (isset(ALLEXPORT) && !(flags & (PM_NAMEREF | PM_HASHELEM)))
@@ -1777,12 +1776,8 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w,
v->pm->gsu.h->setfn(v->pm, ht);
}
untokenize(s);
- if (!(v->pm = (Param) ht->getnode(ht, s))) {
- HashTable tht = paramtab;
- paramtab = ht;
- v->pm = createparam(s, PM_SCALAR|PM_UNSET);
- paramtab = tht;
- }
+ if (!(v->pm = (Param) ht->getnode(ht, s)))
+ v->pm = createparam_ht(ht, s, PM_SCALAR|PM_UNSET);
v->scanflags = (*inv ? SCANPM_WANTINDEX : 0);
v->start = 0;
*inv = 0; /* We've already obtained the "index" (key) */
@@ -2374,7 +2369,6 @@ getvalue(Value v, char **pptr, int bracks)
mod_export Value
fetchvalue(Value v, char **pptr, int bracks, int scanflags)
{
- DPUTS(paramtab != realparamtab, "BUG: fetchvalue: paramtab != realparamtab");
char *s, *t, *ie;
char sav, c;
int ppar = 0;
@@ -3312,7 +3306,6 @@ check_warn_pm(Param pm, const char *pmtype, int created,
mod_export Param
assignsparam(char *s, char *val, int flags)
{
- DPUTS(paramtab != realparamtab, "BUG: assignsparam: paramtab != realparamtab");
struct value vbuf;
Value v;
char *t = s;
@@ -3477,7 +3470,6 @@ setsparam(char *s, char *val)
mod_export Param
assignaparam(char *s, char **val, int flags)
{
- DPUTS(paramtab != realparamtab, "BUG: assignaparam: paramtab != realparamtab");
struct value vbuf;
Value v;
char *t = s;
@@ -3723,7 +3715,6 @@ setaparam(char *s, char **aval)
mod_export Param
sethparam(char *s, char **val)
{
- DPUTS(paramtab != realparamtab, "BUG: sethparam: paramtab != realparamtab");
struct value vbuf;
Value v;
char *t = s;
@@ -3785,7 +3776,6 @@ sethparam(char *s, char **val)
static Param
assignnparam(char *s, mnumber val, int flags)
{
- DPUTS(paramtab != realparamtab, "BUG: assignnparam: paramtab != realparamtab");
struct value vbuf;
Value v;
char *t = s, *ss;
@@ -3918,7 +3908,6 @@ setiparam_no_convert(char *s, zlong val)
mod_export int
resetparam(Param pm, int flags)
{
- DPUTS(paramtab != realparamtab, "BUG: resetparam: paramtab != realparamtab");
char *s = pm->node.nam;
queue_signals();
if (pm != getparam(s)) {
@@ -3938,15 +3927,20 @@ resetparam(Param pm, int flags)
/**/
mod_export void
unsetparam(char *s)
+{
+ unsetparam_ht(paramtab, s);
+}
+
+/**/
+mod_export void
+unsetparam_ht(HashTable ht, char *s)
{
Param pm;
queue_signals();
- if ((pm = (Param) (paramtab == realparamtab ?
- (HashNode) getparam(s) :
- paramtab->getnode(paramtab, s))) &&
+ if ((pm = (ht == paramtab ? getparam(s) : (Param) ht->getnode(ht, s))) &&
!(pm->node.flags & PM_NAMEREF))
- unsetparam_pm(pm, 0, 1);
+ unsetparam_pm_ht(ht, pm, 0, 1);
unqueue_signals();
}
@@ -3960,7 +3954,13 @@ unsetparam(char *s)
mod_export int
unsetparam_pm(Param pm, int altflag, int exp)
{
- Param oldpm, altpm;
+ return unsetparam_pm_ht(paramtab, pm, altflag, exp);
+}
+
+/**/
+mod_export int
+unsetparam_pm_ht(HashTable ht, Param pm, int altflag, int exp)
+{
char *altremove;
if ((pm->node.flags & PM_READONLY) && pm->level <= locallevel) {
@@ -3983,10 +3983,10 @@ unsetparam_pm(Param pm, int altflag, int exp)
/* remove it under its alternate name if necessary */
if (altremove) {
- DPUTS(paramtab != realparamtab, "BUG: unsetparam_pm/ename: paramtab != realparamtab");
- altpm = resolveparam(altremove, 1);
+ DPUTS(ht != paramtab, "BUG: unsetparam_pm/ename: ht != paramtab");
+ Param altpm = resolveparam(altremove, 1);
/* tied parameters are at the same local level as each other */
- oldpm = NULL;
+ Param oldpm = NULL;
/*
* Look for param under alternate name hidden by a local.
* If this parameter is special, however, the visible
@@ -4037,8 +4037,7 @@ unsetparam_pm(Param pm, int altflag, int exp)
* Global variables can only be deleted if they aren't hidden by a
* local one with the same name.
*/
- if (!pm->level && paramtab == realparamtab &&
- pm != getparam(pm->node.nam)) {
+ if (!pm->level && ht == paramtab && pm != getparam(pm->node.nam)) {
LinkList refs;
if (!scoperefs)
scoperefs = zshcalloc((scoperefs_num = 8) * sizeof(refs));
@@ -4049,11 +4048,11 @@ unsetparam_pm(Param pm, int altflag, int exp)
}
/* remove parameter node from table */
- paramtab->removenode(paramtab, pm->node.nam);
+ ht->removenode(ht, pm->node.nam);
if (pm->old) {
- oldpm = pm->old;
- paramtab->addnode(paramtab, oldpm->node.nam, oldpm);
+ Param oldpm = pm->old;
+ ht->addnode(ht, oldpm->node.nam, oldpm);
if (oldpm->node.flags & PM_EXPORTED) {
/*
* Re-export the old value which we removed in typeset_single().
@@ -4065,7 +4064,7 @@ unsetparam_pm(Param pm, int altflag, int exp)
}
}
- paramtab->freenode(&pm->node); /* free parameter node */
+ ht->freenode(&pm->node); /* free parameter node */
return 0;
}
@@ -4247,7 +4246,7 @@ arrhashsetfn(Param pm, char **val, int flags)
* since that could cause trouble for special hashes. This way, *
* it's up to pm->gsu.h->setfn() what to do. */
int alen = 0;
- HashTable opmtab = paramtab, ht = 0;
+ HashTable ht = 0;
char **aptr;
Value v = (Value) hcalloc(sizeof *v);
v->end = -1;
@@ -4263,10 +4262,10 @@ arrhashsetfn(Param pm, char **val, int flags)
return;
}
if (flags & ASSPM_AUGMENT) {
- ht = paramtab = pm->gsu.h->getfn(pm);
+ ht = pm->gsu.h->getfn(pm);
}
- if (alen && (!(flags & ASSPM_AUGMENT) || !paramtab)) {
- ht = paramtab = newparamtable(17, pm->node.nam);
+ if (alen && (!(flags & ASSPM_AUGMENT) || !ht)) {
+ ht = newparamtable(17, pm->node.nam);
}
for (aptr = val; *aptr; ) {
int eltflags = 0;
@@ -4284,18 +4283,17 @@ arrhashsetfn(Param pm, char **val, int flags)
zsfree(*aptr++);
}
/* The parameter name is ztrdup'd... */
- v->pm = createparam(*aptr, PM_SCALAR|PM_UNSET);
+ v->pm = createparam_ht(ht, *aptr, PM_SCALAR|PM_UNSET);
/*
* createparam() doesn't return anything if the parameter
* already existed.
*/
if (!v->pm)
- v->pm = (Param) paramtab->getnode(paramtab, *aptr);
+ v->pm = (Param) ht->getnode(ht, *aptr);
zsfree(*aptr++);
/* ...but we can use the value without copying. */
assignstrvalue(v, *aptr++, eltflags);
}
- paramtab = opmtab;
pm->gsu.h->setfn(pm, ht);
free(val); /* not freearray() */
}
@@ -4487,7 +4485,6 @@ tiedarrgetfn(Param pm)
void
tiedarrsetfn(Param pm, char *x)
{
- DPUTS(paramtab != realparamtab, "BUG: tiedarrsetfn: paramtab != realparamtab");
struct tieddata *dptr = (struct tieddata *)pm->u.data;
if (*dptr->arrptr)
@@ -5459,7 +5456,6 @@ pipestatsetfn(UNUSED(Param pm), char **x)
void
arrfixenv(char *s, char **t)
{
- DPUTS(paramtab != realparamtab, "BUG: arrfixenv: paramtab != realparamtab");
Param pm;
int joinchar;
@@ -6453,7 +6449,6 @@ printparamnode(HashNode hn, int printflags)
* typeset -T SCALAR array=('')
* (same for (a b:c)...)
*/
- DPUTS(paramtab != realparamtab, "BUG: printparamnode_pm/ename: paramtab != realparamtab");
Param tmp = resolveparam(p->ename, 1);
/*
@@ -6539,7 +6534,7 @@ setscope(Param pm)
queue_signals();
/* Compute pm->base */
if (!(pm->node.flags & PM_UPPER) && refname && *refname &&
- (basepm = (Param)gethashnode2(realparamtab, refname)) &&
+ (basepm = (Param) gethashnode2(paramtab, refname)) &&
(basepm != pm || !basepm->old || (basepm = basepm->old))) {
setscope_base(pm, basepm->level);
}
Messages sorted by:
Reverse Date,
Date,
Thread,
Author