Support variables with dashes in their names
Bug: 221946551 Test: go test Change-Id: I085fc35159c4f3afe53868fbc731fcaeac3a69a8
This commit is contained in:
@@ -465,17 +465,17 @@ func newParseContext(ss *StarlarkScript, nodes []mkparser.Node) *parseContext {
|
||||
return ctx
|
||||
}
|
||||
|
||||
func (ctx *parseContext) lastAssignment(name string) *assignmentNode {
|
||||
func (ctx *parseContext) lastAssignment(v variable) *assignmentNode {
|
||||
for va := ctx.varAssignments; va != nil; va = va.outer {
|
||||
if v, ok := va.vars[name]; ok {
|
||||
if v, ok := va.vars[v.name()]; ok {
|
||||
return v
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ctx *parseContext) setLastAssignment(name string, asgn *assignmentNode) {
|
||||
ctx.varAssignments.vars[name] = asgn
|
||||
func (ctx *parseContext) setLastAssignment(v variable, asgn *assignmentNode) {
|
||||
ctx.varAssignments.vars[v.name()] = asgn
|
||||
}
|
||||
|
||||
func (ctx *parseContext) pushVarAssignments() {
|
||||
@@ -532,7 +532,7 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode
|
||||
if lhs == nil {
|
||||
return []starlarkNode{ctx.newBadNode(a, "unknown variable %s", name)}
|
||||
}
|
||||
_, isTraced := ctx.tracedVariables[name]
|
||||
_, isTraced := ctx.tracedVariables[lhs.name()]
|
||||
asgn := &assignmentNode{lhs: lhs, mkValue: a.Value, isTraced: isTraced, location: ctx.errorLocation(a)}
|
||||
if lhs.valueType() == starlarkTypeUnknown {
|
||||
// Try to divine variable type from the RHS
|
||||
@@ -565,8 +565,8 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode
|
||||
}
|
||||
}
|
||||
|
||||
asgn.previous = ctx.lastAssignment(name)
|
||||
ctx.setLastAssignment(name, asgn)
|
||||
asgn.previous = ctx.lastAssignment(lhs)
|
||||
ctx.setLastAssignment(lhs, asgn)
|
||||
switch a.Type {
|
||||
case "=", ":=":
|
||||
asgn.flavor = asgnSet
|
||||
@@ -1268,12 +1268,12 @@ func (ctx *parseContext) parseReference(node mkparser.Node, ref *mkparser.MakeSt
|
||||
args: []starlarkExpr{
|
||||
&stringLiteralExpr{literal: substParts[0]},
|
||||
&stringLiteralExpr{literal: substParts[1]},
|
||||
NewVariableRefExpr(v, ctx.lastAssignment(v.name()) != nil),
|
||||
NewVariableRefExpr(v, ctx.lastAssignment(v) != nil),
|
||||
},
|
||||
}
|
||||
}
|
||||
if v := ctx.addVariable(refDump); v != nil {
|
||||
return NewVariableRefExpr(v, ctx.lastAssignment(v.name()) != nil)
|
||||
return NewVariableRefExpr(v, ctx.lastAssignment(v) != nil)
|
||||
}
|
||||
return ctx.newBadExpr(node, "unknown variable %s", refDump)
|
||||
}
|
||||
|
Reference in New Issue
Block a user