mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-01 21:51:40 +02:00
"typeset -p" uses "export" commands or the "-g" option for parameters that are not local to the current scope
This commit is contained in:
parent
71dd0ab62e
commit
0f5e670cde
7 changed files with 39 additions and 10 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2016-10-24 Barton E. Schaefer <schaefer@zsh.org>
|
||||||
|
|
||||||
|
* unposted: NEWS, README: update for 39704.
|
||||||
|
|
||||||
|
* 39704: Src/params.c, Test/B02typeset.ztst, Test/B03print.ztst,
|
||||||
|
Test/V10private.ztst: the output of "typeset -p" uses "export"
|
||||||
|
commands or the "-g" option for parameters that are not local to
|
||||||
|
the current scope.
|
||||||
|
|
||||||
2016-10-24 Daniel Shahaf <d.s@daniel.shahaf.name>
|
2016-10-24 Daniel Shahaf <d.s@daniel.shahaf.name>
|
||||||
|
|
||||||
* 39706: Completion/Unix/Type/_tilde_files, Doc/Zsh/compsys.yo:
|
* 39706: Completion/Unix/Type/_tilde_files, Doc/Zsh/compsys.yo:
|
||||||
|
|
3
NEWS
3
NEWS
|
@ -15,6 +15,9 @@ removed, even when /before/here is itself a symbolic link. It is
|
||||||
recommended to review uses of ':A' and, if appropriate, convert them
|
recommended to review uses of ':A' and, if appropriate, convert them
|
||||||
to ':P' as soon as compatibility with 5.2 is no longer a requirement.
|
to ':P' as soon as compatibility with 5.2 is no longer a requirement.
|
||||||
|
|
||||||
|
The output of "typeset -p" uses "export" commands or the "-g" option
|
||||||
|
for parameters that are not local to the current scope.
|
||||||
|
|
||||||
Changes from 5.1.1 to 5.2
|
Changes from 5.1.1 to 5.2
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|
5
README
5
README
|
@ -110,6 +110,11 @@ possible to return a non-zero status to the parent shell from a command
|
||||||
executed as a replacement, and the new implementation is more consistent
|
executed as a replacement, and the new implementation is more consistent
|
||||||
with other shells.
|
with other shells.
|
||||||
|
|
||||||
|
7) The output of "typeset -p" (and synonyms) now takes into account the
|
||||||
|
function scope and export state of each parameter. Exported parameters
|
||||||
|
are output as "export" commands unless the parameter is also local, and
|
||||||
|
other parameters not local to the scope are output with the "-g" option.
|
||||||
|
|
||||||
Incompatibilities between 5.0.8 and 5.2
|
Incompatibilities between 5.0.8 and 5.2
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
|
22
Src/params.c
22
Src/params.c
|
@ -5225,7 +5225,7 @@ printparamvalue(Param p, int printflags)
|
||||||
{
|
{
|
||||||
char *t, **u;
|
char *t, **u;
|
||||||
|
|
||||||
if (p->node.flags & PM_AUTOLOAD) {
|
if ((p->node.flags & PM_EXPORTED) && !p->env) {
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -5312,9 +5312,13 @@ printparamnode(HashNode hn, int printflags)
|
||||||
*/
|
*/
|
||||||
printflags |= PRINT_NAMEONLY;
|
printflags |= PRINT_NAMEONLY;
|
||||||
}
|
}
|
||||||
|
else if (p->node.flags & PM_EXPORTED)
|
||||||
|
printflags |= PRINT_NAMEONLY;
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (p->node.flags & PM_AUTOLOAD)
|
||||||
|
printflags |= PRINT_NAMEONLY;
|
||||||
|
|
||||||
if (printflags & PRINT_TYPESET) {
|
if (printflags & PRINT_TYPESET) {
|
||||||
if ((p->node.flags & (PM_READONLY|PM_SPECIAL)) ==
|
if ((p->node.flags & (PM_READONLY|PM_SPECIAL)) ==
|
||||||
|
@ -5326,7 +5330,14 @@ printparamnode(HashNode hn, int printflags)
|
||||||
*/
|
*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
printf("typeset ");
|
if (locallevel && p->level >= locallevel) {
|
||||||
|
printf("typeset "); /* printf("local "); */
|
||||||
|
} else if (p->node.flags & PM_EXPORTED) {
|
||||||
|
printf("export ");
|
||||||
|
} else if (locallevel) {
|
||||||
|
printf("typeset -g ");
|
||||||
|
} else
|
||||||
|
printf("typeset ");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print the attributes of the parameter */
|
/* Print the attributes of the parameter */
|
||||||
|
@ -5339,7 +5350,9 @@ printparamnode(HashNode hn, int printflags)
|
||||||
if (pmptr->flags & PMTF_TEST_LEVEL) {
|
if (pmptr->flags & PMTF_TEST_LEVEL) {
|
||||||
if (p->level)
|
if (p->level)
|
||||||
doprint = 1;
|
doprint = 1;
|
||||||
} else if (p->node.flags & pmptr->binflag)
|
} else if ((pmptr->binflag != PM_EXPORTED ||
|
||||||
|
((p->node.flags & PM_LOCAL) || p->level)) &&
|
||||||
|
(p->node.flags & pmptr->binflag))
|
||||||
doprint = 1;
|
doprint = 1;
|
||||||
|
|
||||||
if (doprint) {
|
if (doprint) {
|
||||||
|
@ -5351,9 +5364,8 @@ printparamnode(HashNode hn, int printflags)
|
||||||
}
|
}
|
||||||
putchar(pmptr->typeflag);
|
putchar(pmptr->typeflag);
|
||||||
}
|
}
|
||||||
} else {
|
} else
|
||||||
printf("%s ", pmptr->string);
|
printf("%s ", pmptr->string);
|
||||||
}
|
|
||||||
if ((pmptr->flags & PMTF_USE_BASE) && p->base) {
|
if ((pmptr->flags & PMTF_USE_BASE) && p->base) {
|
||||||
printf("%d ", p->base);
|
printf("%d ", p->base);
|
||||||
doneminus = 0;
|
doneminus = 0;
|
||||||
|
|
|
@ -454,7 +454,7 @@
|
||||||
fn() { typeset -p array nonexistent; }
|
fn() { typeset -p array nonexistent; }
|
||||||
fn
|
fn
|
||||||
1:declare -p shouldn't create scoped values
|
1:declare -p shouldn't create scoped values
|
||||||
>typeset -a array=( foo bar )
|
>typeset -g -a array=( foo bar )
|
||||||
?fn:typeset: no such variable: nonexistent
|
?fn:typeset: no such variable: nonexistent
|
||||||
|
|
||||||
unsetopt typesetsilent
|
unsetopt typesetsilent
|
||||||
|
@ -490,7 +490,7 @@
|
||||||
?0
|
?0
|
||||||
?(eval):5: read-only variable: pbro
|
?(eval):5: read-only variable: pbro
|
||||||
?(eval):6: read-only variable: pbro
|
?(eval):6: read-only variable: pbro
|
||||||
?typeset -r pbro
|
?typeset -g -r pbro
|
||||||
?0
|
?0
|
||||||
?(eval):10: read-only variable: pbro
|
?(eval):10: read-only variable: pbro
|
||||||
|
|
||||||
|
|
|
@ -308,5 +308,5 @@
|
||||||
printf -v foo "%s\0%s-" into the breach
|
printf -v foo "%s\0%s-" into the breach
|
||||||
typeset -p foo
|
typeset -p foo
|
||||||
0:print and printf into a variable
|
0:print and printf into a variable
|
||||||
>typeset foo='once more'
|
>typeset -g foo='once more'
|
||||||
>typeset foo=$'into\C-@the-breach\C-@-'
|
>typeset -g foo=$'into\C-@the-breach\C-@-'
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
0:private hides value from surrounding scope in nested scope
|
0:private hides value from surrounding scope in nested scope
|
||||||
>typeset -a hash_test=( top level )
|
>typeset -a hash_test=( top level )
|
||||||
>typeset -A hash_test=( in function )
|
>typeset -A hash_test=( in function )
|
||||||
>typeset -a hash_test=( top level )
|
>typeset -g -a hash_test=( top level )
|
||||||
>array-local top level
|
>array-local top level
|
||||||
>top level
|
>top level
|
||||||
F:note "typeset" rather than "private" in output from outer
|
F:note "typeset" rather than "private" in output from outer
|
||||||
|
|
Loading…
Reference in a new issue