aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb/parse/parse_py/BBHandler.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-12-20 13:21:14 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-12-22 00:01:48 +0000
commite0f05871c2a6f1e86ae19ad343c7c6f822ddb67e (patch)
treee64170cc204534a38c35dfa3884b2fa1da964543 /lib/bb/parse/parse_py/BBHandler.py
parent0fd04ede3fda6894d97a5ef830b79dbbc9c6cf51 (diff)
downloadbitbake-e0f05871c2a6f1e86ae19ad343c7c6f822ddb67e.tar.gz
BBHandler: Improve IN_PYTHON_EOF handling
Now we're actively using the line numbers for other thins, having magic values like IN_PYTHON_EOF causes problems, in particular, 32 bit overflow on 32 bit machines. There is a neater way to signal eof to feeder(), just using an extra parameter so use this instead and drop the IN_PYTHON_EOF magic values. This has the added bonus that line numbers are then correct for python functions at the end of files. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/parse/parse_py/BBHandler.py')
-rw-r--r--lib/bb/parse/parse_py/BBHandler.py18
1 files changed, 4 insertions, 14 deletions
diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py
index ec097baf7..97a9ee8da 100644
--- a/lib/bb/parse/parse_py/BBHandler.py
+++ b/lib/bb/parse/parse_py/BBHandler.py
@@ -47,7 +47,6 @@ __addhandler_regexp__ = re.compile( r"addhandler\s+(.+)" )
__def_regexp__ = re.compile( r"def\s+(\w+).*:" )
__python_func_regexp__ = re.compile( r"(\s+.*)|(^$)" )
-
__infunc__ = []
__inpython__ = False
__body__ = []
@@ -55,15 +54,6 @@ __classname__ = ""
cached_statements = {}
-# We need to indicate EOF to the feeder. This code is so messy that
-# factoring it out to a close_parse_file method is out of question.
-# We will use the IN_PYTHON_EOF as an indicator to just close the method
-#
-# The two parts using it are tightly integrated anyway
-IN_PYTHON_EOF = -9999999999999
-
-
-
def supports(fn, d):
"""Return True if fn has a supported extension"""
return os.path.splitext(fn)[-1] in [".bb", ".bbclass", ".inc"]
@@ -110,7 +100,7 @@ def get_statements(filename, absolute_filename, base_name):
file.close()
if __inpython__:
# add a blank line to close out any python definition
- feeder(IN_PYTHON_EOF, "", filename, base_name, statements)
+ feeder(lineno, "", filename, base_name, statements, eof=True)
if filename.endswith(".bbclass") or filename.endswith(".inc"):
cached_statements[absolute_filename] = statements
@@ -171,7 +161,7 @@ def handle(fn, d, include):
return d
-def feeder(lineno, s, fn, root, statements):
+def feeder(lineno, s, fn, root, statements, eof=False):
global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __def_regexp__, __python_func_regexp__, __inpython__, __infunc__, __body__, bb, __residue__, __classname__
if __infunc__:
if s == '}':
@@ -185,7 +175,7 @@ def feeder(lineno, s, fn, root, statements):
if __inpython__:
m = __python_func_regexp__.match(s)
- if m and lineno != IN_PYTHON_EOF:
+ if m and not eof:
__body__.append(s)
return
else:
@@ -194,7 +184,7 @@ def feeder(lineno, s, fn, root, statements):
__body__ = []
__inpython__ = False
- if lineno == IN_PYTHON_EOF:
+ if eof:
return
if s and s[0] == '#':