From 3cb58fd7d7b9e42067ffcf24892114dc2c9b26e4 Mon Sep 17 00:00:00 2001 From: Sebastian Gniazdowski Date: Thu, 11 Feb 2016 16:48:53 +0100 Subject: [PATCH] Optimization: -1 is extra computation of string length internally ./parse.zsh "zplugin.zsh" > out_norm.txt 106,17s user 7,84s system 98% cpu 1:55,85 total ./parse.zsh "zplugin.zsh" > out_opt.txt 51,91s user 7,44s system 99% cpu 59,912 total % wc -l zplugin.zsh 3188 zplugin.zsh --- highlighters/main/main-highlighter.zsh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index 6312521..43163a7 100644 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -125,6 +125,7 @@ _zsh_highlight_main_highlighter() typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW local -a options_to_set # used in callees local buf="$PREBUFFER$BUFFER" + integer len="${#buf}" region_highlight=() if (( path_dirs_was_set )); then @@ -234,11 +235,13 @@ _zsh_highlight_main_highlighter() # indistinguishable from 'echo foo echo bar' (one command with three # words for arguments). local needle=$'[;\n]' - integer offset=${${buf[start_pos+1,-1]}[(i)$needle]} + # Len-start_pos drops one character, but it should do it, as start_pos + # starts from next, not from "start_pos", character + integer offset=${${buf: start_pos: len-start_pos}[(i)$needle]} (( start_pos += offset - 1 )) (( end_pos = start_pos + $#arg )) else - ((start_pos+=${#buf[$start_pos+1,-1]}-${#${buf[$start_pos+1,-1]##([[:space:]]|\\[[:space:]])#}})) + ((start_pos+=(len-start_pos)-${#${${buf: start_pos: len-start_pos}##([[:space:]]|\\[[:space:]])#}})) ((end_pos=$start_pos+${#arg})) fi