aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb/parse
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2016-02-09 15:10:56 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-02-10 13:31:27 +0000
commit391aa4afc91be90d8d3ee47e1bf797d6ebe61a71 (patch)
treecf9af750a11ea117c151bd1c6ee450483a4d2f43 /lib/bb/parse
parent918bec86bc8ee94feb82380ff410d9fdcbe9e720 (diff)
downloadbitbake-391aa4afc91be90d8d3ee47e1bf797d6ebe61a71.tar.gz
BBHandler/ast: Merge handMethod and handleMethodFlags
The functionality overlap between these two functions is significant and its clearer to handle both things together since they are intimately linked. There should be no behaviour change, just clearer code. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/parse')
-rw-r--r--lib/bb/parse/ast.py43
-rw-r--r--lib/bb/parse/parse_py/BBHandler.py5
2 files changed, 17 insertions, 31 deletions
diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py
index c676fc6bc..5f55af5ef 100644
--- a/lib/bb/parse/ast.py
+++ b/lib/bb/parse/ast.py
@@ -141,22 +141,33 @@ class DataNode(AstNode):
class MethodNode(AstNode):
tr_tbl = string.maketrans('/.+-@%&', '_______')
- def __init__(self, filename, lineno, func_name, body):
+ def __init__(self, filename, lineno, func_name, body, python, fakeroot):
AstNode.__init__(self, filename, lineno)
self.func_name = func_name
self.body = body
+ self.python = python
+ self.fakeroot = fakeroot
def eval(self, data):
text = '\n'.join(self.body)
funcname = self.func_name
if self.func_name == "__anonymous":
funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl)))
+ self.python = True
text = "def %s(d):\n" % (funcname) + text
bb.methodpool.insert_method(funcname, text, self.filename, self.lineno - len(self.body))
anonfuncs = data.getVar('__BBANONFUNCS', False) or []
anonfuncs.append(funcname)
data.setVar('__BBANONFUNCS', anonfuncs)
- data.setVarFlag(funcname, "python", 1)
+ if data.getVar(funcname, False):
+ # clean up old version of this piece of metadata, as its
+ # flags could cause problems
+ data.delVarFlag(funcname, 'python')
+ data.delVarFlag(funcname, 'fakeroot')
+ if self.python:
+ data.setVarFlag(funcname, "python", "1")
+ if self.fakeroot:
+ data.setVarFlag(funcname, "fakeroot", "1")
data.setVarFlag(funcname, "func", 1)
data.setVar(funcname, text, parsing=True)
data.setVarFlag(funcname, 'filename', self.filename)
@@ -181,27 +192,6 @@ class PythonMethodNode(AstNode):
data.setVarFlag(self.function, 'filename', self.filename)
data.setVarFlag(self.function, 'lineno', str(self.lineno - len(self.body) - 1))
-class MethodFlagsNode(AstNode):
- def __init__(self, filename, lineno, key, m):
- AstNode.__init__(self, filename, lineno)
- self.key = key
- self.m = m
-
- def eval(self, data):
- if data.getVar(self.key, False):
- # clean up old version of this piece of metadata, as its
- # flags could cause problems
- data.setVarFlag(self.key, 'python', None)
- data.setVarFlag(self.key, 'fakeroot', None)
- if self.m.group("py") is not None:
- data.setVarFlag(self.key, "python", "1")
- else:
- data.delVarFlag(self.key, "python")
- if self.m.group("fr") is not None:
- data.setVarFlag(self.key, "fakeroot", "1")
- else:
- data.delVarFlag(self.key, "fakeroot")
-
class ExportFuncsNode(AstNode):
def __init__(self, filename, lineno, fns, classname):
AstNode.__init__(self, filename, lineno)
@@ -284,15 +274,12 @@ def handleExport(statements, filename, lineno, m):
def handleData(statements, filename, lineno, groupd):
statements.append(DataNode(filename, lineno, groupd))
-def handleMethod(statements, filename, lineno, func_name, body):
- statements.append(MethodNode(filename, lineno, func_name, body))
+def handleMethod(statements, filename, lineno, func_name, body, python, fakeroot):
+ statements.append(MethodNode(filename, lineno, func_name, body, python, fakeroot))
def handlePythonMethod(statements, filename, lineno, funcname, modulename, body):
statements.append(PythonMethodNode(filename, lineno, funcname, modulename, body))
-def handleMethodFlags(statements, filename, lineno, key, m):
- statements.append(MethodFlagsNode(filename, lineno, key, m))
-
def handleExportFuncs(statements, filename, lineno, m, classname):
statements.append(ExportFuncsNode(filename, lineno, m.group(1), classname))
diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py
index 97a9ee8da..ef72c3700 100644
--- a/lib/bb/parse/parse_py/BBHandler.py
+++ b/lib/bb/parse/parse_py/BBHandler.py
@@ -166,7 +166,7 @@ def feeder(lineno, s, fn, root, statements, eof=False):
if __infunc__:
if s == '}':
__body__.append('')
- ast.handleMethod(statements, fn, lineno, __infunc__[0], __body__)
+ ast.handleMethod(statements, fn, lineno, __infunc__[0], __body__, __infunc__[3], __infunc__[4])
__infunc__ = []
__body__ = []
else:
@@ -211,8 +211,7 @@ def feeder(lineno, s, fn, root, statements, eof=False):
m = __func_start_regexp__.match(s)
if m:
- __infunc__ = [m.group("func") or "__anonymous", fn, lineno]
- ast.handleMethodFlags(statements, fn, lineno, __infunc__[0], m)
+ __infunc__ = [m.group("func") or "__anonymous", fn, lineno, m.group("py") is not None, m.group("fr") is not None]
return
m = __def_regexp__.match(s)