* replacement slowdown
@ 2005-04-22 23:23 Clint Adams
2005-04-23 3:14 ` Bart Schaefer
0 siblings, 1 reply; 11+ messages in thread
From: Clint Adams @ 2005-04-22 23:23 UTC (permalink / raw)
To: zsh-workers
${(f)"$(</tmp/blah)"//,/x}
is much slower (23 secs vs. 0.8 secs) in 4.2.2 than it was in 4.2.1,
if /tmp/blah is a ssh known_hosts file.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-22 23:23 replacement slowdown Clint Adams
@ 2005-04-23 3:14 ` Bart Schaefer
2005-04-23 3:19 ` Clint Adams
0 siblings, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 2005-04-23 3:14 UTC (permalink / raw)
To: zsh-workers
On Apr 22, 7:23pm, Clint Adams wrote:
}
} ${(f)"$(</tmp/blah)"//,/x}
}
} is much slower (23 secs vs. 0.8 secs) in 4.2.2 than it was in 4.2.1
This coincides with the change to introduce the "gsu" structure for
storing functions that perform the get/set/unset of parameters, and
to the addition of the gettimeofday() call in zfork().
Also to the change from times() to getrusage() for timing child jobs,
and to some changes in pattern matching to handle metafied strings
properly:
+ * 20522: Src/glob.c, Test/D02glob.ztst: must-match optimisation
+ was broken for pattern substitutions in parameters.
+ * 20500: Misc/globtests, Src/glob.c, Src/pattern.c, Src/zsh.h,
+ Src/Zle/complist.c, Test/D02glob.ztst: Use unmetafied strings
+ in patterns more;
+ * 20490: Src/pattern.c, Src/zsh.h: use lengths for test strings in
+ patterns instead of null termination.
Any or all of those could be contributing to slowness in the example you
gave. Someone will have to run both versions through a profiler.
BTW, did you check that both builds used the same compiler optimization
settings?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-23 3:14 ` Bart Schaefer
@ 2005-04-23 3:19 ` Clint Adams
2005-04-23 16:07 ` Bart Schaefer
2005-04-23 16:25 ` Bart Schaefer
0 siblings, 2 replies; 11+ messages in thread
From: Clint Adams @ 2005-04-23 3:19 UTC (permalink / raw)
To: Bart Schaefer; +Cc: zsh-workers
> + * 20500: Misc/globtests, Src/glob.c, Src/pattern.c, Src/zsh.h,
> + Src/Zle/complist.c, Test/D02glob.ztst: Use unmetafied strings
> + in patterns more;
> Any or all of those could be contributing to slowness in the example you
> gave. Someone will have to run both versions through a profiler.
Well, I haven't profiled 4.2.1, but in 4.2.5, it's spending all its time
in ztrsub (called 57093 times) in pattryrefs.
> BTW, did you check that both builds used the same compiler optimization
> settings?
Yes.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-23 3:19 ` Clint Adams
@ 2005-04-23 16:07 ` Bart Schaefer
2005-04-23 16:26 ` Clint Adams
2005-04-23 16:25 ` Bart Schaefer
1 sibling, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 2005-04-23 16:07 UTC (permalink / raw)
To: zsh-workers
On Apr 22, 11:19pm, Clint Adams wrote:
}
} Well, I haven't profiled 4.2.1, but in 4.2.5, it's spending all its time
} in ztrsub (called 57093 times) in pattryrefs.
Is that a profile for the entire shell from startup to exit, or just
for the ${(f)"$(</tmp/blah)"//,/x} substitution?
Is zsh compiled with debugging (that is, with the DEBUG macro defined)?
ztrsub() shouldn't be particularly expensive, but it's a bit more so in
debugging mode.
Also, there's no loop in pattryrefs(), so the fact that it's in ztrsub()
may be misleading. There are exactly 2 calls to ztrsub() in there.
What's calling pattryrefs() 28000+ times? Is that how many lines there
are in /tmp/blah?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-23 3:19 ` Clint Adams
2005-04-23 16:07 ` Bart Schaefer
@ 2005-04-23 16:25 ` Bart Schaefer
1 sibling, 0 replies; 11+ messages in thread
From: Bart Schaefer @ 2005-04-23 16:25 UTC (permalink / raw)
To: zsh-workers
On Apr 22, 11:19pm, Clint Adams wrote:
}
} Well, I haven't profiled 4.2.1, but in 4.2.5, it's spending all its time
Ths is probably going to be even worse in the current dev versions due to
UTF-8 handling, by the way.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-23 16:07 ` Bart Schaefer
@ 2005-04-23 16:26 ` Clint Adams
2005-04-23 17:12 ` Bart Schaefer
0 siblings, 1 reply; 11+ messages in thread
From: Clint Adams @ 2005-04-23 16:26 UTC (permalink / raw)
To: Bart Schaefer; +Cc: zsh-workers
[-- Attachment #1: Type: text/plain, Size: 722 bytes --]
> Is that a profile for the entire shell from startup to exit, or just
> for the ${(f)"$(</tmp/blah)"//,/x} substitution?
Entire shell, run as
time obj/Src/zsh -fc 'print -l ${(f)"$(</tmp/blah)"//,/x} >/dev/null'
> Is zsh compiled with debugging (that is, with the DEBUG macro defined)?
> ztrsub() shouldn't be particularly expensive, but it's a bit more so in
> debugging mode.
No, without.
> Also, there's no loop in pattryrefs(), so the fact that it's in ztrsub()
> may be misleading. There are exactly 2 calls to ztrsub() in there.
> What's calling pattryrefs() 28000+ times? Is that how many lines there
> are in /tmp/blah?
231 lines, but 57093 chars. pattrylen() seems to be called 57092 times
by igetmatch.
[-- Attachment #2: zsh.gprof.output --]
[-- Type: text/plain, Size: 137262 bytes --]
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
68.29 0.28 0.28 57093 0.00 0.00 ztrsub
7.32 0.31 0.03 462 0.06 0.06 findsep
7.32 0.34 0.03 1 30.00 30.10 readoutput
4.88 0.36 0.02 235 0.09 0.09 hasbraces
4.88 0.38 0.02 231 0.09 0.09 getkeystring
2.44 0.39 0.01 1334 0.01 0.01 zhalloc
2.44 0.40 0.01 243 0.04 0.04 remnulargs
2.44 0.41 0.01 234 0.04 0.04 haswilds
0.00 0.41 0.00 57093 0.00 0.00 pattryrefs
0.00 0.41 0.00 57093 0.00 0.00 set_pat_start
0.00 0.41 0.00 57092 0.00 0.00 pattrylen
0.00 0.41 0.00 1035 0.00 0.00 nohw
0.00 0.41 0.00 816 0.00 0.00 hasher
0.00 0.41 0.00 723 0.00 0.00 ingetc
0.00 0.41 0.00 477 0.00 0.00 zalloc
0.00 0.41 0.00 425 0.00 0.00 addhashnode
0.00 0.41 0.00 425 0.00 0.00 addhashnode2
0.00 0.41 0.00 389 0.00 0.01 insertlinknode
0.00 0.41 0.00 366 0.00 0.00 gethashnode2
0.00 0.41 0.00 338 0.00 0.00 ztrdup
0.00 0.41 0.00 269 0.00 0.01 hcalloc
0.00 0.41 0.00 243 0.00 0.00 ugetnode
0.00 0.41 0.00 242 0.00 0.01 dupstring
0.00 0.41 0.00 242 0.00 0.00 untokenize
0.00 0.41 0.00 241 0.00 0.00 filesub
0.00 0.41 0.00 241 0.00 0.00 filesubstr
0.00 0.41 0.00 234 0.00 0.04 zglob
0.00 0.41 0.00 175 0.00 0.00 getparamnode
0.00 0.41 0.00 168 0.00 0.00 add
0.00 0.41 0.00 156 0.00 0.01 get_match_ret
0.00 0.41 0.00 156 0.00 0.00 patmatchlen
0.00 0.41 0.00 155 0.00 0.00 setemulate
0.00 0.41 0.00 145 0.00 0.00 fetchvalue
0.00 0.41 0.00 141 0.00 0.00 getvalue
0.00 0.41 0.00 117 0.00 0.00 zshcalloc
0.00 0.41 0.00 102 0.00 0.00 addbuiltin
0.00 0.41 0.00 92 0.00 0.00 isident
0.00 0.41 0.00 74 0.00 0.00 zsfree
0.00 0.41 0.00 69 0.00 0.00 setstrvalue
0.00 0.41 0.00 64 0.00 0.00 assignsparam
0.00 0.41 0.00 62 0.00 0.00 createparam
0.00 0.41 0.00 61 0.00 0.00 assigngetset
0.00 0.41 0.00 60 0.00 0.00 zfree
0.00 0.41 0.00 59 0.00 0.00 strsetfn
0.00 0.41 0.00 51 0.00 0.00 nohwe
0.00 0.41 0.00 42 0.00 0.00 ecadd
0.00 0.41 0.00 41 0.00 0.00 gettok
0.00 0.41 0.00 41 0.00 0.00 yylex
0.00 0.41 0.00 38 0.00 0.00 exalias
0.00 0.41 0.00 28 0.00 0.00 has_token
0.00 0.41 0.00 27 0.00 0.00 add_autoparam
0.00 0.41 0.00 27 0.00 0.00 metafy
0.00 0.41 0.00 25 0.00 0.00 add_autobin
0.00 0.41 0.00 25 0.00 0.00 gethashnode
0.00 0.41 0.00 25 0.00 0.00 inungetc
0.00 0.41 0.00 25 0.00 0.00 strucpy
0.00 0.41 0.00 22 0.00 0.01 split_env_string
0.00 0.41 0.00 21 0.00 0.00 inputsetline
0.00 0.41 0.00 19 0.00 0.00 hbegin
0.00 0.41 0.00 19 0.00 0.00 hend
0.00 0.41 0.00 19 0.00 0.00 inputline
0.00 0.41 0.00 19 0.00 0.00 lexinit
0.00 0.41 0.00 19 0.00 0.00 mmap_heap_alloc
0.00 0.41 0.00 19 0.00 0.00 shingetline
0.00 0.41 0.00 19 0.00 0.00 tricat
0.00 0.41 0.00 19 0.00 0.00 zrealloc
0.00 0.41 0.00 18 0.00 0.01 gettokstr
0.00 0.41 0.00 18 0.00 0.00 init_parse
0.00 0.41 0.00 17 0.00 0.00 intr
0.00 0.41 0.00 17 0.00 0.00 zinsertlinknode
0.00 0.41 0.00 16 0.00 0.00 freeheap
0.00 0.41 0.00 16 0.00 0.00 par_event
0.00 0.41 0.00 16 0.00 0.01 parse_event
0.00 0.41 0.00 15 0.00 0.00 clear_hdocs
0.00 0.41 0.00 15 0.00 0.00 znewlinklist
0.00 0.41 0.00 11 0.00 0.00 getsparam
0.00 0.41 0.00 11 0.00 0.00 stringsubst
0.00 0.41 0.00 10 0.00 0.00 ecgetstr
0.00 0.41 0.00 10 0.00 0.01 ecstrcode
0.00 0.41 0.00 10 0.00 0.00 find_module
0.00 0.41 0.00 10 0.00 0.00 newhashtable
0.00 0.41 0.00 9 0.00 0.00 add_dep
0.00 0.41 0.00 9 0.00 0.00 copyenvstr
0.00 0.41 0.00 9 0.00 0.00 mkenvstr
0.00 0.41 0.00 9 0.00 3.32 prefork
0.00 0.41 0.00 8 0.00 0.00 getstrvalue
0.00 0.41 0.00 8 0.00 0.00 ztrncpy
0.00 0.41 0.00 7 0.00 0.00 mkarray
0.00 0.41 0.00 7 0.00 0.02 par_cmd
0.00 0.41 0.00 7 0.00 0.00 par_pline
0.00 0.41 0.00 7 0.00 0.00 par_sublist
0.00 0.41 0.00 7 0.00 0.00 par_sublist2
0.00 0.41 0.00 6 0.00 0.00 findenv
0.00 0.41 0.00 6 0.00 0.00 singsub
0.00 0.41 0.00 6 0.00 0.00 taddchr
0.00 0.41 0.00 6 0.00 0.00 zclose
0.00 0.41 0.00 5 0.00 0.00 dquote_parse
0.00 0.41 0.00 5 0.00 0.00 intsetfn
0.00 0.41 0.00 5 0.00 0.01 par_simple
0.00 0.41 0.00 5 0.00 0.00 set_list_code
0.00 0.41 0.00 5 0.00 0.00 set_sublist_code
0.00 0.41 0.00 5 0.00 0.00 setiparam
0.00 0.41 0.00 5 0.00 0.00 setnumvalue
0.00 0.41 0.00 5 0.00 0.00 taddstr
0.00 0.41 0.00 5 0.00 0.00 unmeta
0.00 0.41 0.00 4 0.00 0.00 add_autocond
0.00 0.41 0.00 4 0.00 0.00 addconddef
0.00 0.41 0.00 4 0.00 0.00 ecadjusthere
0.00 0.41 0.00 4 0.00 0.00 getconddef
0.00 0.41 0.00 4 0.00 0.00 hasprocs
0.00 0.41 0.00 4 0.00 0.00 movefd
0.00 0.41 0.00 4 0.00 0.01 newlinklist
0.00 0.41 0.00 4 0.00 0.00 par_list
0.00 0.41 0.00 4 0.00 0.00 strcatsub
0.00 0.41 0.00 3 0.00 0.00 addenv
0.00 0.41 0.00 3 0.00 0.00 addhookdef
0.00 0.41 0.00 3 0.00 0.01 bld_eprog
0.00 0.41 0.00 3 0.00 0.01 colonarrgetfn
0.00 0.41 0.00 3 0.00 0.00 copy_ecstr
0.00 0.41 0.00 3 0.00 0.00 countlinknodes
0.00 0.41 0.00 3 0.00 0.00 dosetopt
0.00 0.41 0.00 3 0.00 0.00 ecispace
0.00 0.41 0.00 3 0.00 75.57 execlist
0.00 0.41 0.00 3 0.00 0.00 freeeprog
0.00 0.41 0.00 3 0.00 0.00 gethookdef
0.00 0.41 0.00 3 0.00 0.00 inittyptab
0.00 0.41 0.00 3 0.00 0.00 inpop
0.00 0.41 0.00 3 0.00 0.00 inpoptop
0.00 0.41 0.00 3 0.00 0.00 inpush
0.00 0.41 0.00 3 0.00 0.00 install_handler
0.00 0.41 0.00 3 0.00 0.00 lexrestore
0.00 0.41 0.00 3 0.00 0.00 lexsave
0.00 0.41 0.00 3 0.00 11.74 paramsubst
0.00 0.41 0.00 3 0.00 0.00 popheap
0.00 0.41 0.00 3 0.00 0.00 pushheap
0.00 0.41 0.00 3 0.00 0.00 strgetfn
0.00 0.41 0.00 3 0.00 0.00 strinbeg
0.00 0.41 0.00 3 0.00 0.00 strinend
0.00 0.41 0.00 3 0.00 0.00 useeprog
0.00 0.41 0.00 3 0.00 0.00 zgetenv
0.00 0.41 0.00 3 0.00 0.01 zjoin
0.00 0.41 0.00 3 0.00 0.00 zputenv
0.00 0.41 0.00 2 0.00 0.00 checkunary
0.00 0.41 0.00 2 0.00 0.00 createaliasnode
0.00 0.41 0.00 2 0.00 0.00 createaliastable
0.00 0.41 0.00 2 0.00 0.00 deletefilelist
0.00 0.41 0.00 2 0.00 0.00 deletejob
0.00 0.41 0.00 2 0.00 0.03 ecgetredirs
0.00 0.41 0.00 2 0.00 0.00 ecrawstr
0.00 0.41 0.00 2 0.00 91.45 execcmd
0.00 0.41 0.00 2 0.00 204.82 execode
0.00 0.41 0.00 2 0.00 0.00 execpline
0.00 0.41 0.00 2 0.00 0.02 execpline2
0.00 0.41 0.00 2 0.00 0.00 export_param
0.00 0.41 0.00 2 0.00 0.00 finddir
0.00 0.41 0.00 2 0.00 0.00 fixfds
0.00 0.41 0.00 2 0.00 0.00 freejob
0.00 0.41 0.00 2 0.00 5.00 globlist
0.00 0.41 0.00 2 0.00 0.00 initjob
0.00 0.41 0.00 2 0.00 0.00 initnewjob
0.00 0.41 0.00 2 0.00 0.00 ispwd
0.00 0.41 0.00 2 0.00 0.02 par_cond_1
0.00 0.41 0.00 2 0.00 0.02 par_cond_2
0.00 0.41 0.00 2 0.00 0.01 par_redir
0.00 0.41 0.00 2 0.00 0.06 parse_list
0.00 0.41 0.00 2 0.00 0.06 parse_string
0.00 0.41 0.00 2 0.00 0.00 patadd
0.00 0.41 0.00 2 0.00 0.04 patcompile
0.00 0.41 0.00 2 0.00 0.00 redup
0.00 0.41 0.00 2 0.00 0.00 setunderscore
0.00 0.41 0.00 2 0.00 0.00 skipparens
0.00 0.41 0.00 2 0.00 0.00 waitjobs
0.00 0.41 0.00 2 0.00 0.00 zzlex
0.00 0.41 0.00 1 0.00 0.00 addbuiltins
0.00 0.41 0.00 1 0.00 0.01 addfd
0.00 0.41 0.00 1 0.00 0.00 addhookdefs
0.00 0.41 0.00 1 0.00 0.00 adjustcolumns
0.00 0.41 0.00 1 0.00 0.00 adjustlines
0.00 0.41 0.00 1 0.00 0.00 adjustwinsize
0.00 0.41 0.00 1 0.00 0.00 arrfixenv
0.00 0.41 0.00 1 0.00 0.00 arrlen
0.00 0.41 0.00 1 0.00 0.00 arrsetfn
0.00 0.41 0.00 1 0.00 0.00 assignaparam
0.00 0.41 0.00 1 0.00 21.74 bin_print
0.00 0.41 0.00 1 0.00 0.00 boot_module
0.00 0.41 0.00 1 0.00 0.00 boot_zshQsmain
0.00 0.41 0.00 1 0.00 0.00 clobber_open
0.00 0.41 0.00 1 0.00 0.00 closem
0.00 0.41 0.00 1 0.00 0.00 cmd_or_math_sub
0.00 0.41 0.00 1 0.00 0.00 colonarrsetfn
0.00 0.41 0.00 1 0.00 0.00 colonsplit
0.00 0.41 0.00 1 0.00 0.04 compgetmatch
0.00 0.41 0.00 1 0.00 0.00 convbase
0.00 0.41 0.00 1 0.00 0.00 createaliastables
0.00 0.41 0.00 1 0.00 0.00 createbuiltintable
0.00 0.41 0.00 1 0.00 0.00 createcmdnamtable
0.00 0.41 0.00 1 0.00 0.00 createhisttable
0.00 0.41 0.00 1 0.00 0.00 createnameddirtable
0.00 0.41 0.00 1 0.00 0.00 createoptiontable
0.00 0.41 0.00 1 0.00 0.19 createparamtable
0.00 0.41 0.00 1 0.00 0.00 createreswdtable
0.00 0.41 0.00 1 0.00 0.00 createshfunctable
0.00 0.41 0.00 1 0.00 0.01 dyncat
0.00 0.41 0.00 1 0.00 0.00 ecdel
0.00 0.41 0.00 1 0.00 0.03 ecgetlist
0.00 0.41 0.00 1 0.00 0.00 emptycmdnamtable
0.00 0.41 0.00 1 0.00 0.00 emptyhashtable
0.00 0.41 0.00 1 0.00 0.00 emulate
0.00 0.41 0.00 1 0.00 226.71 evalcond
0.00 0.41 0.00 1 0.00 21.74 execbuiltin
0.00 0.41 0.00 1 0.00 226.71 execcond
0.00 0.41 0.00 1 0.00 0.00 execif
0.00 0.41 0.00 1 0.00 226.71 execsimple
0.00 0.41 0.00 1 0.00 204.88 execstring
0.00 0.41 0.00 1 0.00 0.00 freearray
0.00 0.41 0.00 1 0.00 0.00 get_usage
0.00 0.41 0.00 1 0.00 0.00 getbaudrate
0.00 0.41 0.00 1 0.00 0.04 getjobtext
0.00 0.41 0.00 1 0.00 0.00 getlinknode
0.00 0.41 0.00 1 0.00 282.35 getmatch
0.00 0.41 0.00 1 0.00 30.17 getoutput
0.00 0.41 0.00 1 0.00 0.00 getredirs
0.00 0.41 0.00 1 0.00 0.04 gettext2
0.00 0.41 0.00 1 0.00 0.00 homegetfn
0.00 0.41 0.00 1 0.00 0.00 homesetfn
0.00 0.41 0.00 1 0.00 0.00 hrealloc
0.00 0.41 0.00 1 0.00 282.35 igetmatch
0.00 0.41 0.00 1 0.00 0.01 init_bltinmods
0.00 0.41 0.00 1 0.00 0.00 init_eprog
0.00 0.41 0.00 1 0.00 0.00 init_io
0.00 0.41 0.00 1 0.00 0.00 init_jobs
0.00 0.41 0.00 1 0.00 204.88 init_misc
0.00 0.41 0.00 1 0.00 0.00 init_signals
0.00 0.41 0.00 1 0.00 0.00 inithist
0.00 0.41 0.00 1 0.00 0.00 initlextabs
0.00 0.41 0.00 1 0.00 0.00 intvargetfn
0.00 0.41 0.00 1 0.00 0.00 intvarsetfn
0.00 0.41 0.00 1 0.00 0.00 isnumglob
0.00 0.41 0.00 1 0.00 0.00 langsetfn
0.00 0.41 0.00 1 0.00 0.00 lexconstant
0.00 0.41 0.00 1 0.00 0.00 load_module
0.00 0.41 0.00 1 0.00 204.92 loop
0.00 0.41 0.00 1 0.00 0.00 matheval
0.00 0.41 0.00 1 0.00 0.00 mathevali
0.00 0.41 0.00 1 0.00 0.00 mathevall
0.00 0.41 0.00 1 0.00 0.00 mathparse
0.00 0.41 0.00 1 0.00 0.00 modname_ok
0.00 0.41 0.00 1 0.00 0.00 module_linked
0.00 0.41 0.00 1 0.00 0.01 multsub
0.00 0.41 0.00 1 0.00 0.00 newparamtable
0.00 0.41 0.00 1 0.00 0.01 newsizedlist
0.00 0.41 0.00 1 0.00 0.00 optlookupc
0.00 0.41 0.00 1 0.00 0.04 par_cond
0.00 0.41 0.00 1 0.00 0.01 par_cond_double
0.00 0.41 0.00 1 0.00 0.01 par_cond_triple
0.00 0.41 0.00 1 0.00 0.04 par_dinbrack
0.00 0.41 0.00 1 0.00 0.01 par_if
0.00 0.41 0.00 1 0.00 0.01 parse_subst_string
0.00 0.41 0.00 1 0.00 0.00 parseargs
0.00 0.41 0.00 1 0.00 0.00 pattry
0.00 0.41 0.00 1 0.00 0.00 push
0.00 0.41 0.00 1 0.00 0.00 register_module
0.00 0.41 0.00 1 0.00 0.00 resizehashtable
0.00 0.41 0.00 1 0.00 204.93 run_init_scripts
0.00 0.41 0.00 1 0.00 0.00 runhookdef
0.00 0.41 0.00 1 0.00 0.00 scanhashtable
0.00 0.41 0.00 1 0.00 0.01 sepjoin
0.00 0.41 0.00 1 0.00 31.74 sepsplit
0.00 0.41 0.00 1 0.00 0.00 set_pwd_env
0.00 0.41 0.00 1 0.00 0.00 setarrvalue
0.00 0.41 0.00 1 0.00 0.01 setlang
0.00 0.41 0.00 1 0.00 0.00 setup_module
0.00 0.41 0.00 1 0.00 0.00 setup_zshQsmain
0.00 0.41 0.00 1 0.00 0.19 setupvals
0.00 0.41 0.00 1 0.00 0.00 signal_mask
0.00 0.41 0.00 1 0.00 0.00 skipcomm
0.00 0.41 0.00 1 0.00 204.93 source
0.00 0.41 0.00 1 0.00 0.00 spawnpipes
0.00 0.41 0.00 1 0.00 0.00 strsfx
0.00 0.41 0.00 1 0.00 0.00 taddlist
0.00 0.41 0.00 1 0.00 0.00 termgetfn
0.00 0.41 0.00 1 0.00 0.00 termsetfn
0.00 0.41 0.00 1 0.00 0.00 tpush
0.00 0.41 0.00 1 0.00 0.01 try_source_file
0.00 0.41 0.00 1 0.00 0.01 underscoregetfn
0.00 0.41 0.00 1 0.00 15.00 wordcount
0.00 0.41 0.00 1 0.00 80.54 xpandredir
0.00 0.41 0.00 1 0.00 0.00 zerr
0.00 0.41 0.00 1 0.00 0.00 zexit
0.00 0.41 0.00 1 0.00 0.00 zopenmax
0.00 0.41 0.00 1 0.00 410.00 zsh_main
0.00 0.41 0.00 1 0.00 0.00 zstrtol
0.00 0.41 0.00 1 0.00 0.00 ztrlen
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
\f
Call graph (explanation follows)
granularity: each sample hit covers 2 byte(s) for 2.44% of 0.41 seconds
index % time self children called name
0.00 0.41 1/1 main [2]
[1] 100.0 0.00 0.41 1 zsh_main [1]
0.00 0.20 1/1 run_init_scripts [15]
0.00 0.20 1/1 init_misc [19]
0.00 0.00 1/1 setupvals [43]
0.00 0.00 1/1 init_bltinmods [93]
0.00 0.00 3/27 metafy [130]
0.00 0.00 1/1 init_jobs [259]
0.00 0.00 1/1 zopenmax [295]
0.00 0.00 1/117 zshcalloc [118]
0.00 0.00 1/1 createoptiontable [241]
0.00 0.00 1/1 emulate [247]
0.00 0.00 1/1 parseargs [277]
0.00 0.00 1/1 init_io [258]
0.00 0.00 1/1 init_signals [260]
-----------------------------------------------
<spontaneous>
[2] 100.0 0.00 0.41 main [2]
0.00 0.41 1/1 zsh_main [1]
-----------------------------------------------
[3] 99.9 0.00 0.41 2+8 <cycle 1 as a whole> [3]
0.00 0.23 3 execlist <cycle 1> [11]
0.00 0.18 2 execcmd <cycle 1> [20]
0.00 0.00 2 execpline2 <cycle 1> [62]
0.00 0.00 2 execpline <cycle 1> [205]
-----------------------------------------------
0.00 0.20 1/2 execstring [18]
0.00 0.20 1/2 loop [17]
[4] 99.9 0.00 0.41 2 execode [4]
0.00 0.41 2/2 execlist <cycle 1> [11]
0.00 0.00 2/3 useeprog [196]
0.00 0.00 2/3 freeeprog [182]
-----------------------------------------------
[5] 92.1 0.00 0.38 5+28 <cycle 3 as a whole> [5]
0.00 0.28 1 getmatch <cycle 3> [6]
0.00 0.04 3 paramsubst <cycle 3> [22]
0.00 0.03 9 prefork <cycle 3> [27]
0.00 0.00 1 compgetmatch <cycle 3> [58]
0.00 0.00 1 multsub <cycle 3> [76]
0.00 0.00 11 stringsubst <cycle 3> [84]
0.00 0.00 6 singsub <cycle 3> [161]
-----------------------------------------------
1 paramsubst <cycle 3> [22]
[6] 68.9 0.00 0.28 1 getmatch <cycle 3> [6]
0.00 0.28 1/1 igetmatch [7]
1 compgetmatch <cycle 3> [58]
-----------------------------------------------
0.00 0.28 1/1 getmatch <cycle 3> [6]
[7] 68.9 0.00 0.28 1 igetmatch [7]
0.00 0.28 57092/57092 pattrylen [10]
0.00 0.00 156/156 get_match_ret [39]
0.00 0.00 1/1334 zhalloc [37]
0.00 0.00 1/4 newlinklist [68]
0.00 0.00 57093/57093 set_pat_start [99]
0.00 0.00 156/156 patmatchlen [114]
0.00 0.00 1/1 ztrlen [297]
-----------------------------------------------
0.00 0.00 1/57093 pattry [94]
0.00 0.28 57092/57093 pattrylen [10]
[8] 68.3 0.00 0.28 57093 pattryrefs [8]
0.28 0.00 57093/57093 ztrsub [9]
-----------------------------------------------
0.28 0.00 57093/57093 pattryrefs [8]
[9] 68.3 0.28 0.00 57093 ztrsub [9]
-----------------------------------------------
0.00 0.28 57092/57092 igetmatch [7]
[10] 68.3 0.00 0.28 57092 pattrylen [10]
0.00 0.28 57092/57093 pattryrefs [8]
-----------------------------------------------
1 execif <cycle 1> [248]
0.00 0.41 2/2 execode [4]
[11] 55.3 0.00 0.23 3 execlist <cycle 1> [11]
0.00 0.23 1/1 execsimple [14]
2 execpline <cycle 1> [205]
-----------------------------------------------
1 evalcond [12]
0.00 0.23 1/1 execcond [13]
[12] 55.3 0.00 0.23 1+1 evalcond [12]
0.00 0.23 3/5 singsub <cycle 3> [161]
0.00 0.00 1/2 patcompile [52]
0.00 0.00 3/242 dupstring [41]
0.00 0.00 1/1 pattry [94]
0.00 0.00 2/10 ecgetstr [74]
0.00 0.00 2/242 untokenize [109]
0.00 0.00 1/2 ecrawstr [204]
1 evalcond [12]
-----------------------------------------------
0.00 0.23 1/1 execsimple [14]
[13] 55.3 0.00 0.23 1 execcond [13]
0.00 0.23 1/1 evalcond [12]
-----------------------------------------------
0.00 0.23 1/1 execlist <cycle 1> [11]
[14] 55.3 0.00 0.23 1 execsimple [14]
0.00 0.23 1/1 execcond [13]
-----------------------------------------------
0.00 0.20 1/1 zsh_main [1]
[15] 50.0 0.00 0.20 1 run_init_scripts [15]
0.00 0.20 1/1 source [16]
-----------------------------------------------
0.00 0.20 1/1 run_init_scripts [15]
[16] 50.0 0.00 0.20 1 source [16]
0.00 0.20 1/1 loop [17]
0.00 0.00 1/1 try_source_file [89]
0.00 0.00 2/3 dosetopt [180]
0.00 0.00 1/5 unmeta [169]
0.00 0.00 1/477 zalloc [103]
0.00 0.00 1/3 popheap [191]
0.00 0.00 1/4 movefd [175]
-----------------------------------------------
0.00 0.20 1/1 source [16]
[17] 50.0 0.00 0.20 1 loop [17]
0.00 0.20 1/2 execode [4]
0.00 0.00 16/16 parse_event [53]
0.00 0.00 1/3 bld_eprog [57]
0.00 0.00 16/16 freeheap [147]
0.00 0.00 16/19 hbegin [136]
0.00 0.00 16/19 lexinit [139]
0.00 0.00 16/17 intr [145]
0.00 0.00 16/19 hend [137]
0.00 0.00 1/3 pushheap [192]
-----------------------------------------------
0.00 0.20 1/1 init_misc [19]
[18] 50.0 0.00 0.20 1 execstring [18]
0.00 0.20 1/2 execode [4]
0.00 0.00 1/2 parse_string [48]
0.00 0.00 1/3 pushheap [192]
-----------------------------------------------
0.00 0.20 1/1 zsh_main [1]
[19] 50.0 0.00 0.20 1 init_misc [19]
0.00 0.20 1/1 execstring [18]
0.00 0.00 1/4 movefd [175]
0.00 0.00 1/3 popheap [191]
0.00 0.00 1/1 zexit [294]
-----------------------------------------------
2 execpline2 <cycle 1> [62]
[20] 44.6 0.00 0.18 2 execcmd <cycle 1> [20]
0.00 0.08 1/1 xpandredir [21]
0.00 0.08 1/5 prefork <cycle 3> [27]
0.00 0.02 1/1 execbuiltin [29]
0.00 0.01 1/2 globlist [36]
0.00 0.00 1/2 ecgetredirs [54]
0.00 0.00 1/1 ecgetlist [70]
0.00 0.00 1/1 addfd [85]
0.00 0.00 2/2 setunderscore [215]
0.00 0.00 2/2 fixfds [208]
0.00 0.00 2/74 zsfree [121]
0.00 0.00 2/25 gethashnode [132]
0.00 0.00 1/1 spawnpipes [288]
0.00 0.00 1/1 closem [231]
0.00 0.00 1/243 ugetnode [108]
0.00 0.00 1/1 clobber_open [230]
0.00 0.00 1/28 has_token [129]
1 execif <cycle 1> [248]
-----------------------------------------------
0.00 0.08 1/1 execcmd <cycle 1> [20]
[21] 19.6 0.00 0.08 1 xpandredir [21]
0.00 0.08 1/5 prefork <cycle 3> [27]
0.00 0.01 1/2 globlist [36]
0.00 0.00 1/242 untokenize [109]
-----------------------------------------------
3 stringsubst <cycle 3> [84]
[22] 8.6 0.00 0.04 3 paramsubst <cycle 3> [22]
0.00 0.03 1/1 sepsplit [23]
0.00 0.00 230/389 insertlinknode [38]
0.00 0.00 229/242 dupstring [41]
0.00 0.00 4/4 strcatsub [75]
0.00 0.00 1/1 parse_subst_string [77]
0.00 0.00 2/8 getstrvalue [61]
0.00 0.00 2/145 fetchvalue [116]
0.00 0.00 1/2 skipparens [216]
1 singsub <cycle 3> [161]
1 getmatch <cycle 3> [6]
1 multsub <cycle 3> [76]
-----------------------------------------------
0.00 0.03 1/1 paramsubst <cycle 3> [22]
[23] 7.7 0.00 0.03 1 sepsplit [23]
0.02 0.00 231/462 findsep [26]
0.00 0.02 1/1 wordcount [32]
0.00 0.00 232/269 hcalloc [40]
-----------------------------------------------
1 stringsubst <cycle 3> [84]
[24] 7.4 0.00 0.03 1 getoutput <cycle 3> [24]
0.03 0.00 1/1 readoutput [25]
0.00 0.00 1/2 parse_string [48]
0.00 0.00 1/242 dupstring [41]
0.00 0.00 1/2 ecrawstr [204]
0.00 0.00 1/242 untokenize [109]
0.00 0.00 1/5 unmeta [169]
1 singsub <cycle 3> [161]
-----------------------------------------------
0.03 0.00 1/1 getoutput <cycle 3> [24]
[25] 7.3 0.03 0.00 1 readoutput [25]
0.00 0.00 11/269 hcalloc [40]
0.00 0.00 1/4 newlinklist [68]
0.00 0.00 1/389 insertlinknode [38]
-----------------------------------------------
0.02 0.00 231/462 wordcount [32]
0.02 0.00 231/462 sepsplit [23]
[26] 7.3 0.03 0.00 462 findsep [26]
-----------------------------------------------
1 multsub <cycle 3> [76]
6 singsub <cycle 3> [161]
0.00 0.08 1/5 execcmd <cycle 1> [20]
0.00 0.08 1/5 xpandredir [21]
[27] 7.3 0.00 0.03 9 prefork <cycle 3> [27]
0.02 0.00 235/235 hasbraces [31]
0.01 0.00 241/243 remnulargs [33]
0.00 0.00 241/241 filesub [110]
11 stringsubst <cycle 3> [84]
-----------------------------------------------
0.00 0.02 1/1 execbuiltin [29]
[28] 5.3 0.00 0.02 1 bin_print [28]
0.02 0.00 231/231 getkeystring [30]
0.00 0.00 1/269 hcalloc [40]
0.00 0.00 1/1 arrlen [225]
-----------------------------------------------
0.00 0.02 1/1 execcmd <cycle 1> [20]
[29] 5.3 0.00 0.02 1 execbuiltin [29]
0.00 0.02 1/1 bin_print [28]
0.00 0.00 234/243 ugetnode [108]
0.00 0.00 1/3 countlinknodes [179]
-----------------------------------------------
0.02 0.00 231/231 bin_print [28]
[30] 5.3 0.02 0.00 231 getkeystring [30]
0.00 0.00 231/1334 zhalloc [37]
-----------------------------------------------
0.02 0.00 235/235 prefork <cycle 3> [27]
[31] 4.9 0.02 0.00 235 hasbraces [31]
-----------------------------------------------
0.00 0.02 1/1 sepsplit [23]
[32] 3.7 0.00 0.02 1 wordcount [32]
0.02 0.00 231/462 findsep [26]
-----------------------------------------------
0.00 0.00 2/243 patcompile [52]
0.01 0.00 241/243 prefork <cycle 3> [27]
[33] 2.4 0.01 0.00 243 remnulargs [33]
-----------------------------------------------
0.01 0.00 234/234 zglob [35]
[34] 2.4 0.01 0.00 234 haswilds [34]
-----------------------------------------------
0.00 0.01 234/234 globlist [36]
[35] 2.4 0.00 0.01 234 zglob [35]
0.01 0.00 234/234 haswilds [34]
0.00 0.00 234/242 untokenize [109]
-----------------------------------------------
0.00 0.01 1/2 execcmd <cycle 1> [20]
0.00 0.01 1/2 xpandredir [21]
[36] 2.4 0.00 0.01 2 globlist [36]
0.00 0.01 234/234 zglob [35]
-----------------------------------------------
0.00 0.00 1/1334 igetmatch [7]
0.00 0.00 1/1334 addfd [85]
0.00 0.00 1/1334 newsizedlist [87]
0.00 0.00 1/1334 patcompile [52]
0.00 0.00 1/1334 dyncat [86]
0.00 0.00 2/1334 ecgetredirs [54]
0.00 0.00 4/1334 newlinklist [68]
0.00 0.00 6/1334 bld_eprog [57]
0.00 0.00 8/1334 ecstrcode [55]
0.00 0.00 22/1334 split_env_string [44]
0.00 0.00 156/1334 get_match_ret [39]
0.00 0.00 231/1334 getkeystring [30]
0.00 0.00 242/1334 dupstring [41]
0.00 0.00 269/1334 hcalloc [40]
0.00 0.00 389/1334 insertlinknode [38]
[37] 2.4 0.01 0.00 1334 zhalloc [37]
0.00 0.00 19/19 mmap_heap_alloc [140]
-----------------------------------------------
0.00 0.00 1/389 readoutput [25]
0.00 0.00 2/389 ecgetredirs [54]
0.00 0.00 156/389 get_match_ret [39]
0.00 0.00 230/389 paramsubst <cycle 3> [22]
[38] 0.7 0.00 0.00 389 insertlinknode [38]
0.00 0.00 389/1334 zhalloc [37]
-----------------------------------------------
0.00 0.00 156/156 igetmatch [7]
[39] 0.6 0.00 0.00 156 get_match_ret [39]
0.00 0.00 156/1334 zhalloc [37]
0.00 0.00 156/389 insertlinknode [38]
-----------------------------------------------
0.00 0.00 1/269 stringsubst <cycle 3> [84]
0.00 0.00 1/269 multsub <cycle 3> [76]
0.00 0.00 1/269 sepjoin [88]
0.00 0.00 1/269 bin_print [28]
0.00 0.00 2/269 strcatsub [75]
0.00 0.00 3/269 zjoin [73]
0.00 0.00 11/269 readoutput [25]
0.00 0.00 17/269 gettokstr [46]
0.00 0.00 232/269 sepsplit [23]
[40] 0.5 0.00 0.00 269 hcalloc [40]
0.00 0.00 269/1334 zhalloc [37]
-----------------------------------------------
0.00 0.00 1/242 getoutput <cycle 3> [24]
0.00 0.00 1/242 parse_subst_string [77]
0.00 0.00 1/242 getstrvalue [61]
0.00 0.00 1/242 underscoregetfn [90]
0.00 0.00 2/242 ecgetstr [74]
0.00 0.00 2/242 ecgetlist [70]
0.00 0.00 2/242 ecgetredirs [54]
0.00 0.00 3/242 evalcond [12]
0.00 0.00 229/242 paramsubst <cycle 3> [22]
[41] 0.4 0.00 0.00 242 dupstring [41]
0.00 0.00 242/1334 zhalloc [37]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[42] 0.0 0.00 0.00 1 createparamtable [42]
0.00 0.00 22/22 split_env_string [44]
0.00 0.00 6/11 getsparam [69]
0.00 0.00 35/64 assignsparam [81]
0.00 0.00 5/5 setiparam [96]
0.00 0.00 1/1 set_pwd_env [98]
0.00 0.00 145/338 ztrdup [107]
0.00 0.00 81/425 addhashnode [104]
0.00 0.00 25/175 getparamnode [112]
0.00 0.00 22/92 isident [120]
0.00 0.00 22/27 metafy [130]
0.00 0.00 6/9 mkenvstr [154]
0.00 0.00 2/477 zalloc [103]
0.00 0.00 1/1 newparamtable [275]
0.00 0.00 1/1 getbaudrate [251]
0.00 0.00 1/60 zfree [124]
0.00 0.00 1/3 pushheap [192]
0.00 0.00 1/3 popheap [191]
0.00 0.00 1/3 addenv [176]
0.00 0.00 1/1 assignaparam [227]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[43] 0.0 0.00 0.00 1 setupvals [43]
0.00 0.00 1/1 createparamtable [42]
0.00 0.00 21/338 ztrdup [107]
0.00 0.00 19/19 tricat [142]
0.00 0.00 7/7 mkarray [156]
0.00 0.00 5/15 znewlinklist [149]
0.00 0.00 4/477 zalloc [103]
0.00 0.00 2/27 metafy [130]
0.00 0.00 2/2 ispwd [212]
0.00 0.00 1/1 init_eprog [257]
0.00 0.00 1/1 addhookdefs [220]
0.00 0.00 1/1 createhisttable [239]
0.00 0.00 1/1 inithist [261]
0.00 0.00 1/3 inittyptab [184]
0.00 0.00 1/1 createreswdtable [242]
0.00 0.00 1/1 initlextabs [262]
0.00 0.00 1/1 createaliastables [236]
0.00 0.00 1/1 createshfunctable [243]
0.00 0.00 1/1 createcmdnamtable [238]
0.00 0.00 1/1 createbuiltintable [237]
0.00 0.00 1/1 createnameddirtable [240]
0.00 0.00 1/1 adjustwinsize [223]
0.00 0.00 1/1 get_usage [250]
0.00 0.00 1/3 zgetenv [197]
-----------------------------------------------
0.00 0.00 22/22 createparamtable [42]
[44] 0.0 0.00 0.00 22 split_env_string [44]
0.00 0.00 22/1334 zhalloc [37]
-----------------------------------------------
[45] 0.0 0.00 0.00 3+30 <cycle 2 as a whole> [45]
0.00 0.00 7 par_cmd <cycle 2> [51]
0.00 0.00 4 par_list <cycle 2> [82]
0.00 0.00 7 par_sublist <cycle 2> [158]
0.00 0.00 7 par_sublist2 <cycle 2> [159]
0.00 0.00 7 par_pline <cycle 2> [157]
-----------------------------------------------
0.00 0.00 1/18 parse_subst_string [77]
0.00 0.00 17/18 gettok [49]
[46] 0.0 0.00 0.00 18 gettokstr [46]
0.00 0.00 17/269 hcalloc [40]
0.00 0.00 77/168 add [113]
0.00 0.00 73/723 ingetc [102]
0.00 0.00 19/25 inungetc [133]
0.00 0.00 5/5 dquote_parse [164]
-----------------------------------------------
0.00 0.00 2/2 parse_string [48]
[47] 0.0 0.00 0.00 2 parse_list [47]
0.00 0.00 2/3 par_list <cycle 2> [82]
0.00 0.00 2/3 bld_eprog [57]
0.00 0.00 2/41 yylex [50]
0.00 0.00 2/18 init_parse [144]
-----------------------------------------------
0.00 0.00 1/2 getoutput <cycle 3> [24]
0.00 0.00 1/2 execstring [18]
[48] 0.0 0.00 0.00 2 parse_string [48]
0.00 0.00 2/2 parse_list [47]
0.00 0.00 2/3 lexsave [190]
0.00 0.00 2/21 inputsetline [135]
0.00 0.00 2/3 inpush [187]
0.00 0.00 2/19 lexinit [139]
0.00 0.00 2/3 strinbeg [194]
0.00 0.00 2/3 inpop [185]
0.00 0.00 2/3 strinend [195]
0.00 0.00 2/3 lexrestore [189]
-----------------------------------------------
0.00 0.00 41/41 yylex [50]
[49] 0.0 0.00 0.00 41 gettok [49]
0.00 0.00 17/18 gettokstr [46]
0.00 0.00 1035/1035 nohw [100]
0.00 0.00 549/723 ingetc [102]
0.00 0.00 13/51 nohwe [126]
0.00 0.00 2/25 inungetc [133]
0.00 0.00 1/1 isnumglob [265]
-----------------------------------------------
0.00 0.00 1/41 par_cmd <cycle 2> [51]
0.00 0.00 1/41 par_dinbrack [60]
0.00 0.00 1/41 par_cond [65]
0.00 0.00 2/41 parse_list [47]
0.00 0.00 3/41 par_list <cycle 2> [82]
0.00 0.00 3/41 par_if <cycle 2> [83]
0.00 0.00 4/41 par_redir [71]
0.00 0.00 5/41 par_simple [56]
0.00 0.00 5/41 par_cond_2 [67]
0.00 0.00 16/41 parse_event [53]
[50] 0.0 0.00 0.00 41 yylex [50]
0.00 0.00 41/41 gettok [49]
0.00 0.00 38/38 exalias [128]
-----------------------------------------------
7 par_pline <cycle 2> [157]
[51] 0.0 0.00 0.00 7 par_cmd <cycle 2> [51]
0.00 0.00 5/5 par_simple [56]
0.00 0.00 1/1 par_dinbrack [60]
0.00 0.00 1/2 par_redir [71]
0.00 0.00 1/41 yylex [50]
1 par_if <cycle 2> [83]
-----------------------------------------------
0.00 0.00 1/2 compgetmatch <cycle 3> [58]
0.00 0.00 1/2 evalcond [12]
[52] 0.0 0.00 0.00 2 patcompile [52]
0.00 0.00 2/243 remnulargs [33]
0.00 0.00 1/1334 zhalloc [37]
0.00 0.00 2/2 patadd [213]
0.00 0.00 1/19 zrealloc [143]
-----------------------------------------------
0.00 0.00 16/16 loop [17]
[53] 0.0 0.00 0.00 16 parse_event [53]
0.00 0.00 16/41 yylex [50]
0.00 0.00 16/16 par_event [59]
0.00 0.00 16/18 init_parse [144]
0.00 0.00 15/15 clear_hdocs [148]
-----------------------------------------------
0.00 0.00 1/2 execcmd <cycle 1> [20]
0.00 0.00 1/2 gettext2 [64]
[54] 0.0 0.00 0.00 2 ecgetredirs [54]
0.00 0.00 2/4 newlinklist [68]
0.00 0.00 2/1334 zhalloc [37]
0.00 0.00 2/242 dupstring [41]
0.00 0.00 2/389 insertlinknode [38]
0.00 0.00 2/10 ecgetstr [74]
-----------------------------------------------
0.00 0.00 1/10 par_cond_double [91]
0.00 0.00 2/10 par_redir [71]
0.00 0.00 2/10 par_cond_triple [80]
0.00 0.00 5/10 par_simple [56]
[55] 0.0 0.00 0.00 10 ecstrcode [55]
0.00 0.00 8/1334 zhalloc [37]
0.00 0.00 10/28 has_token [129]
-----------------------------------------------
0.00 0.00 5/5 par_cmd <cycle 2> [51]
[56] 0.0 0.00 0.00 5 par_simple [56]
0.00 0.00 5/10 ecstrcode [55]
0.00 0.00 5/41 yylex [50]
0.00 0.00 1/2 par_redir [71]
0.00 0.00 10/42 ecadd [127]
-----------------------------------------------
0.00 0.00 1/3 loop [17]
0.00 0.00 2/3 parse_list [47]
[57] 0.0 0.00 0.00 3 bld_eprog [57]
0.00 0.00 6/1334 zhalloc [37]
0.00 0.00 3/42 ecadd [127]
0.00 0.00 3/3 copy_ecstr [178]
0.00 0.00 3/60 zfree [124]
-----------------------------------------------
1 getmatch <cycle 3> [6]
[58] 0.0 0.00 0.00 1 compgetmatch <cycle 3> [58]
0.00 0.00 1/2 patcompile [52]
0.00 0.00 1/242 untokenize [109]
1 singsub <cycle 3> [161]
-----------------------------------------------
1 par_event [59]
0.00 0.00 16/16 parse_event [53]
[59] 0.0 0.00 0.00 16+1 par_event [59]
0.00 0.00 1/3 par_sublist <cycle 2> [158]
0.00 0.00 1/42 ecadd [127]
0.00 0.00 1/5 set_list_code [166]
1 par_event [59]
-----------------------------------------------
0.00 0.00 1/1 par_cmd <cycle 2> [51]
[60] 0.0 0.00 0.00 1 par_dinbrack [60]
0.00 0.00 1/1 par_cond [65]
0.00 0.00 1/41 yylex [50]
-----------------------------------------------
0.00 0.00 2/8 paramsubst <cycle 3> [22]
0.00 0.00 6/8 getsparam [69]
[61] 0.0 0.00 0.00 8 getstrvalue [61]
0.00 0.00 3/3 colonarrgetfn [72]
0.00 0.00 1/1 underscoregetfn [90]
0.00 0.00 1/242 dupstring [41]
0.00 0.00 1/3 strgetfn [193]
0.00 0.00 1/1 termgetfn [290]
0.00 0.00 1/1 homegetfn [254]
0.00 0.00 1/1 intvargetfn [263]
0.00 0.00 1/1 convbase [235]
-----------------------------------------------
2 execpline <cycle 1> [205]
[62] 0.0 0.00 0.00 2 execpline2 <cycle 1> [62]
0.00 0.00 1/1 getjobtext [63]
2 execcmd <cycle 1> [20]
-----------------------------------------------
0.00 0.00 1/1 execpline2 <cycle 1> [62]
[63] 0.0 0.00 0.00 1 getjobtext [63]
0.00 0.00 1/1 gettext2 [64]
0.00 0.00 1/3 useeprog [196]
0.00 0.00 1/3 freeeprog [182]
0.00 0.00 1/242 untokenize [109]
-----------------------------------------------
0.00 0.00 1/1 getjobtext [63]
[64] 0.0 0.00 0.00 1 gettext2 [64]
0.00 0.00 1/2 ecgetredirs [54]
0.00 0.00 1/1 taddlist [95]
0.00 0.00 1/1 getredirs [253]
0.00 0.00 1/1 tpush [292]
-----------------------------------------------
1 par_cond [65]
0.00 0.00 1/1 par_dinbrack [60]
[65] 0.0 0.00 0.00 1+1 par_cond [65]
0.00 0.00 2/2 par_cond_1 [66]
0.00 0.00 1/41 yylex [50]
0.00 0.00 1/4 ecadjusthere [172]
0.00 0.00 1/3 ecispace [181]
1 par_cond [65]
-----------------------------------------------
0.00 0.00 2/2 par_cond [65]
[66] 0.0 0.00 0.00 2 par_cond_1 [66]
0.00 0.00 2/2 par_cond_2 [67]
-----------------------------------------------
0.00 0.00 2/2 par_cond_1 [66]
[67] 0.0 0.00 0.00 2 par_cond_2 [67]
0.00 0.00 5/41 yylex [50]
0.00 0.00 1/1 par_cond_triple [80]
0.00 0.00 1/1 par_cond_double [91]
-----------------------------------------------
0.00 0.00 1/4 readoutput [25]
0.00 0.00 1/4 igetmatch [7]
0.00 0.00 2/4 ecgetredirs [54]
[68] 0.0 0.00 0.00 4 newlinklist [68]
0.00 0.00 4/1334 zhalloc [37]
-----------------------------------------------
0.00 0.00 5/11 setlang [79]
0.00 0.00 6/11 createparamtable [42]
[69] 0.0 0.00 0.00 11 getsparam [69]
0.00 0.00 6/8 getstrvalue [61]
0.00 0.00 11/141 getvalue [117]
-----------------------------------------------
0.00 0.00 1/1 execcmd <cycle 1> [20]
[70] 0.0 0.00 0.00 1 ecgetlist [70]
0.00 0.00 2/242 dupstring [41]
0.00 0.00 1/1 newsizedlist [87]
0.00 0.00 3/10 ecgetstr [74]
-----------------------------------------------
0.00 0.00 1/2 par_cmd <cycle 2> [51]
0.00 0.00 1/2 par_simple [56]
[71] 0.0 0.00 0.00 2 par_redir [71]
0.00 0.00 2/10 ecstrcode [55]
0.00 0.00 4/41 yylex [50]
0.00 0.00 2/4 ecadjusthere [172]
0.00 0.00 2/3 ecispace [181]
-----------------------------------------------
0.00 0.00 3/3 getstrvalue [61]
[72] 0.0 0.00 0.00 3 colonarrgetfn [72]
0.00 0.00 3/3 zjoin [73]
-----------------------------------------------
0.00 0.00 3/3 colonarrgetfn [72]
[73] 0.0 0.00 0.00 3 zjoin [73]
0.00 0.00 3/269 hcalloc [40]
0.00 0.00 24/25 strucpy [134]
-----------------------------------------------
0.00 0.00 2/10 evalcond [12]
0.00 0.00 2/10 ecgetredirs [54]
0.00 0.00 3/10 ecgetlist [70]
0.00 0.00 3/10 taddlist [95]
[74] 0.0 0.00 0.00 10 ecgetstr [74]
0.00 0.00 2/242 dupstring [41]
-----------------------------------------------
0.00 0.00 4/4 paramsubst <cycle 3> [22]
[75] 0.0 0.00 0.00 4 strcatsub [75]
0.00 0.00 2/269 hcalloc [40]
-----------------------------------------------
1 paramsubst <cycle 3> [22]
[76] 0.0 0.00 0.00 1 multsub <cycle 3> [76]
0.00 0.00 1/269 hcalloc [40]
0.00 0.00 1/1 sepjoin [88]
0.00 0.00 1/3 countlinknodes [179]
0.00 0.00 1/243 ugetnode [108]
1 prefork <cycle 3> [27]
-----------------------------------------------
0.00 0.00 1/1 paramsubst <cycle 3> [22]
[77] 0.0 0.00 0.00 1 parse_subst_string [77]
0.00 0.00 1/242 dupstring [41]
0.00 0.00 1/18 gettokstr [46]
0.00 0.00 1/3 lexsave [190]
0.00 0.00 1/242 untokenize [109]
0.00 0.00 1/21 inputsetline [135]
0.00 0.00 1/3 inpush [187]
0.00 0.00 1/19 lexinit [139]
0.00 0.00 1/3 strinbeg [194]
0.00 0.00 1/723 ingetc [102]
0.00 0.00 1/3 strinend [195]
0.00 0.00 1/3 inpop [185]
0.00 0.00 1/3 lexrestore [189]
-----------------------------------------------
0.00 0.00 5/69 setnumvalue [97]
0.00 0.00 64/69 assignsparam [81]
[78] 0.0 0.00 0.00 69 setstrvalue [78]
0.00 0.00 1/1 setlang [79]
0.00 0.00 58/59 strsetfn [125]
0.00 0.00 3/74 zsfree [121]
0.00 0.00 2/2 export_param [206]
0.00 0.00 1/1 langsetfn [266]
0.00 0.00 1/1 colonarrsetfn [233]
0.00 0.00 1/1 termsetfn [291]
0.00 0.00 1/2 finddir [207]
0.00 0.00 1/1 homesetfn [255]
0.00 0.00 1/1 mathevali [270]
0.00 0.00 1/1 intvarsetfn [264]
0.00 0.00 1/1 zerr [293]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[79] 0.0 0.00 0.00 1 setlang [79]
0.00 0.00 5/11 getsparam [69]
-----------------------------------------------
0.00 0.00 1/1 par_cond_2 [67]
[80] 0.0 0.00 0.00 1 par_cond_triple [80]
0.00 0.00 2/10 ecstrcode [55]
0.00 0.00 4/42 ecadd [127]
-----------------------------------------------
0.00 0.00 2/64 set_pwd_env [98]
0.00 0.00 27/64 add_autoparam [92]
0.00 0.00 35/64 createparamtable [42]
[81] 0.0 0.00 0.00 64 assignsparam [81]
0.00 0.00 64/69 setstrvalue [78]
0.00 0.00 120/141 getvalue [117]
0.00 0.00 64/92 isident [120]
0.00 0.00 56/62 createparam [122]
-----------------------------------------------
2 par_if <cycle 2> [83]
0.00 0.00 2/3 parse_list [47]
[82] 0.0 0.00 0.00 4 par_list <cycle 2> [82]
0.00 0.00 3/41 yylex [50]
0.00 0.00 6/42 ecadd [127]
0.00 0.00 4/5 set_list_code [166]
6 par_sublist <cycle 2> [158]
-----------------------------------------------
1 par_cmd <cycle 2> [51]
[83] 0.0 0.00 0.00 1 par_if <cycle 2> [83]
0.00 0.00 3/41 yylex [50]
0.00 0.00 2/42 ecadd [127]
2 par_list <cycle 2> [82]
-----------------------------------------------
11 prefork <cycle 3> [27]
[84] 0.0 0.00 0.00 11 stringsubst <cycle 3> [84]
0.00 0.00 1/269 hcalloc [40]
0.00 0.00 1/243 ugetnode [108]
0.00 0.00 1/2 skipparens [216]
3 paramsubst <cycle 3> [22]
1 getoutput <cycle 3> [24]
-----------------------------------------------
0.00 0.00 1/1 execcmd <cycle 1> [20]
[85] 0.0 0.00 0.00 1 addfd [85]
0.00 0.00 1/1334 zhalloc [37]
0.00 0.00 1/6 zclose [163]
0.00 0.00 1/2 redup [214]
0.00 0.00 1/4 movefd [175]
-----------------------------------------------
0.00 0.00 1/1 try_source_file [89]
[86] 0.0 0.00 0.00 1 dyncat [86]
0.00 0.00 1/1334 zhalloc [37]
-----------------------------------------------
0.00 0.00 1/1 ecgetlist [70]
[87] 0.0 0.00 0.00 1 newsizedlist [87]
0.00 0.00 1/1334 zhalloc [37]
-----------------------------------------------
0.00 0.00 1/1 multsub <cycle 3> [76]
[88] 0.0 0.00 0.00 1 sepjoin [88]
0.00 0.00 1/269 hcalloc [40]
0.00 0.00 1/25 strucpy [134]
-----------------------------------------------
0.00 0.00 1/1 source [16]
[89] 0.0 0.00 0.00 1 try_source_file [89]
0.00 0.00 1/1 dyncat [86]
0.00 0.00 1/1 strsfx [289]
-----------------------------------------------
0.00 0.00 1/1 getstrvalue [61]
[90] 0.0 0.00 0.00 1 underscoregetfn [90]
0.00 0.00 1/242 dupstring [41]
0.00 0.00 1/242 untokenize [109]
-----------------------------------------------
0.00 0.00 1/1 par_cond_2 [67]
[91] 0.0 0.00 0.00 1 par_cond_double [91]
0.00 0.00 1/10 ecstrcode [55]
0.00 0.00 2/42 ecadd [127]
-----------------------------------------------
0.00 0.00 27/27 init_bltinmods [93]
[92] 0.0 0.00 0.00 27 add_autoparam [92]
0.00 0.00 27/64 assignsparam [81]
0.00 0.00 27/366 gethashnode2 [106]
0.00 0.00 27/338 ztrdup [107]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[93] 0.0 0.00 0.00 1 init_bltinmods [93]
0.00 0.00 27/27 add_autoparam [92]
0.00 0.00 25/102 addbuiltin [119]
0.00 0.00 25/25 add_autobin [131]
0.00 0.00 9/9 add_dep [152]
0.00 0.00 4/4 add_autocond [170]
0.00 0.00 1/17 zinsertlinknode [146]
0.00 0.00 1/1 register_module [279]
0.00 0.00 1/1 load_module [268]
-----------------------------------------------
0.00 0.00 1/1 evalcond [12]
[94] 0.0 0.00 0.00 1 pattry [94]
0.00 0.00 1/57093 pattryrefs [8]
-----------------------------------------------
0.00 0.00 1/1 gettext2 [64]
[95] 0.0 0.00 0.00 1 taddlist [95]
0.00 0.00 3/10 ecgetstr [74]
0.00 0.00 3/5 taddstr [168]
0.00 0.00 3/6 taddchr [162]
-----------------------------------------------
0.00 0.00 5/5 createparamtable [42]
[96] 0.0 0.00 0.00 5 setiparam [96]
0.00 0.00 5/5 setnumvalue [97]
0.00 0.00 10/141 getvalue [117]
0.00 0.00 5/92 isident [120]
0.00 0.00 5/62 createparam [122]
-----------------------------------------------
0.00 0.00 5/5 setiparam [96]
[97] 0.0 0.00 0.00 5 setnumvalue [97]
0.00 0.00 5/69 setstrvalue [78]
0.00 0.00 5/5 intsetfn [165]
-----------------------------------------------
0.00 0.00 1/1 createparamtable [42]
[98] 0.0 0.00 0.00 1 set_pwd_env [98]
0.00 0.00 2/64 assignsparam [81]
0.00 0.00 4/175 getparamnode [112]
0.00 0.00 2/338 ztrdup [107]
-----------------------------------------------
0.00 0.00 57093/57093 igetmatch [7]
[99] 0.0 0.00 0.00 57093 set_pat_start [99]
-----------------------------------------------
0.00 0.00 1035/1035 gettok [49]
[100] 0.0 0.00 0.00 1035 nohw [100]
-----------------------------------------------
0.00 0.00 25/816 gethashnode [132]
0.00 0.00 366/816 gethashnode2 [106]
0.00 0.00 425/816 addhashnode2 [105]
[101] 0.0 0.00 0.00 816 hasher [101]
-----------------------------------------------
0.00 0.00 1/723 cmd_or_math_sub [232]
0.00 0.00 1/723 isnumglob [265]
0.00 0.00 1/723 parse_subst_string [77]
0.00 0.00 14/723 skipcomm [287]
0.00 0.00 73/723 gettokstr [46]
0.00 0.00 84/723 dquote_parse [164]
0.00 0.00 549/723 gettok [49]
[102] 0.0 0.00 0.00 723 ingetc [102]
0.00 0.00 19/19 inputline [138]
-----------------------------------------------
0.00 0.00 1/477 setunderscore [215]
0.00 0.00 1/477 source [16]
0.00 0.00 1/477 inpush [187]
0.00 0.00 1/477 init_jobs [259]
0.00 0.00 1/477 isnumglob [265]
0.00 0.00 1/477 register_module [279]
0.00 0.00 1/477 tpush [292]
0.00 0.00 1/477 finddir [207]
0.00 0.00 2/477 pushheap [192]
0.00 0.00 2/477 createparamtable [42]
0.00 0.00 3/477 lexsave [190]
0.00 0.00 4/477 setupvals [43]
0.00 0.00 4/477 add_autocond [170]
0.00 0.00 7/477 mkarray [156]
0.00 0.00 9/477 mkenvstr [154]
0.00 0.00 9/477 colonsplit [234]
0.00 0.00 15/477 znewlinklist [149]
0.00 0.00 17/477 zinsertlinknode [146]
0.00 0.00 18/477 init_parse [144]
0.00 0.00 19/477 tricat [142]
0.00 0.00 23/477 metafy [130]
0.00 0.00 337/477 ztrdup [107]
[103] 0.0 0.00 0.00 477 zalloc [103]
-----------------------------------------------
0.00 0.00 2/425 createaliastables [236]
0.00 0.00 24/425 createreswdtable [242]
0.00 0.00 61/425 createparam [122]
0.00 0.00 81/425 createparamtable [42]
0.00 0.00 102/425 addbuiltin [119]
0.00 0.00 155/425 createoptiontable [241]
[104] 0.0 0.00 0.00 425 addhashnode [104]
0.00 0.00 425/425 addhashnode2 [105]
-----------------------------------------------
0.00 0.00 425/425 addhashnode [104]
[105] 0.0 0.00 0.00 425 addhashnode2 [105]
0.00 0.00 425/816 hasher [101]
-----------------------------------------------
0.00 0.00 27/366 add_autoparam [92]
0.00 0.00 62/366 createparam [122]
0.00 0.00 102/366 addbuiltin [119]
0.00 0.00 175/366 getparamnode [112]
[106] 0.0 0.00 0.00 366 gethashnode2 [106]
0.00 0.00 366/816 hasher [101]
-----------------------------------------------
0.00 0.00 1/338 init_io [258]
0.00 0.00 1/338 register_module [279]
0.00 0.00 1/338 load_module [268]
0.00 0.00 2/338 set_pwd_env [98]
0.00 0.00 2/338 parseargs [277]
0.00 0.00 4/338 createaliastables [236]
0.00 0.00 8/338 add_autocond [170]
0.00 0.00 15/338 add_dep [152]
0.00 0.00 21/338 setupvals [43]
0.00 0.00 27/338 add_autoparam [92]
0.00 0.00 50/338 add_autobin [131]
0.00 0.00 61/338 createparam [122]
0.00 0.00 145/338 createparamtable [42]
[107] 0.0 0.00 0.00 338 ztrdup [107]
0.00 0.00 337/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/243 execcmd <cycle 1> [20]
0.00 0.00 1/243 stringsubst <cycle 3> [84]
0.00 0.00 1/243 multsub <cycle 3> [76]
0.00 0.00 6/243 singsub <cycle 3> [161]
0.00 0.00 234/243 execbuiltin [29]
[108] 0.0 0.00 0.00 243 ugetnode [108]
-----------------------------------------------
0.00 0.00 1/242 getoutput <cycle 3> [24]
0.00 0.00 1/242 xpandredir [21]
0.00 0.00 1/242 compgetmatch <cycle 3> [58]
0.00 0.00 1/242 parse_subst_string [77]
0.00 0.00 1/242 underscoregetfn [90]
0.00 0.00 1/242 getjobtext [63]
0.00 0.00 2/242 evalcond [12]
0.00 0.00 234/242 zglob [35]
[109] 0.0 0.00 0.00 242 untokenize [109]
-----------------------------------------------
0.00 0.00 241/241 prefork <cycle 3> [27]
[110] 0.0 0.00 0.00 241 filesub [110]
0.00 0.00 241/241 filesubstr [111]
-----------------------------------------------
0.00 0.00 241/241 filesub [110]
[111] 0.0 0.00 0.00 241 filesubstr [111]
-----------------------------------------------
0.00 0.00 1/175 arrfixenv [224]
0.00 0.00 4/175 set_pwd_env [98]
0.00 0.00 25/175 createparamtable [42]
0.00 0.00 145/175 fetchvalue [116]
[112] 0.0 0.00 0.00 175 getparamnode [112]
0.00 0.00 175/366 gethashnode2 [106]
-----------------------------------------------
0.00 0.00 14/168 skipcomm [287]
0.00 0.00 77/168 gettokstr [46]
0.00 0.00 77/168 dquote_parse [164]
[113] 0.0 0.00 0.00 168 add [113]
0.00 0.00 1/1 hrealloc [256]
-----------------------------------------------
0.00 0.00 156/156 igetmatch [7]
[114] 0.0 0.00 0.00 156 patmatchlen [114]
-----------------------------------------------
0.00 0.00 155/155 scanhashtable [282]
[115] 0.0 0.00 0.00 155 setemulate [115]
-----------------------------------------------
0.00 0.00 2/145 assignaparam [227]
0.00 0.00 2/145 paramsubst <cycle 3> [22]
0.00 0.00 141/145 getvalue [117]
[116] 0.0 0.00 0.00 145 fetchvalue [116]
0.00 0.00 145/175 getparamnode [112]
-----------------------------------------------
0.00 0.00 10/141 setiparam [96]
0.00 0.00 11/141 getsparam [69]
0.00 0.00 120/141 assignsparam [81]
[117] 0.0 0.00 0.00 141 getvalue [117]
0.00 0.00 141/145 fetchvalue [116]
-----------------------------------------------
0.00 0.00 1/117 parseargs [277]
0.00 0.00 1/117 zsh_main [1]
0.00 0.00 1/117 load_module [268]
0.00 0.00 2/117 createaliasnode [200]
0.00 0.00 6/117 add_dep [152]
0.00 0.00 20/117 newhashtable [151]
0.00 0.00 25/117 add_autobin [131]
0.00 0.00 61/117 createparam [122]
[118] 0.0 0.00 0.00 117 zshcalloc [118]
-----------------------------------------------
0.00 0.00 25/102 init_bltinmods [93]
0.00 0.00 77/102 addbuiltins [219]
[119] 0.0 0.00 0.00 102 addbuiltin [119]
0.00 0.00 102/366 gethashnode2 [106]
0.00 0.00 102/425 addhashnode [104]
-----------------------------------------------
0.00 0.00 1/92 assignaparam [227]
0.00 0.00 5/92 setiparam [96]
0.00 0.00 22/92 createparamtable [42]
0.00 0.00 64/92 assignsparam [81]
[120] 0.0 0.00 0.00 92 isident [120]
-----------------------------------------------
0.00 0.00 1/74 init_io [258]
0.00 0.00 1/74 homesetfn [255]
0.00 0.00 1/74 termsetfn [291]
0.00 0.00 2/74 execcmd <cycle 1> [20]
0.00 0.00 3/74 setstrvalue [78]
0.00 0.00 3/74 addenv [176]
0.00 0.00 4/74 freearray [249]
0.00 0.00 59/74 strsetfn [125]
[121] 0.0 0.00 0.00 74 zsfree [121]
-----------------------------------------------
0.00 0.00 1/62 assignaparam [227]
0.00 0.00 5/62 setiparam [96]
0.00 0.00 56/62 assignsparam [81]
[122] 0.0 0.00 0.00 62 createparam [122]
0.00 0.00 62/366 gethashnode2 [106]
0.00 0.00 61/61 assigngetset [123]
0.00 0.00 61/117 zshcalloc [118]
0.00 0.00 61/338 ztrdup [107]
0.00 0.00 61/425 addhashnode [104]
-----------------------------------------------
0.00 0.00 61/61 createparam [122]
[123] 0.0 0.00 0.00 61 assigngetset [123]
-----------------------------------------------
0.00 0.00 1/60 setunderscore [215]
0.00 0.00 1/60 isnumglob [265]
0.00 0.00 1/60 createparamtable [42]
0.00 0.00 2/60 popheap [191]
0.00 0.00 3/60 bld_eprog [57]
0.00 0.00 14/60 init_parse [144]
0.00 0.00 38/60 hend [137]
[124] 0.0 0.00 0.00 60 zfree [124]
-----------------------------------------------
0.00 0.00 1/59 langsetfn [266]
0.00 0.00 58/59 setstrvalue [78]
[125] 0.0 0.00 0.00 59 strsetfn [125]
0.00 0.00 59/74 zsfree [121]
-----------------------------------------------
0.00 0.00 13/51 gettok [49]
0.00 0.00 38/51 exalias [128]
[126] 0.0 0.00 0.00 51 nohwe [126]
-----------------------------------------------
0.00 0.00 1/42 par_event [59]
0.00 0.00 2/42 par_if <cycle 2> [83]
0.00 0.00 2/42 par_cond_double [91]
0.00 0.00 3/42 bld_eprog [57]
0.00 0.00 4/42 par_cond_triple [80]
0.00 0.00 6/42 par_list <cycle 2> [82]
0.00 0.00 7/42 par_sublist <cycle 2> [158]
0.00 0.00 7/42 par_pline <cycle 2> [157]
0.00 0.00 10/42 par_simple [56]
[127] 0.0 0.00 0.00 42 ecadd [127]
-----------------------------------------------
0.00 0.00 38/38 yylex [50]
[128] 0.0 0.00 0.00 38 exalias [128]
0.00 0.00 38/51 nohwe [126]
0.00 0.00 23/25 gethashnode [132]
0.00 0.00 17/28 has_token [129]
-----------------------------------------------
0.00 0.00 1/28 execcmd <cycle 1> [20]
0.00 0.00 10/28 ecstrcode [55]
0.00 0.00 17/28 exalias [128]
[129] 0.0 0.00 0.00 28 has_token [129]
-----------------------------------------------
0.00 0.00 2/27 setupvals [43]
0.00 0.00 3/27 zsh_main [1]
0.00 0.00 22/27 createparamtable [42]
[130] 0.0 0.00 0.00 27 metafy [130]
0.00 0.00 23/477 zalloc [103]
-----------------------------------------------
0.00 0.00 25/25 init_bltinmods [93]
[131] 0.0 0.00 0.00 25 add_autobin [131]
0.00 0.00 50/338 ztrdup [107]
0.00 0.00 25/117 zshcalloc [118]
-----------------------------------------------
0.00 0.00 2/25 execcmd <cycle 1> [20]
0.00 0.00 23/25 exalias [128]
[132] 0.0 0.00 0.00 25 gethashnode [132]
0.00 0.00 25/816 hasher [101]
-----------------------------------------------
0.00 0.00 1/25 cmd_or_math_sub [232]
0.00 0.00 1/25 isnumglob [265]
0.00 0.00 2/25 gettok [49]
0.00 0.00 2/25 dquote_parse [164]
0.00 0.00 19/25 gettokstr [46]
[133] 0.0 0.00 0.00 25 inungetc [133]
-----------------------------------------------
0.00 0.00 1/25 sepjoin [88]
0.00 0.00 24/25 zjoin [73]
[134] 0.0 0.00 0.00 25 strucpy [134]
-----------------------------------------------
0.00 0.00 1/21 parse_subst_string [77]
0.00 0.00 2/21 parse_string [48]
0.00 0.00 18/21 inputline [138]
[135] 0.0 0.00 0.00 21 inputsetline [135]
-----------------------------------------------
0.00 0.00 3/19 strinbeg [194]
0.00 0.00 16/19 loop [17]
[136] 0.0 0.00 0.00 19 hbegin [136]
-----------------------------------------------
0.00 0.00 3/19 strinend [195]
0.00 0.00 16/19 loop [17]
[137] 0.0 0.00 0.00 19 hend [137]
0.00 0.00 38/60 zfree [124]
-----------------------------------------------
0.00 0.00 19/19 ingetc [102]
[138] 0.0 0.00 0.00 19 inputline [138]
0.00 0.00 19/19 shingetline [141]
0.00 0.00 18/21 inputsetline [135]
-----------------------------------------------
0.00 0.00 1/19 parse_subst_string [77]
0.00 0.00 2/19 parse_string [48]
0.00 0.00 16/19 loop [17]
[139] 0.0 0.00 0.00 19 lexinit [139]
-----------------------------------------------
0.00 0.00 19/19 zhalloc [37]
[140] 0.0 0.00 0.00 19 mmap_heap_alloc [140]
-----------------------------------------------
0.00 0.00 19/19 inputline [138]
[141] 0.0 0.00 0.00 19 shingetline [141]
0.00 0.00 18/19 zrealloc [143]
-----------------------------------------------
0.00 0.00 19/19 setupvals [43]
[142] 0.0 0.00 0.00 19 tricat [142]
0.00 0.00 19/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/19 patcompile [52]
0.00 0.00 18/19 shingetline [141]
[143] 0.0 0.00 0.00 19 zrealloc [143]
-----------------------------------------------
0.00 0.00 2/18 parse_list [47]
0.00 0.00 16/18 parse_event [53]
[144] 0.0 0.00 0.00 18 init_parse [144]
0.00 0.00 18/477 zalloc [103]
0.00 0.00 14/60 zfree [124]
-----------------------------------------------
0.00 0.00 1/17 init_signals [260]
0.00 0.00 16/17 loop [17]
[145] 0.0 0.00 0.00 17 intr [145]
-----------------------------------------------
0.00 0.00 1/17 init_bltinmods [93]
0.00 0.00 1/17 load_module [268]
0.00 0.00 15/17 add_dep [152]
[146] 0.0 0.00 0.00 17 zinsertlinknode [146]
0.00 0.00 17/477 zalloc [103]
-----------------------------------------------
0.00 0.00 16/16 loop [17]
[147] 0.0 0.00 0.00 16 freeheap [147]
-----------------------------------------------
0.00 0.00 15/15 parse_event [53]
[148] 0.0 0.00 0.00 15 clear_hdocs [148]
-----------------------------------------------
0.00 0.00 1/15 parseargs [277]
0.00 0.00 3/15 addhookdef [177]
0.00 0.00 5/15 setupvals [43]
0.00 0.00 6/15 add_dep [152]
[149] 0.0 0.00 0.00 15 znewlinklist [149]
0.00 0.00 15/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/10 load_module [268]
0.00 0.00 9/10 add_dep [152]
[150] 0.0 0.00 0.00 10 find_module [150]
-----------------------------------------------
0.00 0.00 1/10 createbuiltintable [237]
0.00 0.00 1/10 createcmdnamtable [238]
0.00 0.00 1/10 createshfunctable [243]
0.00 0.00 1/10 createreswdtable [242]
0.00 0.00 1/10 createnameddirtable [240]
0.00 0.00 1/10 createhisttable [239]
0.00 0.00 1/10 createoptiontable [241]
0.00 0.00 1/10 newparamtable [275]
0.00 0.00 2/10 createaliastables [236]
[151] 0.0 0.00 0.00 10 newhashtable [151]
0.00 0.00 20/117 zshcalloc [118]
-----------------------------------------------
0.00 0.00 9/9 init_bltinmods [93]
[152] 0.0 0.00 0.00 9 add_dep [152]
0.00 0.00 15/338 ztrdup [107]
0.00 0.00 15/17 zinsertlinknode [146]
0.00 0.00 9/10 find_module [150]
0.00 0.00 6/15 znewlinklist [149]
0.00 0.00 6/117 zshcalloc [118]
-----------------------------------------------
0.00 0.00 9/9 mkenvstr [154]
[153] 0.0 0.00 0.00 9 copyenvstr [153]
-----------------------------------------------
0.00 0.00 3/9 addenv [176]
0.00 0.00 6/9 createparamtable [42]
[154] 0.0 0.00 0.00 9 mkenvstr [154]
0.00 0.00 9/477 zalloc [103]
0.00 0.00 9/9 copyenvstr [153]
-----------------------------------------------
0.00 0.00 8/8 colonsplit [234]
[155] 0.0 0.00 0.00 8 ztrncpy [155]
-----------------------------------------------
0.00 0.00 7/7 setupvals [43]
[156] 0.0 0.00 0.00 7 mkarray [156]
0.00 0.00 7/477 zalloc [103]
-----------------------------------------------
7 par_sublist2 <cycle 2> [159]
[157] 0.0 0.00 0.00 7 par_pline <cycle 2> [157]
0.00 0.00 7/42 ecadd [127]
7 par_cmd <cycle 2> [51]
-----------------------------------------------
6 par_list <cycle 2> [82]
0.00 0.00 1/3 par_event [59]
[158] 0.0 0.00 0.00 7 par_sublist <cycle 2> [158]
0.00 0.00 7/42 ecadd [127]
0.00 0.00 5/5 set_sublist_code [167]
7 par_sublist2 <cycle 2> [159]
-----------------------------------------------
7 par_sublist <cycle 2> [158]
[159] 0.0 0.00 0.00 7 par_sublist2 <cycle 2> [159]
7 par_pline <cycle 2> [157]
-----------------------------------------------
0.00 0.00 6/6 addenv [176]
[160] 0.0 0.00 0.00 6 findenv [160]
-----------------------------------------------
1 getoutput <cycle 3> [24]
1 compgetmatch <cycle 3> [58]
1 paramsubst <cycle 3> [22]
0.00 0.23 3/5 evalcond [12]
[161] 0.0 0.00 0.00 6 singsub <cycle 3> [161]
0.00 0.00 6/243 ugetnode [108]
6 prefork <cycle 3> [27]
-----------------------------------------------
0.00 0.00 3/6 taddlist [95]
0.00 0.00 3/6 getredirs [253]
[162] 0.0 0.00 0.00 6 taddchr [162]
-----------------------------------------------
0.00 0.00 1/6 addfd [85]
0.00 0.00 1/6 fixfds [208]
0.00 0.00 4/6 movefd [175]
[163] 0.0 0.00 0.00 6 zclose [163]
-----------------------------------------------
0.00 0.00 5/5 gettokstr [46]
[164] 0.0 0.00 0.00 5 dquote_parse [164]
0.00 0.00 84/723 ingetc [102]
0.00 0.00 77/168 add [113]
0.00 0.00 2/25 inungetc [133]
0.00 0.00 1/1 skipcomm [287]
0.00 0.00 1/1 cmd_or_math_sub [232]
-----------------------------------------------
0.00 0.00 5/5 setnumvalue [97]
[165] 0.0 0.00 0.00 5 intsetfn [165]
-----------------------------------------------
0.00 0.00 1/5 par_event [59]
0.00 0.00 4/5 par_list <cycle 2> [82]
[166] 0.0 0.00 0.00 5 set_list_code [166]
0.00 0.00 1/1 ecdel [244]
-----------------------------------------------
0.00 0.00 5/5 par_sublist <cycle 2> [158]
[167] 0.0 0.00 0.00 5 set_sublist_code [167]
-----------------------------------------------
0.00 0.00 2/5 getredirs [253]
0.00 0.00 3/5 taddlist [95]
[168] 0.0 0.00 0.00 5 taddstr [168]
-----------------------------------------------
0.00 0.00 1/5 clobber_open [230]
0.00 0.00 1/5 getoutput <cycle 3> [24]
0.00 0.00 1/5 source [16]
0.00 0.00 2/5 ispwd [212]
[169] 0.0 0.00 0.00 5 unmeta [169]
-----------------------------------------------
0.00 0.00 4/4 init_bltinmods [93]
[170] 0.0 0.00 0.00 4 add_autocond [170]
0.00 0.00 8/338 ztrdup [107]
0.00 0.00 4/477 zalloc [103]
0.00 0.00 4/4 addconddef [171]
-----------------------------------------------
0.00 0.00 4/4 add_autocond [170]
[171] 0.0 0.00 0.00 4 addconddef [171]
0.00 0.00 4/4 getconddef [173]
-----------------------------------------------
0.00 0.00 1/4 ecdel [244]
0.00 0.00 1/4 par_cond [65]
0.00 0.00 2/4 par_redir [71]
[172] 0.0 0.00 0.00 4 ecadjusthere [172]
-----------------------------------------------
0.00 0.00 4/4 addconddef [171]
[173] 0.0 0.00 0.00 4 getconddef [173]
-----------------------------------------------
0.00 0.00 4/4 execpline <cycle 1> [205]
[174] 0.0 0.00 0.00 4 hasprocs [174]
-----------------------------------------------
0.00 0.00 1/4 addfd [85]
0.00 0.00 1/4 init_io [258]
0.00 0.00 1/4 init_misc [19]
0.00 0.00 1/4 source [16]
[175] 0.0 0.00 0.00 4 movefd [175]
0.00 0.00 4/6 zclose [163]
-----------------------------------------------
0.00 0.00 1/3 createparamtable [42]
0.00 0.00 2/3 export_param [206]
[176] 0.0 0.00 0.00 3 addenv [176]
0.00 0.00 6/6 findenv [160]
0.00 0.00 3/9 mkenvstr [154]
0.00 0.00 3/3 zputenv [198]
0.00 0.00 3/74 zsfree [121]
-----------------------------------------------
0.00 0.00 3/3 addhookdefs [220]
[177] 0.0 0.00 0.00 3 addhookdef [177]
0.00 0.00 3/3 gethookdef [183]
0.00 0.00 3/15 znewlinklist [149]
-----------------------------------------------
8 copy_ecstr [178]
0.00 0.00 3/3 bld_eprog [57]
[178] 0.0 0.00 0.00 3+8 copy_ecstr [178]
8 copy_ecstr [178]
-----------------------------------------------
0.00 0.00 1/3 execbuiltin [29]
0.00 0.00 1/3 parseargs [277]
0.00 0.00 1/3 multsub <cycle 3> [76]
[179] 0.0 0.00 0.00 3 countlinknodes [179]
-----------------------------------------------
0.00 0.00 1/3 parseargs [277]
0.00 0.00 2/3 source [16]
[180] 0.0 0.00 0.00 3 dosetopt [180]
0.00 0.00 2/3 inittyptab [184]
-----------------------------------------------
0.00 0.00 1/3 par_cond [65]
0.00 0.00 2/3 par_redir [71]
[181] 0.0 0.00 0.00 3 ecispace [181]
-----------------------------------------------
0.00 0.00 1/3 getjobtext [63]
0.00 0.00 2/3 execode [4]
[182] 0.0 0.00 0.00 3 freeeprog [182]
-----------------------------------------------
0.00 0.00 3/3 addhookdef [177]
[183] 0.0 0.00 0.00 3 gethookdef [183]
-----------------------------------------------
0.00 0.00 1/3 setupvals [43]
0.00 0.00 2/3 dosetopt [180]
[184] 0.0 0.00 0.00 3 inittyptab [184]
-----------------------------------------------
0.00 0.00 1/3 parse_subst_string [77]
0.00 0.00 2/3 parse_string [48]
[185] 0.0 0.00 0.00 3 inpop [185]
0.00 0.00 3/3 inpoptop [186]
-----------------------------------------------
0.00 0.00 3/3 inpop [185]
[186] 0.0 0.00 0.00 3 inpoptop [186]
-----------------------------------------------
0.00 0.00 1/3 parse_subst_string [77]
0.00 0.00 2/3 parse_string [48]
[187] 0.0 0.00 0.00 3 inpush [187]
0.00 0.00 1/477 zalloc [103]
-----------------------------------------------
0.00 0.00 3/3 init_signals [260]
[188] 0.0 0.00 0.00 3 install_handler [188]
-----------------------------------------------
0.00 0.00 1/3 parse_subst_string [77]
0.00 0.00 2/3 parse_string [48]
[189] 0.0 0.00 0.00 3 lexrestore [189]
-----------------------------------------------
0.00 0.00 1/3 parse_subst_string [77]
0.00 0.00 2/3 parse_string [48]
[190] 0.0 0.00 0.00 3 lexsave [190]
0.00 0.00 3/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/3 init_misc [19]
0.00 0.00 1/3 source [16]
0.00 0.00 1/3 createparamtable [42]
[191] 0.0 0.00 0.00 3 popheap [191]
0.00 0.00 2/60 zfree [124]
-----------------------------------------------
0.00 0.00 1/3 execstring [18]
0.00 0.00 1/3 loop [17]
0.00 0.00 1/3 createparamtable [42]
[192] 0.0 0.00 0.00 3 pushheap [192]
0.00 0.00 2/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/3 getstrvalue [61]
0.00 0.00 2/3 export_param [206]
[193] 0.0 0.00 0.00 3 strgetfn [193]
-----------------------------------------------
0.00 0.00 1/3 parse_subst_string [77]
0.00 0.00 2/3 parse_string [48]
[194] 0.0 0.00 0.00 3 strinbeg [194]
0.00 0.00 3/19 hbegin [136]
-----------------------------------------------
0.00 0.00 1/3 parse_subst_string [77]
0.00 0.00 2/3 parse_string [48]
[195] 0.0 0.00 0.00 3 strinend [195]
0.00 0.00 3/19 hend [137]
-----------------------------------------------
0.00 0.00 1/3 getjobtext [63]
0.00 0.00 2/3 execode [4]
[196] 0.0 0.00 0.00 3 useeprog [196]
-----------------------------------------------
0.00 0.00 1/3 setupvals [43]
0.00 0.00 2/3 adjustwinsize [223]
[197] 0.0 0.00 0.00 3 zgetenv [197]
-----------------------------------------------
0.00 0.00 3/3 addenv [176]
[198] 0.0 0.00 0.00 3 zputenv [198]
-----------------------------------------------
0.00 0.00 2/2 mathparse [272]
[199] 0.0 0.00 0.00 2 checkunary [199]
-----------------------------------------------
0.00 0.00 2/2 createaliastables [236]
[200] 0.0 0.00 0.00 2 createaliasnode [200]
0.00 0.00 2/117 zshcalloc [118]
-----------------------------------------------
0.00 0.00 2/2 createaliastables [236]
[201] 0.0 0.00 0.00 2 createaliastable [201]
-----------------------------------------------
0.00 0.00 2/2 deletejob [203]
[202] 0.0 0.00 0.00 2 deletefilelist [202]
-----------------------------------------------
0.00 0.00 2/2 waitjobs [217]
[203] 0.0 0.00 0.00 2 deletejob [203]
0.00 0.00 2/2 deletefilelist [202]
0.00 0.00 2/2 freejob [209]
-----------------------------------------------
0.00 0.00 1/2 evalcond [12]
0.00 0.00 1/2 getoutput <cycle 3> [24]
[204] 0.0 0.00 0.00 2 ecrawstr [204]
-----------------------------------------------
2 execlist <cycle 1> [11]
[205] 0.0 0.00 0.00 2 execpline <cycle 1> [205]
0.00 0.00 4/4 hasprocs [174]
0.00 0.00 2/2 initjob [210]
0.00 0.00 2/2 waitjobs [217]
2 execpline2 <cycle 1> [62]
-----------------------------------------------
0.00 0.00 2/2 setstrvalue [78]
[206] 0.0 0.00 0.00 2 export_param [206]
0.00 0.00 2/3 addenv [176]
0.00 0.00 2/3 strgetfn [193]
-----------------------------------------------
0.00 0.00 1/2 createnameddirtable [240]
0.00 0.00 1/2 setstrvalue [78]
[207] 0.0 0.00 0.00 2 finddir [207]
0.00 0.00 1/477 zalloc [103]
-----------------------------------------------
0.00 0.00 2/2 execcmd <cycle 1> [20]
[208] 0.0 0.00 0.00 2 fixfds [208]
0.00 0.00 1/6 zclose [163]
0.00 0.00 1/2 redup [214]
-----------------------------------------------
0.00 0.00 2/2 deletejob [203]
[209] 0.0 0.00 0.00 2 freejob [209]
-----------------------------------------------
0.00 0.00 2/2 execpline <cycle 1> [205]
[210] 0.0 0.00 0.00 2 initjob [210]
0.00 0.00 2/2 initnewjob [211]
-----------------------------------------------
0.00 0.00 2/2 initjob [210]
[211] 0.0 0.00 0.00 2 initnewjob [211]
-----------------------------------------------
0.00 0.00 2/2 setupvals [43]
[212] 0.0 0.00 0.00 2 ispwd [212]
0.00 0.00 2/5 unmeta [169]
-----------------------------------------------
0.00 0.00 2/2 patcompile [52]
[213] 0.0 0.00 0.00 2 patadd [213]
-----------------------------------------------
0.00 0.00 1/2 addfd [85]
0.00 0.00 1/2 fixfds [208]
[214] 0.0 0.00 0.00 2 redup [214]
-----------------------------------------------
0.00 0.00 2/2 execcmd <cycle 1> [20]
[215] 0.0 0.00 0.00 2 setunderscore [215]
0.00 0.00 1/60 zfree [124]
0.00 0.00 1/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/2 stringsubst <cycle 3> [84]
0.00 0.00 1/2 paramsubst <cycle 3> [22]
[216] 0.0 0.00 0.00 2 skipparens [216]
-----------------------------------------------
0.00 0.00 2/2 execpline <cycle 1> [205]
[217] 0.0 0.00 0.00 2 waitjobs [217]
0.00 0.00 2/2 deletejob [203]
-----------------------------------------------
0.00 0.00 2/2 mathparse [272]
[218] 0.0 0.00 0.00 2 zzlex [218]
0.00 0.00 1/1 lexconstant [267]
-----------------------------------------------
0.00 0.00 1/1 createbuiltintable [237]
[219] 0.0 0.00 0.00 1 addbuiltins [219]
0.00 0.00 77/102 addbuiltin [119]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[220] 0.0 0.00 0.00 1 addhookdefs [220]
0.00 0.00 3/3 addhookdef [177]
-----------------------------------------------
0.00 0.00 1/1 adjustwinsize [223]
[221] 0.0 0.00 0.00 1 adjustcolumns [221]
-----------------------------------------------
0.00 0.00 1/1 adjustwinsize [223]
[222] 0.0 0.00 0.00 1 adjustlines [222]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[223] 0.0 0.00 0.00 1 adjustwinsize [223]
0.00 0.00 2/3 zgetenv [197]
0.00 0.00 1/1 adjustlines [222]
0.00 0.00 1/1 adjustcolumns [221]
-----------------------------------------------
0.00 0.00 1/1 colonarrsetfn [233]
[224] 0.0 0.00 0.00 1 arrfixenv [224]
0.00 0.00 1/175 getparamnode [112]
0.00 0.00 1/1 emptycmdnamtable [245]
-----------------------------------------------
0.00 0.00 1/1 bin_print [28]
[225] 0.0 0.00 0.00 1 arrlen [225]
-----------------------------------------------
0.00 0.00 1/1 setarrvalue [283]
[226] 0.0 0.00 0.00 1 arrsetfn [226]
-----------------------------------------------
0.00 0.00 1/1 createparamtable [42]
[227] 0.0 0.00 0.00 1 assignaparam [227]
0.00 0.00 2/145 fetchvalue [116]
0.00 0.00 1/92 isident [120]
0.00 0.00 1/1 setarrvalue [283]
0.00 0.00 1/62 createparam [122]
-----------------------------------------------
0.00 0.00 1/1 load_module [268]
[228] 0.0 0.00 0.00 1 boot_module [228]
0.00 0.00 1/1 boot_zshQsmain [229]
-----------------------------------------------
0.00 0.00 1/1 boot_module [228]
[229] 0.0 0.00 0.00 1 boot_zshQsmain [229]
-----------------------------------------------
0.00 0.00 1/1 execcmd <cycle 1> [20]
[230] 0.0 0.00 0.00 1 clobber_open [230]
0.00 0.00 1/5 unmeta [169]
-----------------------------------------------
0.00 0.00 1/1 execcmd <cycle 1> [20]
[231] 0.0 0.00 0.00 1 closem [231]
-----------------------------------------------
0.00 0.00 1/1 dquote_parse [164]
[232] 0.0 0.00 0.00 1 cmd_or_math_sub [232]
0.00 0.00 1/723 ingetc [102]
0.00 0.00 1/25 inungetc [133]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[233] 0.0 0.00 0.00 1 colonarrsetfn [233]
0.00 0.00 1/1 colonsplit [234]
0.00 0.00 1/1 arrfixenv [224]
0.00 0.00 1/1 freearray [249]
-----------------------------------------------
0.00 0.00 1/1 colonarrsetfn [233]
[234] 0.0 0.00 0.00 1 colonsplit [234]
0.00 0.00 9/477 zalloc [103]
0.00 0.00 8/8 ztrncpy [155]
-----------------------------------------------
0.00 0.00 1/1 getstrvalue [61]
[235] 0.0 0.00 0.00 1 convbase [235]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[236] 0.0 0.00 0.00 1 createaliastables [236]
0.00 0.00 4/338 ztrdup [107]
0.00 0.00 2/10 newhashtable [151]
0.00 0.00 2/2 createaliastable [201]
0.00 0.00 2/2 createaliasnode [200]
0.00 0.00 2/425 addhashnode [104]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[237] 0.0 0.00 0.00 1 createbuiltintable [237]
0.00 0.00 1/10 newhashtable [151]
0.00 0.00 1/1 addbuiltins [219]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[238] 0.0 0.00 0.00 1 createcmdnamtable [238]
0.00 0.00 1/10 newhashtable [151]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[239] 0.0 0.00 0.00 1 createhisttable [239]
0.00 0.00 1/10 newhashtable [151]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[240] 0.0 0.00 0.00 1 createnameddirtable [240]
0.00 0.00 1/10 newhashtable [151]
0.00 0.00 1/2 finddir [207]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[241] 0.0 0.00 0.00 1 createoptiontable [241]
0.00 0.00 155/425 addhashnode [104]
0.00 0.00 1/10 newhashtable [151]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[242] 0.0 0.00 0.00 1 createreswdtable [242]
0.00 0.00 24/425 addhashnode [104]
0.00 0.00 1/10 newhashtable [151]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[243] 0.0 0.00 0.00 1 createshfunctable [243]
0.00 0.00 1/10 newhashtable [151]
-----------------------------------------------
0.00 0.00 1/1 set_list_code [166]
[244] 0.0 0.00 0.00 1 ecdel [244]
0.00 0.00 1/4 ecadjusthere [172]
-----------------------------------------------
0.00 0.00 1/1 arrfixenv [224]
[245] 0.0 0.00 0.00 1 emptycmdnamtable [245]
0.00 0.00 1/1 emptyhashtable [246]
-----------------------------------------------
0.00 0.00 1/1 emptycmdnamtable [245]
[246] 0.0 0.00 0.00 1 emptyhashtable [246]
0.00 0.00 1/1 resizehashtable [280]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[247] 0.0 0.00 0.00 1 emulate [247]
0.00 0.00 1/1 scanhashtable [282]
-----------------------------------------------
1 execcmd <cycle 1> [20]
[248] 0.0 0.00 0.00 1 execif <cycle 1> [248]
1 execlist <cycle 1> [11]
-----------------------------------------------
0.00 0.00 1/1 colonarrsetfn [233]
[249] 0.0 0.00 0.00 1 freearray [249]
0.00 0.00 4/74 zsfree [121]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[250] 0.0 0.00 0.00 1 get_usage [250]
-----------------------------------------------
0.00 0.00 1/1 createparamtable [42]
[251] 0.0 0.00 0.00 1 getbaudrate [251]
-----------------------------------------------
0.00 0.00 1/1 parseargs [277]
[252] 0.0 0.00 0.00 1 getlinknode [252]
-----------------------------------------------
0.00 0.00 1/1 gettext2 [64]
[253] 0.0 0.00 0.00 1 getredirs [253]
0.00 0.00 3/6 taddchr [162]
0.00 0.00 2/5 taddstr [168]
-----------------------------------------------
0.00 0.00 1/1 getstrvalue [61]
[254] 0.0 0.00 0.00 1 homegetfn [254]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[255] 0.0 0.00 0.00 1 homesetfn [255]
0.00 0.00 1/74 zsfree [121]
-----------------------------------------------
0.00 0.00 1/1 add [113]
[256] 0.0 0.00 0.00 1 hrealloc [256]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[257] 0.0 0.00 0.00 1 init_eprog [257]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[258] 0.0 0.00 0.00 1 init_io [258]
0.00 0.00 1/74 zsfree [121]
0.00 0.00 1/338 ztrdup [107]
0.00 0.00 1/4 movefd [175]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[259] 0.0 0.00 0.00 1 init_jobs [259]
0.00 0.00 1/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[260] 0.0 0.00 0.00 1 init_signals [260]
0.00 0.00 3/3 install_handler [188]
0.00 0.00 1/1 signal_mask [286]
0.00 0.00 1/17 intr [145]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[261] 0.0 0.00 0.00 1 inithist [261]
-----------------------------------------------
0.00 0.00 1/1 setupvals [43]
[262] 0.0 0.00 0.00 1 initlextabs [262]
-----------------------------------------------
0.00 0.00 1/1 getstrvalue [61]
[263] 0.0 0.00 0.00 1 intvargetfn [263]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[264] 0.0 0.00 0.00 1 intvarsetfn [264]
-----------------------------------------------
0.00 0.00 1/1 gettok [49]
[265] 0.0 0.00 0.00 1 isnumglob [265]
0.00 0.00 1/477 zalloc [103]
0.00 0.00 1/723 ingetc [102]
0.00 0.00 1/25 inungetc [133]
0.00 0.00 1/60 zfree [124]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[266] 0.0 0.00 0.00 1 langsetfn [266]
0.00 0.00 1/59 strsetfn [125]
-----------------------------------------------
0.00 0.00 1/1 zzlex [218]
[267] 0.0 0.00 0.00 1 lexconstant [267]
0.00 0.00 1/1 zstrtol [296]
-----------------------------------------------
0.00 0.00 1/1 init_bltinmods [93]
[268] 0.0 0.00 0.00 1 load_module [268]
0.00 0.00 1/1 modname_ok [273]
0.00 0.00 1/10 find_module [150]
0.00 0.00 1/1 module_linked [274]
0.00 0.00 1/117 zshcalloc [118]
0.00 0.00 1/338 ztrdup [107]
0.00 0.00 1/17 zinsertlinknode [146]
0.00 0.00 1/1 setup_module [284]
0.00 0.00 1/1 boot_module [228]
-----------------------------------------------
0.00 0.00 1/1 mathevali [270]
[269] 0.0 0.00 0.00 1 matheval [269]
0.00 0.00 1/1 mathevall [271]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[270] 0.0 0.00 0.00 1 mathevali [270]
0.00 0.00 1/1 matheval [269]
-----------------------------------------------
0.00 0.00 1/1 matheval [269]
[271] 0.0 0.00 0.00 1 mathevall [271]
0.00 0.00 1/1 mathparse [272]
-----------------------------------------------
0.00 0.00 1/1 mathevall [271]
[272] 0.0 0.00 0.00 1 mathparse [272]
0.00 0.00 2/2 zzlex [218]
0.00 0.00 2/2 checkunary [199]
0.00 0.00 1/1 push [278]
-----------------------------------------------
0.00 0.00 1/1 load_module [268]
[273] 0.0 0.00 0.00 1 modname_ok [273]
-----------------------------------------------
0.00 0.00 1/1 load_module [268]
[274] 0.0 0.00 0.00 1 module_linked [274]
-----------------------------------------------
0.00 0.00 1/1 createparamtable [42]
[275] 0.0 0.00 0.00 1 newparamtable [275]
0.00 0.00 1/10 newhashtable [151]
-----------------------------------------------
0.00 0.00 1/1 parseargs [277]
[276] 0.0 0.00 0.00 1 optlookupc [276]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[277] 0.0 0.00 0.00 1 parseargs [277]
0.00 0.00 2/338 ztrdup [107]
0.00 0.00 1/15 znewlinklist [149]
0.00 0.00 1/3 countlinknodes [179]
0.00 0.00 1/117 zshcalloc [118]
0.00 0.00 1/1 getlinknode [252]
0.00 0.00 1/1 optlookupc [276]
0.00 0.00 1/3 dosetopt [180]
-----------------------------------------------
0.00 0.00 1/1 mathparse [272]
[278] 0.0 0.00 0.00 1 push [278]
-----------------------------------------------
0.00 0.00 1/1 init_bltinmods [93]
[279] 0.0 0.00 0.00 1 register_module [279]
0.00 0.00 1/477 zalloc [103]
0.00 0.00 1/338 ztrdup [107]
-----------------------------------------------
0.00 0.00 1/1 emptyhashtable [246]
[280] 0.0 0.00 0.00 1 resizehashtable [280]
-----------------------------------------------
0.00 0.00 1/1 zexit [294]
[281] 0.0 0.00 0.00 1 runhookdef [281]
-----------------------------------------------
0.00 0.00 1/1 emulate [247]
[282] 0.0 0.00 0.00 1 scanhashtable [282]
0.00 0.00 155/155 setemulate [115]
-----------------------------------------------
0.00 0.00 1/1 assignaparam [227]
[283] 0.0 0.00 0.00 1 setarrvalue [283]
0.00 0.00 1/1 arrsetfn [226]
-----------------------------------------------
0.00 0.00 1/1 load_module [268]
[284] 0.0 0.00 0.00 1 setup_module [284]
0.00 0.00 1/1 setup_zshQsmain [285]
-----------------------------------------------
0.00 0.00 1/1 setup_module [284]
[285] 0.0 0.00 0.00 1 setup_zshQsmain [285]
-----------------------------------------------
0.00 0.00 1/1 init_signals [260]
[286] 0.0 0.00 0.00 1 signal_mask [286]
-----------------------------------------------
0.00 0.00 1/1 dquote_parse [164]
[287] 0.0 0.00 0.00 1 skipcomm [287]
0.00 0.00 14/723 ingetc [102]
0.00 0.00 14/168 add [113]
-----------------------------------------------
0.00 0.00 1/1 execcmd <cycle 1> [20]
[288] 0.0 0.00 0.00 1 spawnpipes [288]
-----------------------------------------------
0.00 0.00 1/1 try_source_file [89]
[289] 0.0 0.00 0.00 1 strsfx [289]
-----------------------------------------------
0.00 0.00 1/1 getstrvalue [61]
[290] 0.0 0.00 0.00 1 termgetfn [290]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[291] 0.0 0.00 0.00 1 termsetfn [291]
0.00 0.00 1/74 zsfree [121]
-----------------------------------------------
0.00 0.00 1/1 gettext2 [64]
[292] 0.0 0.00 0.00 1 tpush [292]
0.00 0.00 1/477 zalloc [103]
-----------------------------------------------
0.00 0.00 1/1 setstrvalue [78]
[293] 0.0 0.00 0.00 1 zerr [293]
-----------------------------------------------
0.00 0.00 1/1 init_misc [19]
[294] 0.0 0.00 0.00 1 zexit [294]
0.00 0.00 1/1 runhookdef [281]
-----------------------------------------------
0.00 0.00 1/1 zsh_main [1]
[295] 0.0 0.00 0.00 1 zopenmax [295]
-----------------------------------------------
0.00 0.00 1/1 lexconstant [267]
[296] 0.0 0.00 0.00 1 zstrtol [296]
-----------------------------------------------
0.00 0.00 1/1 igetmatch [7]
[297] 0.0 0.00 0.00 1 ztrlen [297]
-----------------------------------------------
This table describes the call tree of the program, and was sorted by
the total amount of time spent in each function and its children.
Each entry in this table consists of several lines. The line with the
index number at the left hand margin lists the current function.
The lines above it list the functions that called this function,
and the lines below it list the functions this one called.
This line lists:
index A unique number given to each element of the table.
Index numbers are sorted numerically.
The index number is printed next to every function name so
it is easier to look up where the function in the table.
% time This is the percentage of the `total' time that was spent
in this function and its children. Note that due to
different viewpoints, functions excluded by options, etc,
these numbers will NOT add up to 100%.
self This is the total amount of time spent in this function.
children This is the total amount of time propagated into this
function by its children.
called This is the number of times the function was called.
If the function called itself recursively, the number
only includes non-recursive calls, and is followed by
a `+' and the number of recursive calls.
name The name of the current function. The index number is
printed after it. If the function is a member of a
cycle, the cycle number is printed between the
function's name and the index number.
For the function's parents, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the function into this parent.
children This is the amount of time that was propagated from
the function's children into this parent.
called This is the number of times this parent called the
function `/' the total number of times the function
was called. Recursive calls to the function are not
included in the number after the `/'.
name This is the name of the parent. The parent's index
number is printed after it. If the parent is a
member of a cycle, the cycle number is printed between
the name and the index number.
If the parents of the function cannot be determined, the word
`<spontaneous>' is printed in the `name' field, and all the other
fields are blank.
For the function's children, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the child into the function.
children This is the amount of time that was propagated from the
child's children to the function.
called This is the number of times the function called
this child `/' the total number of times the child
was called. Recursive calls by the child are not
listed in the number after the `/'.
name This is the name of the child. The child's index
number is printed after it. If the child is a
member of a cycle, the cycle number is printed
between the name and the index number.
If there are any cycles (circles) in the call graph, there is an
entry for the cycle-as-a-whole. This entry shows who called the
cycle (as parents) and the members of the cycle (as children.)
The `+' recursive calls entry shows the number of function calls that
were internal to the cycle, and the calls entry for each member shows,
for that member, how many times it was called from other members of
the cycle.
\f
Index by function name
[113] add [132] gethashnode [53] parse_event
[131] add_autobin [106] gethashnode2 [47] parse_list
[170] add_autocond [183] gethookdef [48] parse_string
[92] add_autoparam [63] getjobtext [77] parse_subst_string
[152] add_dep [30] getkeystring [277] parseargs
[119] addbuiltin [252] getlinknode [213] patadd (pattern.c)
[219] addbuiltins [6] getmatch [52] patcompile
[171] addconddef [24] getoutput [114] patmatchlen
[176] addenv [112] getparamnode (params.c) [94] pattry
[85] addfd (exec.c) [253] getredirs [10] pattrylen
[104] addhashnode [69] getsparam [8] pattryrefs
[105] addhashnode2 [61] getstrvalue [191] popheap
[177] addhookdef [64] gettext2 (text.c) [27] prefork
[220] addhookdefs [49] gettok [278] push (math.c)
[221] adjustcolumns (utils.c) [46] gettokstr (lex.c) [192] pushheap
[222] adjustlines (utils.c) [117] getvalue [25] readoutput
[223] adjustwinsize [36] globlist [214] redup
[224] arrfixenv [129] has_token [279] register_module
[225] arrlen [31] hasbraces [33] remnulargs
[226] arrsetfn [101] hasher [280] resizehashtable (hashtable.c)
[227] assignaparam [174] hasprocs [15] run_init_scripts
[123] assigngetset (params.c) [34] haswilds [281] runhookdef
[81] assignsparam [136] hbegin [282] scanhashtable
[28] bin_print [40] hcalloc [88] sepjoin
[57] bld_eprog (parse.c) [137] hend [23] sepsplit
[228] boot_module (module.c) [254] homegetfn [166] set_list_code (parse.c)
[229] boot_zshQsmain [255] homesetfn [99] set_pat_start (glob.c)
[199] checkunary (math.c) [256] hrealloc [98] set_pwd_env
[148] clear_hdocs (parse.c) [7] igetmatch (glob.c) [167] set_sublist_code (parse.c)
[230] clobber_open (exec.c) [102] ingetc [283] setarrvalue
[231] closem [93] init_bltinmods [115] setemulate (options.c)
[232] cmd_or_math_sub (lex.c) [257] init_eprog [96] setiparam
[72] colonarrgetfn [258] init_io [79] setlang (params.c)
[233] colonarrsetfn [259] init_jobs [97] setnumvalue
[234] colonsplit [19] init_misc [78] setstrvalue
[58] compgetmatch (glob.c) [144] init_parse (parse.c) [215] setunderscore
[235] convbase [260] init_signals [284] setup_module (module.c)
[178] copy_ecstr (parse.c) [261] inithist [285] setup_zshQsmain
[153] copyenvstr (params.c) [210] initjob [43] setupvals
[179] countlinknodes [262] initlextabs [141] shingetline
[200] createaliasnode [211] initnewjob (jobs.c) [286] signal_mask
[201] createaliastable [184] inittyptab [161] singsub
[236] createaliastables [185] inpop [287] skipcomm (lex.c)
[237] createbuiltintable [186] inpoptop (input.c) [216] skipparens
[238] createcmdnamtable [187] inpush [16] source
[239] createhisttable [138] inputline (input.c) [288] spawnpipes (exec.c)
[240] createnameddirtable [135] inputsetline (input.c) [44] split_env_string (params.c)
[241] createoptiontable [38] insertlinknode [75] strcatsub (subst.c)
[122] createparam [188] install_handler [193] strgetfn
[42] createparamtable [145] intr [194] strinbeg
[242] createreswdtable [165] intsetfn (params.c) [195] strinend
[243] createshfunctable [263] intvargetfn [84] stringsubst (subst.c)
[202] deletefilelist [264] intvarsetfn [125] strsetfn (params.c)
[203] deletejob [133] inungetc [289] strsfx
[180] dosetopt [120] isident [134] strucpy
[164] dquote_parse (lex.c) [265] isnumglob (lex.c) [162] taddchr (text.c)
[41] dupstring [212] ispwd [95] taddlist (text.c)
[86] dyncat [266] langsetfn [168] taddstr (text.c)
[127] ecadd (parse.c) [267] lexconstant (math.c) [290] termgetfn
[172] ecadjusthere (parse.c) [139] lexinit [291] termsetfn
[244] ecdel (parse.c) [189] lexrestore [292] tpush (text.c)
[70] ecgetlist [190] lexsave [142] tricat
[54] ecgetredirs [268] load_module [89] try_source_file
[74] ecgetstr [17] loop [108] ugetnode
[181] ecispace (parse.c) [269] matheval [90] underscoregetfn
[204] ecrawstr [270] mathevali [169] unmeta
[55] ecstrcode (parse.c) [271] mathevall (math.c) [109] untokenize
[245] emptycmdnamtable (hashtable.c) [272] mathparse (math.c) [196] useeprog
[246] emptyhashtable [130] metafy [217] waitjobs
[247] emulate [156] mkarray [32] wordcount
[12] evalcond [154] mkenvstr (params.c) [21] xpandredir
[128] exalias [140] mmap_heap_alloc (mem.c) [50] yylex
[29] execbuiltin [273] modname_ok (module.c) [103] zalloc
[20] execcmd (exec.c) [274] module_linked [163] zclose
[13] execcond (exec.c) [175] movefd [293] zerr
[248] execif [76] multsub (subst.c) [294] zexit
[11] execlist [151] newhashtable [124] zfree
[4] execode [68] newlinklist [197] zgetenv
[205] execpline (exec.c) [275] newparamtable [35] zglob
[62] execpline2 (exec.c) [87] newsizedlist [37] zhalloc
[14] execsimple (exec.c) [100] nohw (hist.c) [146] zinsertlinknode
[18] execstring [126] nohwe (hist.c) [73] zjoin
[206] export_param [276] optlookupc [149] znewlinklist
[116] fetchvalue [51] par_cmd (parse.c) [295] zopenmax
[110] filesub [65] par_cond (parse.c) [198] zputenv
[111] filesubstr [66] par_cond_1 (parse.c) [143] zrealloc
[150] find_module (module.c) [67] par_cond_2 (parse.c) [121] zsfree
[207] finddir [91] par_cond_double (parse.c) [1] zsh_main
[160] findenv (params.c) [80] par_cond_triple (parse.c) [118] zshcalloc
[26] findsep (utils.c) [60] par_dinbrack (parse.c) [296] zstrtol
[208] fixfds (exec.c) [59] par_event (parse.c) [107] ztrdup
[249] freearray [83] par_if (parse.c) [297] ztrlen
[182] freeeprog [82] par_list (parse.c) [155] ztrncpy
[147] freeheap [157] par_pline (parse.c) [9] ztrsub
[209] freejob [71] par_redir (parse.c) [218] zzlex (math.c)
[39] get_match_ret (glob.c) [56] par_simple (parse.c) [3] <cycle 1>
[250] get_usage [158] par_sublist (parse.c) [45] <cycle 2>
[251] getbaudrate [159] par_sublist2 (parse.c) [5] <cycle 3>
[173] getconddef [22] paramsubst
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-23 16:26 ` Clint Adams
@ 2005-04-23 17:12 ` Bart Schaefer
2005-04-24 0:33 ` Peter Stephenson
2005-04-24 0:47 ` PATCH: " Bart Schaefer
0 siblings, 2 replies; 11+ messages in thread
From: Bart Schaefer @ 2005-04-23 17:12 UTC (permalink / raw)
To: zsh-workers
On Apr 23, 12:26pm, Clint Adams wrote:
}
} > What's calling pattryrefs() 28000+ times? Is that how many lines there
} > are in /tmp/blah?
}
} 231 lines, but 57093 chars. pattrylen() seems to be called 57092 times
} by igetmatch.
OK, that makes sense. igetmatch() has a for() loop that, when asked to
find every possible match within the string (e.g. by ${...//...}), calls
the pattern comparison once at every possible matching position. Since
the pattern is only one character long (/,/), it calls it once for each
character in the string.
But pattry() recomputes the unmetafied length of the *entire* string on
each call. So that length computation is going to have to be factored
out of pattry(), possibly by storing it in the Patprog the way that's
done for set_pat_start() and set_pat_end().
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-23 17:12 ` Bart Schaefer
@ 2005-04-24 0:33 ` Peter Stephenson
2005-04-24 0:47 ` PATCH: " Bart Schaefer
1 sibling, 0 replies; 11+ messages in thread
From: Peter Stephenson @ 2005-04-24 0:33 UTC (permalink / raw)
To: zsh-workers
Bart Schaefer wrote:
> But pattry() recomputes the unmetafied length of the *entire* string on
> each call. So that length computation is going to have to be factored
> out of pattry(), possibly by storing it in the Patprog the way that's
> done for set_pat_start() and set_pat_end().
The simplest thing to do is to pass an extra argument to pattrylen().
It's always a number readily calculable locally in the caller.
As the note says, it would be much simpler to have an unmetafied string
and its length. Unfortunately, apart from complist(), that affects a
large number of calls to pattry() which currently pass a metafied
string. Hmm, we could temporarily unmetafy in pattry(); that's not
called on internal loops, unlike igetmatch() (where we'd just need to
unmetafy once per call), so that's not so inefficient.
Index: Src/glob.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/glob.c,v
retrieving revision 1.39
diff -u -r1.39 glob.c
--- Src/glob.c 16 Mar 2005 11:51:15 -0000 1.39
+++ Src/glob.c 24 Apr 2005 00:27:34 -0000
@@ -2223,11 +2223,12 @@
{
char *s = *sp, *t;
/*
- * Note that ioff and ml count characters in the character
+ * Note that ioff and uml count characters in the character
* set (Meta's are not included), while l counts characters in the
- * string.
+ * metafied string. umlen is a counter for (unmetafied) character
+ * lengths.
*/
- int ioff, l = strlen(*sp), ml = ztrlen(*sp), matched = 1;
+ int ioff, l = strlen(*sp), uml = ztrlen(*sp), matched = 1, umlen;
repllist = NULL;
@@ -2273,9 +2274,9 @@
* ... now we know whether it's worth looking for the
* shortest, which we do by brute force.
*/
- for (t = s; t < s + mlen; METAINC(t)) {
+ for (t = s, umlen = 0; t < s + mlen; METAINC(t), umlen++) {
set_pat_end(p, *t);
- if (pattrylen(p, s, t - s, 0)) {
+ if (pattrylen(p, s, t - s, umlen, 0)) {
mlen = patmatchlen();
break;
}
@@ -2290,9 +2291,10 @@
/* Smallest possible match at tail of string: *
* move back down string until we get a match. *
* There's no optimization here. */
- for (ioff = ml, t = s + l; t >= s; t--, ioff--) {
+ for (ioff = uml, t = s + l, umlen = 0; t >= s;
+ t--, ioff--, umlen++) {
set_pat_start(p, t-s);
- if (pattrylen(p, t, -1, ioff)) {
+ if (pattrylen(p, t, s + l - t, umlen, ioff)) {
*sp = get_match_ret(*sp, t - s, l, fl, replstr);
return 1;
}
@@ -2305,9 +2307,10 @@
/* Largest possible match at tail of string: *
* move forward along string until we get a match. *
* Again there's no optimisation. */
- for (ioff = 0, t = s; t < s + l; ioff++, t++) {
+ for (ioff = 0, t = s, umlen = uml; t < s + l;
+ ioff++, t++, umlen--) {
set_pat_start(p, t-s);
- if (pattrylen(p, t, -1, ioff)) {
+ if (pattrylen(p, t, s + l - t, umlen, ioff)) {
*sp = get_match_ret(*sp, t-s, l, fl, replstr);
return 1;
}
@@ -2329,19 +2332,22 @@
if (fl & SUB_GLOBAL)
repllist = newlinklist();
ioff = 0; /* offset into string */
+ umlen = uml;
do {
/* loop over all matches for global substitution */
matched = 0;
- for (; t < s + l; t++, ioff++) {
+ for (; t < s + l; t++, ioff++, umlen--) {
/* Find the longest match from this position. */
set_pat_start(p, t-s);
- if (pattrylen(p, t, -1, ioff)) {
+ if (pattrylen(p, t, s + l - t, umlen, ioff)) {
char *mpos = t + patmatchlen();
if (!(fl & SUB_LONG) && !(p->flags & PAT_PURES)) {
char *ptr;
- for (ptr = t; ptr < mpos; METAINC(ptr)) {
+ int umlen2;
+ for (ptr = t, umlen2 = 0; ptr < mpos;
+ METAINC(ptr), umlen2++) {
set_pat_end(p, *ptr);
- if (pattrylen(p, t, ptr - t, ioff)) {
+ if (pattrylen(p, t, ptr - t, umlen2, ioff)) {
mpos = t + patmatchlen();
break;
}
@@ -2370,7 +2376,7 @@
* which is already marked for replacement.
*/
matched = 1;
- for ( ; t < mpos; t++, ioff++)
+ for ( ; t < mpos; t++, ioff++, umlen--)
if (*t == Meta)
t++;
break;
@@ -2397,23 +2403,26 @@
/* Longest/shortest at end, matching substrings. */
if (!(fl & SUB_LONG)) {
set_pat_start(p, l);
- if (pattrylen(p, s + l, -1, ml) && !--n) {
+ if (pattrylen(p, s + l, 0, 0, uml) && !--n) {
*sp = get_match_ret(*sp, l, l, fl, replstr);
return 1;
}
}
- for (ioff = ml - 1, t = s + l - 1; t >= s; t--, ioff--) {
+ for (ioff = uml - 1, t = s + l - 1, umlen = 1; t >= s;
+ t--, ioff--, umlen++) {
if (t > s && t[-1] == Meta)
t--;
set_pat_start(p, t-s);
- if (pattrylen(p, t, -1, ioff) && !--n) {
+ if (pattrylen(p, t, s + l - t, umlen, ioff) && !--n) {
/* Found the longest match */
char *mpos = t + patmatchlen();
if (!(fl & SUB_LONG) && !(p->flags & PAT_PURES)) {
char *ptr;
- for (ptr = t; ptr < mpos; METAINC(ptr)) {
+ int umlen2;
+ for (ptr = t, umlen2 = 0; ptr < mpos;
+ METAINC(ptr), umlen2++) {
set_pat_end(p, *ptr);
- if (pattrylen(p, t, ptr - t, ioff)) {
+ if (pattrylen(p, t, ptr - t, umlen2, ioff)) {
mpos = t + patmatchlen();
break;
}
@@ -2424,7 +2433,7 @@
}
}
set_pat_start(p, l);
- if ((fl & SUB_LONG) && pattrylen(p, s + l, -1, ml) && !--n) {
+ if ((fl & SUB_LONG) && pattrylen(p, s + l, 0, 0, uml) && !--n) {
*sp = get_match_ret(*sp, l, l, fl, replstr);
return 1;
}
Index: Src/pattern.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/pattern.c,v
retrieving revision 1.24
diff -u -r1.24 pattern.c
--- Src/pattern.c 19 Nov 2004 15:15:31 -0000 1.24
+++ Src/pattern.c 24 Apr 2005 00:28:03 -0000
@@ -1496,7 +1496,7 @@
mod_export int
pattry(Patprog prog, char *string)
{
- return pattryrefs(prog, string, -1, 0, NULL, NULL, NULL);
+ return pattryrefs(prog, string, -1, -1, 0, NULL, NULL, NULL);
}
/*
@@ -1507,19 +1507,22 @@
/**/
mod_export int
-pattrylen(Patprog prog, char *string, int len, int offset)
+pattrylen(Patprog prog, char *string, int len, int unmetalen, int offset)
{
- return pattryrefs(prog, string, len, offset, NULL, NULL, NULL);
+ return pattryrefs(prog, string, len, unmetalen, offset, NULL, NULL, NULL);
}
/*
- * Test prog against string with given length stringlen, which
- * may be -1 to indicate a null-terminated string. The input
- * string is metafied; the length is the raw string length, not the
- * number of possibly metafied characters.
+ * Test prog against string with given lengths. The input
+ * string is metafied; stringlen is the raw string length, and
+ * unmetalen the number of characters in the original string (some
+ * of which may now be metafied). Either value may be -1
+ * to indicate a null-terminated string which will be counted. Note
+ * there may be a severe penalty for this if a lot of matching is done
+ * on one string.
*
* offset is the position in the original string (not seen by
- * the patter module) at which we are trying to match.
+ * the pattern module) at which we are trying to match.
* This is added in to the positions recorded in patbeginp and patendp
* when we are looking for substrings. Currently this only happens
* in the parameter substitution code.
@@ -1535,10 +1538,11 @@
/**/
mod_export int
-pattryrefs(Patprog prog, char *string, int stringlen, int patoffset,
+pattryrefs(Patprog prog, char *string, int stringlen, int unmetalen,
+ int patoffset,
int *nump, int *begp, int *endp)
{
- int i, maxnpos = 0, ret, needfullpath, unmetalen, unmetalenp;
+ int i, maxnpos = 0, ret, needfullpath, unmetalenp;
int origlen;
char **sp, **ep, *tryalloced, *ptr;
char *progstr = (char *)prog + prog->startoff;
@@ -1564,7 +1568,8 @@
needfullpath = (patflags & PAT_HAS_EXCLUDP) && pathpos;
/* Get the length of the full string when unmetafied. */
- unmetalen = ztrsub(string + stringlen, string);
+ if (unmetalen < 0)
+ unmetalen = ztrsub(string + stringlen, string);
if (needfullpath)
unmetalenp = ztrsub(pathbuf + pathpos, pathbuf);
else
Index: Src/Zle/complist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/complist.c,v
retrieving revision 1.67
diff -u -r1.67 complist.c
--- Src/Zle/complist.c 24 Feb 2005 15:32:42 -0000 1.67
+++ Src/Zle/complist.c 24 Apr 2005 00:28:30 -0000
@@ -601,7 +601,7 @@
for (pc = c->pats; pc; pc = pc->next)
if ((!pc->prog || !group || pattry(pc->prog, group)) &&
- pattryrefs(pc->pat, n, -1, 0, &nrefs, begpos, endpos)) {
+ pattryrefs(pc->pat, n, -1, -1, 0, &nrefs, begpos, endpos)) {
if (pc->cols[1]) {
patcols = pc->cols;
@@ -639,7 +639,7 @@
for (pc = c->pats; pc; pc = pc->next)
if ((!pc->prog || !group || pattry(pc->prog, group)) &&
- pattryrefs(pc->pat, n, -1, 0, &nrefs, begpos, endpos)) {
+ pattryrefs(pc->pat, n, -1, -1, 0, &nrefs, begpos, endpos)) {
if (pc->cols[1]) {
patcols = pc->cols;
--
Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
Work: pws@csr.com
Web: http://www.pwstephenson.fsnet.co.uk
^ permalink raw reply [flat|nested] 11+ messages in thread
* PATCH: Re: replacement slowdown
2005-04-23 17:12 ` Bart Schaefer
2005-04-24 0:33 ` Peter Stephenson
@ 2005-04-24 0:47 ` Bart Schaefer
2005-04-24 3:32 ` Bart Schaefer
1 sibling, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 2005-04-24 0:47 UTC (permalink / raw)
To: zsh-workers
On Apr 23, 5:12pm, Bart Schaefer wrote:
}
} But pattry() recomputes the unmetafied length of the *entire* string on
} each call. So that length computation is going to have to be factored
} out of pattry(), possibly by storing it in the Patprog
Here's a patch that does this. The speed with this patch is back to
approximately the same as 4.0.6 on 20 repeats of processing the same
string, plus I think I caught a few more places that should have been
using METAINC().
Line numbers may be off slightly due to the state of the CVS sandbox in
which I was working.
Index: Src/zsh.h
===================================================================
RCS file: /extra/cvsroot/zsh/zsh-4.0/Src/zsh.h,v
retrieving revision 1.26
diff -c -r1.26 zsh.h
--- Src/zsh.h 14 Apr 2005 04:33:51 -0000 1.26
+++ Src/zsh.h 23 Apr 2005 18:15:03 -0000
@@ -1113,6 +1124,12 @@
int flags; /* PAT_* flags */
int patnpar; /* number of active parentheses */
char patstartch;
+ /* The following is for optimization of repeated comparisons against
+ * The same target string.
+ */
+ char * repeatstr;
+ long unmetalen;
+ long unmetalenp;
};
/* Flags used in pattern matchers (Patprog) and passed down to patcompile */
Index: Src/pattern.c
===================================================================
RCS file: /extra/cvsroot/zsh/zsh-4.0/Src/pattern.c,v
retrieving revision 1.11
diff -c -r1.11 pattern.c
--- Src/pattern.c 6 Dec 2004 16:51:18 -0000 1.11
+++ Src/pattern.c 23 Apr 2005 19:35:10 -0000
@@ -463,6 +463,8 @@
p->size = patsize;
p->patmlen = len;
p->patnpar = patnpar-1;
+ p->repeatstr = 0;
+ p->unmetalen = p->unmetalenp = 0;
if (!strp) {
pscan = (Upat)(patout + startoff);
@@ -1564,11 +1566,16 @@
needfullpath = (patflags & PAT_HAS_EXCLUDP) && pathpos;
/* Get the length of the full string when unmetafied. */
- unmetalen = ztrsub(string + stringlen, string);
- if (needfullpath)
- unmetalenp = ztrsub(pathbuf + pathpos, pathbuf);
- else
- unmetalenp = 0;
+ if (prog->repeatstr) {
+ unmetalen = prog->unmetalen;
+ unmetalenp = prog->unmetalenp;
+ } else {
+ unmetalen = ztrsub(string + stringlen, string);
+ if (needfullpath)
+ unmetalenp = ztrsub(pathbuf + pathpos, pathbuf);
+ else
+ unmetalenp = 0;
+ }
DPUTS(needfullpath && (patflags & (PAT_PURES|PAT_ANY)),
"rum sort of file exclusion");
Index: Src/glob.c
===================================================================
RCS file: /extra/cvsroot/zsh/zsh-4.0/Src/glob.c,v
retrieving revision 1.17
diff -c -r1.17 glob.c
--- Src/glob.c 26 Mar 2005 16:14:05 -0000 1.17
+++ Src/glob.c 24 Apr 2005 00:33:47 -0000
@@ -2218,6 +2218,30 @@
}
/**/
+static void
+set_pat_repeat(Patprog p, char *string, int stringlen)
+{
+ int needfullpath = (p->flags & PAT_HAS_EXCLUDP) && pathpos;
+
+ p->repeatstr = string;
+ if (!string) {
+ p->unmetalen = p->unmetalenp = 0;
+ return;
+ }
+ if (stringlen < 0)
+ stringlen = strlen(string);
+
+ p->unmetalen = ztrsub(string + stringlen, string);
+ if (needfullpath)
+ p->unmetalenp = ztrsub(pathbuf + pathpos, pathbuf);
+ else
+ p->unmetalenp = 0;
+}
+
+#define PATDECR(p) (p->unmetalen--)
+#define PATINCR(p) (p->unmetalen++)
+
+/**/
static int
igetmatch(char **sp, Patprog p, int fl, int n, char *replstr)
{
@@ -2273,13 +2297,15 @@
* ... now we know whether it's worth looking for the
* shortest, which we do by brute force.
*/
- for (t = s; t < s + mlen; METAINC(t)) {
+ set_pat_repeat(p, s, 0);
+ for (t = s; t < s + mlen; METAINC(t), PATINCR(p)) {
set_pat_end(p, *t);
if (pattrylen(p, s, t - s, 0)) {
mlen = patmatchlen();
break;
}
}
+ set_pat_repeat(p, 0, 0);
}
*sp = get_match_ret(*sp, 0, mlen, fl, replstr);
return 1;
@@ -2290,30 +2316,38 @@
/* Smallest possible match at tail of string: *
* move back down string until we get a match. *
* There's no optimization here. */
- for (ioff = ml, t = s + l; t >= s; t--, ioff--) {
+ set_pat_repeat(p, (t = s + l), -1);
+ for (ioff = ml; t >= s; t--, PATINCR(p), ioff--) {
+ if (t > s && t[-1] == Meta)
+ t--;
set_pat_start(p, t-s);
if (pattrylen(p, t, -1, ioff)) {
*sp = get_match_ret(*sp, t - s, l, fl, replstr);
+ set_pat_repeat(p, 0, 0);
return 1;
}
if (t > s+1 && t[-2] == Meta)
t--;
}
+ set_pat_repeat(p, 0, 0);
break;
case (SUB_END|SUB_LONG):
/* Largest possible match at tail of string: *
* move forward along string until we get a match. *
* Again there's no optimisation. */
- for (ioff = 0, t = s; t < s + l; ioff++, t++) {
+ set_pat_repeat(p, (t = s), -1);
+ for (ioff = 0; t < s + l; ioff++, METAINC(t), PATDECR(p)) {
set_pat_start(p, t-s);
if (pattrylen(p, t, -1, ioff)) {
*sp = get_match_ret(*sp, t-s, l, fl, replstr);
+ set_pat_repeat(p, 0, 0);
return 1;
}
if (*t == Meta)
t++;
}
+ set_pat_repeat(p, 0, 0);
break;
case SUB_SUBSTR:
@@ -2332,20 +2366,24 @@
do {
/* loop over all matches for global substitution */
matched = 0;
- for (; t < s + l; t++, ioff++) {
+ set_pat_repeat(p, t, -1);
+ for (; t < s + l; METAINC(t), PATDECR(p), ioff++) {
/* Find the longest match from this position. */
set_pat_start(p, t-s);
if (pattrylen(p, t, -1, ioff)) {
char *mpos = t + patmatchlen();
if (!(fl & SUB_LONG) && !(p->flags & PAT_PURES)) {
char *ptr;
- for (ptr = t; ptr < mpos; METAINC(ptr)) {
+ set_pat_repeat(p, t, 0);
+ for (ptr = t; ptr < mpos;
+ METAINC(ptr), PATINCR(p)) {
set_pat_end(p, *ptr);
if (pattrylen(p, t, ptr - t, ioff)) {
mpos = t + patmatchlen();
break;
}
}
+ set_pat_repeat(p, t, -1);
}
if (!--n || (n <= 0 && (fl & SUB_GLOBAL))) {
*sp = get_match_ret(*sp, t-s, mpos-s, fl, replstr);
@@ -2362,6 +2400,7 @@
*/
continue;
} else {
+ set_pat_repeat(p, 0, 0);
return 1;
}
}
@@ -2379,6 +2418,7 @@
t++;
}
} while (matched);
+ set_pat_repeat(p, 0, 0);
/*
* check if we can match a blank string, if so do it
* at the start. Goodness knows if this is a good idea
@@ -2402,7 +2442,8 @@
return 1;
}
}
- for (ioff = ml - 1, t = s + l - 1; t >= s; t--, ioff--) {
+ set_pat_repeat(p, (t = s + l - 1), -1);
+ for (ioff = ml - 1; t >= s; --t, PATINCR(p), ioff--) {
if (t > s && t[-1] == Meta)
t--;
set_pat_start(p, t-s);
@@ -2411,7 +2452,9 @@
char *mpos = t + patmatchlen();
if (!(fl & SUB_LONG) && !(p->flags & PAT_PURES)) {
char *ptr;
- for (ptr = t; ptr < mpos; METAINC(ptr)) {
+ set_pat_repeat(p, t, 0);
+ for (ptr = t; ptr < mpos;
+ METAINC(ptr), PATINCR(p)) {
set_pat_end(p, *ptr);
if (pattrylen(p, t, ptr - t, ioff)) {
mpos = t + patmatchlen();
@@ -2420,9 +2463,11 @@
}
}
*sp = get_match_ret(*sp, t-s, mpos-s, fl, replstr);
+ set_pat_repeat(p, 0, 0);
return 1;
}
}
+ set_pat_repeat(p, 0, 0);
set_pat_start(p, l);
if ((fl & SUB_LONG) && pattrylen(p, s + l, -1, ml) && !--n) {
*sp = get_match_ret(*sp, l, l, fl, replstr);
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-24 0:47 ` PATCH: " Bart Schaefer
@ 2005-04-24 3:32 ` Bart Schaefer
2005-04-24 16:46 ` Bart Schaefer
0 siblings, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 2005-04-24 3:32 UTC (permalink / raw)
To: zsh-workers
On Apr 24, 1:33am, Peter Stephenson wrote:
}
} The simplest thing to do is to pass an extra argument to pattrylen().
On Apr 24, 12:47am, Bart Schaefer wrote:
}
} Here's a patch that does this [by storing it in the Patprog]
} plus I think I caught a few more places that should have been
} using METAINC().
I agree Peter's solution is simpler, but I think it ought to get merged
with my extra METAINC()s and related changes. Maybe the needfullpath
part of mine is irrelevant.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: replacement slowdown
2005-04-24 3:32 ` Bart Schaefer
@ 2005-04-24 16:46 ` Bart Schaefer
0 siblings, 0 replies; 11+ messages in thread
From: Bart Schaefer @ 2005-04-24 16:46 UTC (permalink / raw)
To: zsh-workers
On Apr 24, 3:32am, Bart Schaefer wrote:
}
} I agree Peter's solution is simpler, but I think it ought to get merged
} with my extra METAINC()s and related changes.
Here's that patch:
Index: Src/glob.c
--- ../zsh-forge/current/Src/glob.c Sun Apr 24 09:22:59 2005
+++ Src/glob.c Sun Apr 24 09:41:32 2005
@@ -2293,6 +2293,8 @@
* There's no optimization here. */
for (ioff = uml, t = s + l, umlen = 0; t >= s;
t--, ioff--, umlen++) {
+ if (t > s && t[-1] == Meta)
+ t--;
set_pat_start(p, t-s);
if (pattrylen(p, t, s + l - t, umlen, ioff)) {
*sp = get_match_ret(*sp, t - s, l, fl, replstr);
@@ -2308,7 +2310,7 @@
* move forward along string until we get a match. *
* Again there's no optimisation. */
for (ioff = 0, t = s, umlen = uml; t < s + l;
- ioff++, t++, umlen--) {
+ ioff++, METAINC(t), umlen--) {
set_pat_start(p, t-s);
if (pattrylen(p, t, s + l - t, umlen, ioff)) {
*sp = get_match_ret(*sp, t-s, l, fl, replstr);
@@ -2336,7 +2338,7 @@
do {
/* loop over all matches for global substitution */
matched = 0;
- for (; t < s + l; t++, ioff++, umlen--) {
+ for (; t < s + l; METAINC(t), ioff++, umlen--) {
/* Find the longest match from this position. */
set_pat_start(p, t-s);
if (pattrylen(p, t, s + l - t, umlen, ioff)) {
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2005-04-24 16:47 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-04-22 23:23 replacement slowdown Clint Adams
2005-04-23 3:14 ` Bart Schaefer
2005-04-23 3:19 ` Clint Adams
2005-04-23 16:07 ` Bart Schaefer
2005-04-23 16:26 ` Clint Adams
2005-04-23 17:12 ` Bart Schaefer
2005-04-24 0:33 ` Peter Stephenson
2005-04-24 0:47 ` PATCH: " Bart Schaefer
2005-04-24 3:32 ` Bart Schaefer
2005-04-24 16:46 ` Bart Schaefer
2005-04-23 16:25 ` 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).