From 391aa4afc91be90d8d3ee47e1bf797d6ebe61a71 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 9 Feb 2016 15:10:56 +0000 Subject: [PATCH] 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 --- lib/bb/parse/ast.py | 43 +++++++++++------------------- lib/bb/parse/parse_py/BBHandler.py | 5 ++-- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py index c676fc6bc81..5f55af5ef8a 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 97a9ee8dac0..ef72c3700f5 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) -- 2.47.3