Skip to content

Commit e8b4d5f

Browse files
committed
Performance boost: reduce instantiations of re.Scanner
- Lexer is the same for every Spec parser in spack, so don't build it every time. - This improves time to import package.py files a lot, as a Lexer doesn't have to be constructed for every spc in the packages. - To concretize dealii: - Before: ~20 sec - After: ~6 sec
1 parent 6dcdb50 commit e8b4d5f

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

lib/spack/spack/spec.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2015,10 +2015,13 @@ def __init__(self):
20152015
(r'\s+', lambda scanner, val: None)])
20162016

20172017

2018+
# Lexer is always the same for every parser.
2019+
_lexer = SpecLexer()
2020+
20182021
class SpecParser(spack.parse.Parser):
20192022

20202023
def __init__(self):
2021-
super(SpecParser, self).__init__(SpecLexer())
2024+
super(SpecParser, self).__init__(_lexer)
20222025
self.previous = None
20232026

20242027
def do_parse(self):

0 commit comments

Comments
 (0)