summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/parse/ast.py
diff options
context:
space:
mode:
authorJacob Kroon <jacob.kroon@mikrodidakt.se>2014-02-22 17:52:29 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-02-24 12:42:40 +0000
commitf5a344441ac9a6e2d829948050a1ba4c118c3ef5 (patch)
tree06d2e76b28d18df00262062f593b4cfde32e5c91 /bitbake/lib/bb/parse/ast.py
parent2b7edd5d15592ddda0ca91c95d7ad18f5a030a85 (diff)
downloadpoky-f5a344441ac9a6e2d829948050a1ba4c118c3ef5.tar.gz
bitbake: ast: Fix support for anonymous methods in wildcard .bbappend files
When using wildcard .bbappend files with anonymous methods in them, bitbake/python fails to parse the generated code since the '%' is encoded in the generated method name. Fix this by including '%' in the convert-to-underscore list during method name mangling. While we're at it, move the method name mangling translation table to a class variable, as suggested by Chris Larson. [YOCTO #5864] (Bitbake rev: 537f1f9bbe110acc9848ef95f43468c07d87af79) Signed-off-by: Jacob Kroon <jacob.kroon@mikrodidakt.se> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
-rw-r--r--bitbake/lib/bb/parse/ast.py4
1 files changed, 3 insertions, 1 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index a2020532ea..d8c141b37c 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -139,6 +139,8 @@ class DataNode(AstNode):
139 data.setVar(key, val, **loginfo) 139 data.setVar(key, val, **loginfo)
140 140
141class MethodNode(AstNode): 141class MethodNode(AstNode):
142 tr_tbl = string.maketrans('/.+-@%', '______')
143
142 def __init__(self, filename, lineno, func_name, body): 144 def __init__(self, filename, lineno, func_name, body):
143 AstNode.__init__(self, filename, lineno) 145 AstNode.__init__(self, filename, lineno)
144 self.func_name = func_name 146 self.func_name = func_name
@@ -147,7 +149,7 @@ class MethodNode(AstNode):
147 def eval(self, data): 149 def eval(self, data):
148 text = '\n'.join(self.body) 150 text = '\n'.join(self.body)
149 if self.func_name == "__anonymous": 151 if self.func_name == "__anonymous":
150 funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(string.maketrans('/.+-@', '_____')))) 152 funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl)))
151 text = "def %s(d):\n" % (funcname) + text 153 text = "def %s(d):\n" % (funcname) + text
152 bb.methodpool.insert_method(funcname, text, self.filename) 154 bb.methodpool.insert_method(funcname, text, self.filename)
153 anonfuncs = data.getVar('__BBANONFUNCS') or [] 155 anonfuncs = data.getVar('__BBANONFUNCS') or []