Skip to content

Commit 9234150

Browse files
committed
py: use pre-compiled regexps
1 parent e190e30 commit 9234150

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

py/vimlfunc.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ class AttributeDict(dict):
8585
"^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
8686
}
8787

88+
_pat_compiled = {}
89+
8890
def viml_add(lst, item):
8991
lst.append(item)
9092

@@ -100,14 +102,23 @@ def viml_empty(obj):
100102
def viml_equalci(a, b):
101103
return a.lower() == b.lower()
102104

105+
def _get_compiled_pat(reg, flags):
106+
key = (reg, flags)
107+
try:
108+
return _pat_compiled[key]
109+
except KeyError:
110+
pat = re.compile(reg, flags)
111+
_pat_compiled[key] = pat
112+
return pat
113+
103114
def viml_eqreg(s, reg):
104-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
115+
return _get_compiled_pat(reg, re.IGNORECASE).search(s)
105116

106117
def viml_eqregh(s, reg):
107-
return re.search(pat_vim2py[reg], s)
118+
return _get_compiled_pat(reg, 0).search(s)
108119

109120
def viml_eqregq(s, reg):
110-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
121+
return _get_compiled_pat(reg, re.IGNORECASE).search(s)
111122

112123
def viml_escape(s, chars):
113124
r = ''

py/vimlparser.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ class AttributeDict(dict):
8585
"^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
8686
}
8787

88+
_pat_compiled = {}
89+
8890
def viml_add(lst, item):
8991
lst.append(item)
9092

@@ -100,14 +102,23 @@ def viml_empty(obj):
100102
def viml_equalci(a, b):
101103
return a.lower() == b.lower()
102104

105+
def _get_compiled_pat(reg, flags):
106+
key = (reg, flags)
107+
try:
108+
return _pat_compiled[key]
109+
except KeyError:
110+
pat = re.compile(pat_vim2py[reg], flags)
111+
_pat_compiled[key] = pat
112+
return pat
113+
103114
def viml_eqreg(s, reg):
104-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
115+
return _get_compiled_pat(reg, re.IGNORECASE).search(s)
105116

106117
def viml_eqregh(s, reg):
107-
return re.search(pat_vim2py[reg], s)
118+
return _get_compiled_pat(reg, 0).search(s)
108119

109120
def viml_eqregq(s, reg):
110-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
121+
return _get_compiled_pat(reg, re.IGNORECASE).search(s)
111122

112123
def viml_escape(s, chars):
113124
r = ''

0 commit comments

Comments
 (0)