'main' / *_check_path: Precompute $#BUFFER and use it for speed gain

Running main highlighter on itself (both runs are on the optimized
version):

- clean (8 runs, last 3 noted):
1.7007670000
1.7330720000
1.7038810000

- optimized (8 runs, last 3 noted):
1.5007230000
1.5142960000
1.4973320000

Average difference: 0.208456

When parsing main-highlighter with itself, the *_check_path function is
called 426 times. Note that there are 686 region_highlight resulting
entries.
This commit is contained in:
Sebastian Gniazdowski 2016-09-25 12:24:40 +02:00
parent a053768627
commit c6b6513ac0

View File

@ -212,6 +212,7 @@ _zsh_highlight_highlighter_main_paint()
local -a options_to_set # used in callees local -a options_to_set # used in callees
local buf="$PREBUFFER$BUFFER" local buf="$PREBUFFER$BUFFER"
integer len="${#buf}" integer len="${#buf}"
integer pure_buf_len=$(( len - ${#PREBUFFER} )) # == $#BUFFER, used e.g. in *_check_path
local braces_stack # "R" for round, "Q" for square, "Y" for curly local braces_stack # "R" for round, "Q" for square, "Y" for curly
@ -701,7 +702,7 @@ _zsh_highlight_main_highlighter_check_path()
[[ ! -d ${expanded_path:h} ]] && return 1 [[ ! -d ${expanded_path:h} ]] && return 1
# If this word ends the buffer, check if it's the prefix of a valid path. # If this word ends the buffer, check if it's the prefix of a valid path.
if [[ ${BUFFER[1]} != "-" && ${#BUFFER} == $end_pos ]] && if [[ ${BUFFER[1]} != "-" && $pure_buf_len == $end_pos ]] &&
[[ $WIDGET != zle-line-finish ]]; then [[ $WIDGET != zle-line-finish ]]; then
local -a tmp local -a tmp
tmp=( ${expanded_path}*(N) ) tmp=( ${expanded_path}*(N) )