From 49d6aace41f5fe47abfaa87d25c42dbdb84dfb88 Mon Sep 17 00:00:00 2001 From: "Barton E. Schaefer" Date: Fri, 28 Nov 2014 13:30:22 -0800 Subject: 33816, 33819: GLOB_ASSIGN changes integer and floating type variables to string scalars --- ChangeLog | 8 ++++++++ Src/exec.c | 10 +++++++++- Test/A06assign.ztst | 20 ++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 7a9de40d4..2a308a37e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-11-28 Barton E. Schaefer + + * 33819: Test/A06assign.ztst: regression tests for 33816 + + * 33816 (2nd part): Src/exec.c: GLOB_ASSIGN changes integer and + floating type variables to string scalars rather than treat single + match file names as arithmetic expressions + 2014-11-28 Wayne Davison * unposted: avoid compiler warning about a set-but-not-used var. diff --git a/Src/exec.c b/Src/exec.c index 02a8fe3ad..2b7c55f8f 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -2243,8 +2243,16 @@ addvars(Estate state, Wordcode pc, int addflags) state->pc = opc; return; } - if (isset(GLOBASSIGN) || !isstr) + if (!isstr || (isset(GLOBASSIGN) && + haswilds((char *)getdata(firstnode(vl))))) { globlist(vl, 0); + /* Unset the parameter to force it to be recreated + * as either scalar or array depending on how many + * matches were found for the glob. + */ + if (isset(GLOBASSIGN)) + unsetparam(name); + } if (errflag) { state->pc = opc; return; diff --git a/Test/A06assign.ztst b/Test/A06assign.ztst index 9a0a4f0cc..3c9ea0837 100644 --- a/Test/A06assign.ztst +++ b/Test/A06assign.ztst @@ -1,5 +1,10 @@ # Tests of parameter assignments +%prep + mkdir assign.tmp && cd assign.tmp + + touch tmpfile1 tmpfile2 + %test typeset -A assoc @@ -413,3 +418,18 @@ >world >worldliness >world + + integer i n x + float f + setopt globassign + i=tmpfile1 + n=tmp* + x=*2 + f=2+2 + typeset -p i n x f +0:GLOB_ASSIGN with numeric types +>typeset -i i=0 +>typeset -a n +>n=(tmpfile1 tmpfile2) +>typeset x=tmpfile2 +>typeset -E f=4.000000000e+00 -- cgit 1.4.1