diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/codeparser.py | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/bitbake/lib/bb/codeparser.py b/bitbake/lib/bb/codeparser.py index a50b9f268a..de8d2eb08d 100644 --- a/bitbake/lib/bb/codeparser.py +++ b/bitbake/lib/bb/codeparser.py | |||
@@ -35,7 +35,7 @@ def check_indent(codestr): | |||
35 | 35 | ||
36 | class CodeParserCache(MultiProcessCache): | 36 | class CodeParserCache(MultiProcessCache): |
37 | cache_file_name = "bb_codeparser.dat" | 37 | cache_file_name = "bb_codeparser.dat" |
38 | CACHE_VERSION = 4 | 38 | CACHE_VERSION = 5 |
39 | 39 | ||
40 | def __init__(self): | 40 | def __init__(self): |
41 | MultiProcessCache.__init__(self) | 41 | MultiProcessCache.__init__(self) |
@@ -217,6 +217,15 @@ class ShellParser(): | |||
217 | self.execs = codeparsercache.shellcacheextras[h]["execs"] | 217 | self.execs = codeparsercache.shellcacheextras[h]["execs"] |
218 | return self.execs | 218 | return self.execs |
219 | 219 | ||
220 | self._parse_shell(value) | ||
221 | self.execs = set(cmd for cmd in self.allexecs if cmd not in self.funcdefs) | ||
222 | |||
223 | codeparsercache.shellcacheextras[h] = {} | ||
224 | codeparsercache.shellcacheextras[h]["execs"] = self.execs | ||
225 | |||
226 | return self.execs | ||
227 | |||
228 | def _parse_shell(self, value): | ||
220 | try: | 229 | try: |
221 | tokens, _ = pyshyacc.parse(value, eof=True, debug=False) | 230 | tokens, _ = pyshyacc.parse(value, eof=True, debug=False) |
222 | except pyshlex.NeedMore: | 231 | except pyshlex.NeedMore: |
@@ -224,12 +233,6 @@ class ShellParser(): | |||
224 | 233 | ||
225 | for token in tokens: | 234 | for token in tokens: |
226 | self.process_tokens(token) | 235 | self.process_tokens(token) |
227 | self.execs = set(cmd for cmd in self.allexecs if cmd not in self.funcdefs) | ||
228 | |||
229 | codeparsercache.shellcacheextras[h] = {} | ||
230 | codeparsercache.shellcacheextras[h]["execs"] = self.execs | ||
231 | |||
232 | return self.execs | ||
233 | 236 | ||
234 | def process_tokens(self, tokens): | 237 | def process_tokens(self, tokens): |
235 | """Process a supplied portion of the syntax tree as returned by | 238 | """Process a supplied portion of the syntax tree as returned by |
@@ -303,7 +306,7 @@ class ShellParser(): | |||
303 | 306 | ||
304 | if part[0] in ('`', '$('): | 307 | if part[0] in ('`', '$('): |
305 | command = pyshlex.wordtree_as_string(part[1:-1]) | 308 | command = pyshlex.wordtree_as_string(part[1:-1]) |
306 | self.parse_shell(command) | 309 | self._parse_shell(command) |
307 | 310 | ||
308 | if word[0] in ("cmd_name", "cmd_word"): | 311 | if word[0] in ("cmd_name", "cmd_word"): |
309 | if word in words: | 312 | if word in words: |
@@ -322,7 +325,7 @@ class ShellParser(): | |||
322 | self.log.debug(1, self.unhandled_template % cmd) | 325 | self.log.debug(1, self.unhandled_template % cmd) |
323 | elif cmd == "eval": | 326 | elif cmd == "eval": |
324 | command = " ".join(word for _, word in words[1:]) | 327 | command = " ".join(word for _, word in words[1:]) |
325 | self.parse_shell(command) | 328 | self._parse_shell(command) |
326 | else: | 329 | else: |
327 | self.allexecs.add(cmd) | 330 | self.allexecs.add(cmd) |
328 | break | 331 | break |