From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25562 invoked from network); 14 Jan 2000 10:47:04 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 14 Jan 2000 10:47:04 -0000 Received: (qmail 11326 invoked by alias); 14 Jan 2000 10:46:56 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 9318 Received: (qmail 11319 invoked from network); 14 Jan 2000 10:46:56 -0000 Date: Fri, 14 Jan 2000 11:46:55 +0100 (MET) Message-Id: <200001141046.LAA01051@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk Subject: PATCH: unnecessary calls to getjobtext() At home I'm currently playing with a word-code version of zsh, this makes me notice some things... There are still many unnecessary calls to getjobtext() if I'm not completely mistaken. We don't need to build the text when we are executing a function (if that is suspended, the whole function is suspended and then the text for it will be created) or when we are sourcing a file (since this can't be suspended as we recently found out). In both cases: unless the pipe is backgrounded. Or does anyone see any problems with this? Makes startup and compinit a bit faster. Bye Sven diff -ru ../z.old/Src/exec.c Src/exec.c --- ../z.old/Src/exec.c Fri Jan 14 09:33:15 2000 +++ Src/exec.c Fri Jan 14 11:39:22 2000 @@ -1053,7 +1053,7 @@ lineno = pline->left->lineno; if (pline_level == 1) { - if (!sfcontext) + if ((how & Z_ASYNC) || (!sfcontext && !sourcelevel)) strcpy(list_pipe_text, getjobtext((void *) pline->left)); else list_pipe_text[0] = '\0'; @@ -1639,7 +1639,8 @@ } /* Get the text associated with this command. */ - if (!sfcontext && (jobbing || (how & Z_TIMED))) + if ((how & Z_ASYNC) || + (!sfcontext && !sourcelevel && (jobbing || (how & Z_TIMED)))) text = getjobtext((void *) cmd); else text = NULL; @@ -2854,7 +2855,7 @@ { LinkList last_file_list = NULL; unsigned char *ocs; - int ocsp; + int ocsp, osfc; if (errflag) return; @@ -2882,7 +2883,10 @@ ocsp = cmdsp; cmdstack = (unsigned char *) zalloc(CMDSTACKSZ); cmdsp = 0; + if ((osfc = sfcontext) == SFC_NONE) + sfcontext = SFC_DIRECT; doshfunc(shf->nam, shf->funcdef, args, shf->flags, 0); + sfcontext = osfc; free(cmdstack); cmdstack = ocs; cmdsp = ocsp; diff -ru ../z.old/Src/init.c Src/init.c --- ../z.old/Src/init.c Fri Jan 14 09:33:16 2000 +++ Src/init.c Fri Jan 14 09:34:04 2000 @@ -708,7 +708,7 @@ breaks = loops = 0; lastmailcheck = time(NULL); locallevel = sourcelevel = 0; - sfcontext = SFC_DIRECT; + sfcontext = SFC_NONE; trapreturn = 0; noerrexit = -1; nohistsave = 1; diff -ru ../z.old/Src/zsh.h Src/zsh.h --- ../z.old/Src/zsh.h Fri Jan 14 09:33:18 2000 +++ Src/zsh.h Fri Jan 14 09:33:51 2000 @@ -850,12 +850,13 @@ /* Shell function context types. */ -#define SFC_DIRECT 0 /* called directly from the user */ -#define SFC_SIGNAL 1 /* signal handler */ -#define SFC_HOOK 2 /* one of the special functions */ -#define SFC_WIDGET 3 /* user defined widget */ -#define SFC_COMPLETE 4 /* called from completion code */ -#define SFC_CWIDGET 5 /* new style completion widget */ +#define SFC_NONE 0 /* no function running */ +#define SFC_DIRECT 1 /* called directly from the user */ +#define SFC_SIGNAL 2 /* signal handler */ +#define SFC_HOOK 3 /* one of the special functions */ +#define SFC_WIDGET 4 /* user defined widget */ +#define SFC_COMPLETE 5 /* called from completion code */ +#define SFC_CWIDGET 6 /* new style completion widget */ /* node in list of function call wrappers */ -- Sven Wischnowsky wischnow@informatik.hu-berlin.de