diff options
Diffstat (limited to 'bitbake/lib/bb/parse')
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index 11db1801b3..e1bf82fe90 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py | |||
@@ -148,17 +148,19 @@ class MethodNode(AstNode): | |||
148 | 148 | ||
149 | def eval(self, data): | 149 | def eval(self, data): |
150 | text = '\n'.join(self.body) | 150 | text = '\n'.join(self.body) |
151 | funcname = self.func_name | ||
151 | if self.func_name == "__anonymous": | 152 | if self.func_name == "__anonymous": |
152 | funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl))) | 153 | funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl))) |
153 | text = "def %s(d):\n" % (funcname) + text | 154 | text = "def %s(d):\n" % (funcname) + text |
154 | bb.methodpool.insert_method(funcname, text, self.filename) | 155 | bb.methodpool.insert_method(funcname, text, self.filename, self.lineno - len(self.body)) |
155 | anonfuncs = data.getVar('__BBANONFUNCS', False) or [] | 156 | anonfuncs = data.getVar('__BBANONFUNCS', False) or [] |
156 | anonfuncs.append(funcname) | 157 | anonfuncs.append(funcname) |
157 | data.setVar('__BBANONFUNCS', anonfuncs) | 158 | data.setVar('__BBANONFUNCS', anonfuncs) |
158 | data.setVar(funcname, text, parsing=True) | ||
159 | else: | 159 | else: |
160 | data.setVarFlag(self.func_name, "func", 1) | 160 | data.setVarFlag(self.func_name, "func", 1) |
161 | data.setVar(self.func_name, text, parsing=True) | 161 | data.setVar(funcname, text, parsing=True) |
162 | data.setVarFlag(funcname, 'filename', self.filename) | ||
163 | data.setVarFlag(funcname, 'lineno', str(self.lineno - len(self.body))) | ||
162 | 164 | ||
163 | class PythonMethodNode(AstNode): | 165 | class PythonMethodNode(AstNode): |
164 | def __init__(self, filename, lineno, function, modulename, body): | 166 | def __init__(self, filename, lineno, function, modulename, body): |
@@ -172,10 +174,12 @@ class PythonMethodNode(AstNode): | |||
172 | # 'this' file. This means we will not parse methods from | 174 | # 'this' file. This means we will not parse methods from |
173 | # bb classes twice | 175 | # bb classes twice |
174 | text = '\n'.join(self.body) | 176 | text = '\n'.join(self.body) |
175 | bb.methodpool.insert_method(self.modulename, text, self.filename) | 177 | bb.methodpool.insert_method(self.modulename, text, self.filename, self.lineno - len(self.body) - 1) |
176 | data.setVarFlag(self.function, "func", 1) | 178 | data.setVarFlag(self.function, "func", 1) |
177 | data.setVarFlag(self.function, "python", 1) | 179 | data.setVarFlag(self.function, "python", 1) |
178 | data.setVar(self.function, text, parsing=True) | 180 | data.setVar(self.function, text, parsing=True) |
181 | data.setVarFlag(self.function, 'filename', self.filename) | ||
182 | data.setVarFlag(self.function, 'lineno', str(self.lineno - len(self.body) - 1)) | ||
179 | 183 | ||
180 | class MethodFlagsNode(AstNode): | 184 | class MethodFlagsNode(AstNode): |
181 | def __init__(self, filename, lineno, key, m): | 185 | def __init__(self, filename, lineno, key, m): |
@@ -317,7 +321,9 @@ def finalize(fn, d, variant = None): | |||
317 | all_handlers = {} | 321 | all_handlers = {} |
318 | for var in d.getVar('__BBHANDLERS', False) or []: | 322 | for var in d.getVar('__BBHANDLERS', False) or []: |
319 | # try to add the handler | 323 | # try to add the handler |
320 | bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask", True) or "").split()) | 324 | handlerfn = d.getVarFlag(var, "filename", False) |
325 | handlerln = int(d.getVarFlag(var, "lineno", False)) | ||
326 | bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask", True) or "").split(), handlerfn, handlerln) | ||
321 | 327 | ||
322 | bb.event.fire(bb.event.RecipePreFinalise(fn), d) | 328 | bb.event.fire(bb.event.RecipePreFinalise(fn), d) |
323 | 329 | ||