Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Strange behavior creating functions
- X-seq: zsh-workers 9487
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: Re: Strange behavior creating functions
- Date: Mon, 31 Jan 2000 10:49:17 +0100 (MET)
- In-reply-to: "Bart Schaefer"'s message of Sun, 30 Jan 2000 20:17:06 +0000
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
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@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author