'main': Further optimize argument parsing.
% repeat 3 { zsh -f tests/test-zprof.zsh main | tee … | grep -w _zsh_highlight | head -n1 }
18)    1       26895.86 26895.86  100.00%      6.35     6.35    0.02%  _zsh_highlight
19)    1       27399.11 27399.11  100.00%      5.52     5.52    0.02%  _zsh_highlight
19)    1       27027.58 27027.58  100.00%      5.66     5.66    0.02%  _zsh_highlight
----
This commit has been rebased.  The above statistics were measured after
the rebase.  The below statistics had been measured before the rebase.
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    3       25689.17  8563.06   98.15%  18422.01  6140.67   70.38%  _zsh_highlight_main_highlighter_highlight_list
 2) 32390        5706.13     0.18   21.80%   2315.68     0.07    8.85%  _zsh_highlight_main_highlighter_highlight_argument
19)    1       26173.33 26173.33  100.00%      5.27     5.27    0.02%  _zsh_highlight
Interestingly, if I make the change in this diff to
_zsh_highlight_main_highlighter_highlight_double_quote —
>     diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh
>     index da6ab2b..bb17618 100644
>     --- a/highlighters/main/main-highlighter.zsh
>     +++ b/highlighters/main/main-highlighter.zsh
>     @@ -1462,10 +1462,13 @@ _zsh_highlight_main_highlighter_highlight_double_quote()
>        local i j k ret style
>        reply=()
>
>     -  for (( i = $1 + 1 ; i <= $#arg ; i += 1 )) ; do
>     +  (( i = $1 ))
>     +  while (( ++i <= $#arg )); do
>     +    i=${arg[(ib.i.)[\"\`\$\\\\${histchars[1]}]]}
>          (( j = i + start_pos - 1 ))
>          (( k = j + 1 ))
>          case "$arg[$i]" in
>     +      ("")  break;;
>            ('"') break;;
>            ('`') saved_reply=($reply)
>                  _zsh_highlight_main_highlighter_highlight_backtick $i
— it actually makes things measurably slower (!), even on input that has
a large number of pasted double-quoted strings: on «BUFFER=": ${(r.8*1500..foo"bar".):-}"»
the slowdown is (1123.24ms / 1091.06ms = 1.0295).  Therefore, I won't be
committing that change.
			
			
This commit is contained in:
		
							parent
							
								
									700c0e18fe
								
							
						
					
					
						commit
						8f5d74d219
					
				|  | @ -1312,12 +1312,11 @@ _zsh_highlight_main_highlighter_highlight_argument() | ||||||
|   esac |   esac | ||||||
| 
 | 
 | ||||||
|   # This loop is a hot path.  Keep it fast! |   # This loop is a hot path.  Keep it fast! | ||||||
|   for (( ; i <= $#arg ; i += 1 )); do |   (( --i )) | ||||||
|     if [[ $arg[$i] != [\\\'\"\`\$\<\>\*\?] ]]; then |   while (( ++i <= $#arg )); do | ||||||
|       continue |     i=${arg[(ib.i.)[\\\'\"\`\$\<\>\*\?]]} | ||||||
|     fi |  | ||||||
| 
 |  | ||||||
|     case "$arg[$i]" in |     case "$arg[$i]" in | ||||||
|  |       "") break;; | ||||||
|       "\\") (( i += 1 )); continue;; |       "\\") (( i += 1 )); continue;; | ||||||
|       "'") |       "'") | ||||||
|         _zsh_highlight_main_highlighter_highlight_single_quote $i |         _zsh_highlight_main_highlighter_highlight_single_quote $i | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue