diff options
author | Jacob Kroon <jacob.kroon@mikrodidakt.se> | 2014-02-22 17:52:29 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-02-24 12:42:40 +0000 |
commit | f5a344441ac9a6e2d829948050a1ba4c118c3ef5 (patch) | |
tree | 06d2e76b28d18df00262062f593b4cfde32e5c91 /bitbake | |
parent | 2b7edd5d15592ddda0ca91c95d7ad18f5a030a85 (diff) | |
download | poky-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')
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 4 |
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 | ||
141 | class MethodNode(AstNode): | 141 | class 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 [] |