zsh-workers
 help / color / mirror / code / Atom feed
From: Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
To: zsh-workers@sunsite.auc.dk
Subject: Re: Strange behavior creating functions
Date: Mon, 31 Jan 2000 10:49:17 +0100 (MET)	[thread overview]
Message-ID: <200001310949.KAA29090@beta.informatik.hu-berlin.de> (raw)
In-Reply-To: "Bart Schaefer"'s message of Sun, 30 Jan 2000 20:17:06 +0000


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


             reply	other threads:[~2000-01-31  9:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-01-31  9:49 Sven Wischnowsky [this message]
2000-01-31 11:39 ` Bart Schaefer
  -- strict thread matches above, loose matches on Subject: below --
2000-01-30 20:17 Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200001310949.KAA29090@beta.informatik.hu-berlin.de \
    --to=wischnow@informatik.hu-berlin.de \
    --cc=zsh-workers@sunsite.auc.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).