@@ -79,11 +79,11 @@ func (cfg *Cfg) exprEvalBinaryExpr(e *ast.BinaryExpr) (int, error) {
79
79
var y interface {}
80
80
var err error
81
81
82
- x , err = cfg .exprEvalNode (e .X )
82
+ x , err = cfg .exprEvalNode (e .X , nil )
83
83
if err != nil {
84
84
return 0 , err
85
85
}
86
- y , err = cfg .exprEvalNode (e .Y )
86
+ y , err = cfg .exprEvalNode (e .Y , nil )
87
87
if err != nil {
88
88
return 0 , err
89
89
}
@@ -148,7 +148,7 @@ func (cfg *Cfg) exprEvalUnaryExpr(e *ast.UnaryExpr) (int, error) {
148
148
return 0 , util .FmtNewtError ("Invalid \" %s\" operator in expression" , e .Op .String ())
149
149
}
150
150
151
- x , err := cfg .exprEvalNode (e .X )
151
+ x , err := cfg .exprEvalNode (e .X , nil )
152
152
if err != nil {
153
153
return 0 , err
154
154
}
@@ -201,7 +201,7 @@ func (cfg *Cfg) exprEvalCallExpr(e *ast.CallExpr) (interface{}, error) {
201
201
argv := []interface {}{}
202
202
argvs := []string {}
203
203
for _ , node := range e .Args {
204
- arg , err := cfg .exprEvalNode (node )
204
+ arg , err := cfg .exprEvalNode (node , nil )
205
205
if err != nil {
206
206
return 0 , err
207
207
}
@@ -271,9 +271,17 @@ func (cfg *Cfg) exprEvalCallExpr(e *ast.CallExpr) (interface{}, error) {
271
271
return ret , nil
272
272
}
273
273
274
- func (cfg * Cfg ) exprEvalIdentifier (e * ast.Ident ) (interface {}, error ) {
274
+ func (cfg * Cfg ) exprEvalIdentifier (e * ast.Ident , parentEntry * CfgEntry ) (interface {}, error ) {
275
275
name := e .Name
276
276
277
+ if parentEntry != nil {
278
+ for _ , s := range parentEntry .ValidChoices {
279
+ if s == name {
280
+ return s , nil
281
+ }
282
+ }
283
+ }
284
+
277
285
entry , ok := cfg .Settings [name ]
278
286
if ! ok {
279
287
fixedName := name
@@ -308,7 +316,7 @@ func (cfg *Cfg) exprEvalIdentifier(e *ast.Ident) (interface{}, error) {
308
316
return val , err
309
317
}
310
318
311
- func (cfg * Cfg ) exprEvalNode (node ast.Node ) (interface {}, error ) {
319
+ func (cfg * Cfg ) exprEvalNode (node ast.Node , parentEntry * CfgEntry ) (interface {}, error ) {
312
320
switch e := node .(type ) {
313
321
case * ast.BasicLit :
314
322
return cfg .exprEvalLiteral (e )
@@ -319,9 +327,9 @@ func (cfg *Cfg) exprEvalNode(node ast.Node) (interface{}, error) {
319
327
case * ast.CallExpr :
320
328
return cfg .exprEvalCallExpr (e )
321
329
case * ast.Ident :
322
- return cfg .exprEvalIdentifier (e )
330
+ return cfg .exprEvalIdentifier (e , parentEntry )
323
331
case * ast.ParenExpr :
324
- return cfg .exprEvalNode (e .X )
332
+ return cfg .exprEvalNode (e .X , nil )
325
333
}
326
334
327
335
return 0 , util .FmtNewtError ("Invalid token in expression" )
0 commit comments