Skip to content

Commit 7910ec6

Browse files
committed
py: use pre-compiled regexps
1 parent e407a31 commit 7910ec6

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
@@ -82,6 +82,8 @@ class AttributeDict(dict):
8282
"^[0-7]$" : "^[0-7]$",
8383
}
8484

85+
_pat_compiled = {}
86+
8587
def viml_add(lst, item):
8688
lst.append(item)
8789

@@ -97,14 +99,23 @@ def viml_empty(obj):
9799
def viml_equalci(a, b):
98100
return a.lower() == b.lower()
99101

102+
def _get_compiled_pat(reg, flags):
103+
key = (reg, flags)
104+
try:
105+
return _pat_compiled[key]
106+
except KeyError:
107+
pat = re.compile(reg, flags)
108+
_pat_compiled[key] = pat
109+
return pat
110+
100111
def viml_eqreg(s, reg):
101-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
112+
return _get_compiled_pat(reg, re.IGNORECASE).search(s)
102113

103114
def viml_eqregh(s, reg):
104-
return re.search(pat_vim2py[reg], s)
115+
return _get_compiled_pat(reg, 0).search(s)
105116

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

109120
def viml_escape(s, chars):
110121
r = ''

py/vimlparser.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ class AttributeDict(dict):
8282
"^[0-7]$" : "^[0-7]$",
8383
}
8484

85+
_pat_compiled = {}
86+
8587
def viml_add(lst, item):
8688
lst.append(item)
8789

@@ -97,14 +99,23 @@ def viml_empty(obj):
9799
def viml_equalci(a, b):
98100
return a.lower() == b.lower()
99101

102+
def _get_compiled_pat(reg, flags):
103+
key = (reg, flags)
104+
try:
105+
return _pat_compiled[key]
106+
except KeyError:
107+
pat = re.compile(pat_vim2py[reg], flags)
108+
_pat_compiled[key] = pat
109+
return pat
110+
100111
def viml_eqreg(s, reg):
101-
return re.search(pat_vim2py[reg], s, re.IGNORECASE)
112+
return _get_compiled_pat(reg, re.IGNORECASE).search(s)
102113

103114
def viml_eqregh(s, reg):
104-
return re.search(pat_vim2py[reg], s)
115+
return _get_compiled_pat(reg, 0).search(s)
105116

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

109120
def viml_escape(s, chars):
110121
r = ''

0 commit comments

Comments
 (0)