zsh-workers
 help / color / mirror / code / Atom feed
* 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

* Re: Strange behavior creating functions
  2000-01-31  9:49 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

* 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

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-30 20:17 Strange behavior creating functions Bart Schaefer
2000-01-31  9:49 Sven Wischnowsky
2000-01-31 11:39 ` 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).