* Re: Strange behavior creating functions
@ 2000-01-31 9:49 Sven Wischnowsky
2000-01-31 11:39 ` Bart Schaefer
0 siblings, 1 reply; 3+ messages in thread
From: Sven Wischnowsky @ 2000-01-31 9:49 UTC (permalink / raw)
To: zsh-workers
Bart Schaefer wrote:
> I wanted to create a function with a unique name, so I tried this:
>
> function foo$$ () { echo $0 }
>
> This works as expected in 3.0.7, creating a function named foo31679 (or
> whatever the PID is). Same for 3.1.6-dev-14.
>
> However, in 3.1.6-dev-16 (the first "foo" is an autoloaded function I use
> for testing):
>
> zagzig[60] functions -m foo\*
> foo () {
> # undefined
> builtin autoload -X
> }
> foo () {
> echo $0
> }
> zagzig[61] zmodload parameter; print -l ${functions[(I)foo*]}
> foo
> foo$$
> zagzig[62] foo$$
> zsh: command not found: foo29406
> zagzig[63] 'foo$$'
> zsh: command not found: foo$$
Urgh. Names in function definitions should be expanded.
Bye
Sven
diff -ru ../z.old/Src/exec.c Src/exec.c
--- ../z.old/Src/exec.c Mon Jan 31 09:10:16 2000
+++ Src/exec.c Mon Jan 31 10:46:05 2000
@@ -2917,25 +2917,24 @@
{
Shfunc shf;
char *s;
- int signum, nprg, npats, num, len, plen, i;
- Wordcode beg = state->pc, end, names;
+ int signum, nprg, npats, len, plen, i;
+ Wordcode beg = state->pc, end;
Eprog prog;
Patprog *pp;
+ LinkList names;
end = beg + WC_FUNCDEF_SKIP(state->pc[-1]);
- num = state->pc[0];
- names = state->pc + 1;
- nprg = state->pc[1 + num] - 4;
- npats = state->pc[2 + num];
-
- state->pc += num + 3;
+ names = ecgetlist(state, *state->pc++, 1);
+ nprg = *state->pc++ - 4;
+ npats = *state->pc++;
plen = (end - state->pc) * sizeof(wordcode);
len = plen + (npats * sizeof(Patprog));
+ execsubst(names);
+
PERMALLOC {
- while (num--) {
- s = ecrawstr(state->prog, names++);
+ while ((s = (char *) ugetnode(names))) {
prog = (Eprog) zalloc(sizeof(*prog));
prog->heap = 0;
prog->len = len;
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Strange behavior creating functions
2000-01-31 9:49 Strange behavior creating functions Sven Wischnowsky
@ 2000-01-31 11:39 ` Bart Schaefer
0 siblings, 0 replies; 3+ messages in thread
From: Bart Schaefer @ 2000-01-31 11:39 UTC (permalink / raw)
To: zsh-workers
On Jan 31, 10:49am, Sven Wischnowsky wrote:
} Subject: Re: Strange behavior creating functions
}
}
} Bart Schaefer wrote:
}
} > I wanted to create a function with a unique name, so I tried this:
} >
} > function foo$$ () { echo $0 }
}
} Urgh. Names in function definitions should be expanded.
This seems like the sort of thing that should have a regression test in
the Test directory -- because otherwise no one will remember about it,
and it was pure accident that I found it at all.
I'm sure we can find other function definition tests to try.
--- /dev/null Tue May 5 13:32:27 1998
+++ Test/09funcdef.ztst Mon Jan 31 03:32:58 2000
@@ -0,0 +1,8 @@
+%test
+
+ function f$$ () {
+ print regress expansion of function names
+ }
+ f$$
+0:Regression test: `function f$$ () { ... }'
+>regress expansion of function names
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
^ permalink raw reply [flat|nested] 3+ messages in thread
* Strange behavior creating functions
@ 2000-01-30 20:17 Bart Schaefer
0 siblings, 0 replies; 3+ messages in thread
From: Bart Schaefer @ 2000-01-30 20:17 UTC (permalink / raw)
To: zsh-workers
I wanted to create a function with a unique name, so I tried this:
function foo$$ () { echo $0 }
This works as expected in 3.0.7, creating a function named foo31679 (or
whatever the PID is). Same for 3.1.6-dev-14.
However, in 3.1.6-dev-16 (the first "foo" is an autoloaded function I use
for testing):
zagzig[60] functions -m foo\*
foo () {
# undefined
builtin autoload -X
}
foo () {
echo $0
}
zagzig[61] zmodload parameter; print -l ${functions[(I)foo*]}
foo
foo$$
zagzig[62] foo$$
zsh: command not found: foo29406
zagzig[63] 'foo$$'
zsh: command not found: foo$$
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2000-01-31 11:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-01-31 9:49 Strange behavior creating functions Sven Wischnowsky
2000-01-31 11:39 ` Bart Schaefer
-- strict thread matches above, loose matches on Subject: below --
2000-01-30 20:17 Bart Schaefer
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).