Merge "Show correct line numbers for errors in an $(eval)" am: c49c49a69d

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2374719

Change-Id: I1c6f5fccdddcece10d5ebc54e6323dd801fa567e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Cole Faust 2023-01-06 03:42:11 +00:00 committed by Automerger Merge Worker
commit ee245ec9a1
2 changed files with 17 additions and 0 deletions

View file

@ -1872,6 +1872,18 @@ func (p *evalNodeParser) parse(ctx *parseContext, node mkparser.Node, args *mkpa
if len(nodes) == 0 {
return []starlarkNode{}
} else if len(nodes) == 1 {
// Replace the nodeLocator with one that just returns the location of
// the $(eval) node. Otherwise, statements inside an $(eval) will show as
// being on line 1 of the file, because they're on line 1 of
// strings.NewReader(args.Dump())
oldNodeLocator := ctx.script.nodeLocator
ctx.script.nodeLocator = func(pos mkparser.Pos) int {
return oldNodeLocator(node.Pos())
}
defer func() {
ctx.script.nodeLocator = oldNodeLocator
}()
switch n := nodes[0].(type) {
case *mkparser.Assignment:
if n.Name.Const() {

View file

@ -1567,6 +1567,9 @@ $(foreach x,$(MY_LIST_VAR), \
$(foreach x,$(MY_LIST_VAR), \
$(eval include foo/$(x).mk))
# Check that we get as least close to correct line numbers for errors on statements inside evals
$(eval $(call inherit-product,$(A_VAR)))
`,
expected: `load("//build/make/core:product_config.rbc", "rblf")
load("//foo:font.star", _font_init = "init")
@ -1592,6 +1595,8 @@ def init(g, handle):
if not _varmod_init:
rblf.mkerror("product.mk", "Cannot find %s" % ("foo/%s.mk" % x))
_varmod_init(g, handle)
# Check that we get as least close to correct line numbers for errors on statements inside evals
rblf.mk2rbc_error("product.mk:17", "inherit-product/include argument is too complex")
`,
},
{