From 3f415929200c44850b27e70ecafc70c7de4692f4 Mon Sep 17 00:00:00 2001 From: Robert Yang Date: Mon, 8 Jan 2024 23:45:33 -0800 Subject: bitbake: bitbake: event: Inject empty lines to make code match lineno in filename So that we can get the correct error messages. * In python 3.10.9, the error message was: ERROR: Unable to register event handler 'defaultbase_eventhandler': File "/path/to/poky/meta/classes-global/base.bbclass", line 4 # SPDX-License-Identifier: MIT ^^^^^ SyntaxError: invalid syntax This is hard to debug since the error line number 4 is incorrect, but nothing is wrong with the code in line 4. * Now the error message and lineno is correct: ERROR: Unable to register event handler 'defaultbase_eventhandler': File "/path/to/poky/meta/classes-global/base.bbclass", line 256 an error line ^^^^^ SyntaxError: invalid syntax And no impact on parsing time: * Before: $ rm -fr cache tmp; time bitbake -p real 0m27.254s * Now: $ rm -fr cache tmp; time bitbake -p real 0m27.200s (Bitbake rev: c212933d9c786806852c87f188250a4f0a14c048) Signed-off-by: Robert Yang Signed-off-by: Richard Purdie --- bitbake/lib/bb/event.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index f8acacd80d..4761c86880 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -257,14 +257,15 @@ def register(name, handler, mask=None, filename=None, lineno=None, data=None): # handle string containing python code if isinstance(handler, str): tmp = "def %s(e, d):\n%s" % (name, handler) + # Inject empty lines to make code match lineno in filename + if lineno is not None: + tmp = "\n" * (lineno-1) + tmp try: code = bb.methodpool.compile_cache(tmp) if not code: if filename is None: filename = "%s(e, d)" % name code = compile(tmp, filename, "exec", ast.PyCF_ONLY_AST) - if lineno is not None: - ast.increment_lineno(code, lineno-1) code = compile(code, filename, "exec") bb.methodpool.compile_cache_add(tmp, code) except SyntaxError: -- cgit v1.2.3-54-g00ecf