@@ -79,11 +79,11 @@ func (cfg *Cfg) exprEvalBinaryExpr(e *ast.BinaryExpr) (int, error) {
7979 var y interface {}
8080 var err error
8181
82- x , err = cfg .exprEvalNode (e .X )
82+ x , err = cfg .exprEvalNode (e .X , nil )
8383 if err != nil {
8484 return 0 , err
8585 }
86- y , err = cfg .exprEvalNode (e .Y )
86+ y , err = cfg .exprEvalNode (e .Y , nil )
8787 if err != nil {
8888 return 0 , err
8989 }
@@ -148,7 +148,7 @@ func (cfg *Cfg) exprEvalUnaryExpr(e *ast.UnaryExpr) (int, error) {
148148 return 0 , util .FmtNewtError ("Invalid \" %s\" operator in expression" , e .Op .String ())
149149 }
150150
151- x , err := cfg .exprEvalNode (e .X )
151+ x , err := cfg .exprEvalNode (e .X , nil )
152152 if err != nil {
153153 return 0 , err
154154 }
@@ -201,7 +201,7 @@ func (cfg *Cfg) exprEvalCallExpr(e *ast.CallExpr) (interface{}, error) {
201201 argv := []interface {}{}
202202 argvs := []string {}
203203 for _ , node := range e .Args {
204- arg , err := cfg .exprEvalNode (node )
204+ arg , err := cfg .exprEvalNode (node , nil )
205205 if err != nil {
206206 return 0 , err
207207 }
@@ -271,9 +271,17 @@ func (cfg *Cfg) exprEvalCallExpr(e *ast.CallExpr) (interface{}, error) {
271271 return ret , nil
272272}
273273
274- func (cfg * Cfg ) exprEvalIdentifier (e * ast.Ident ) (interface {}, error ) {
274+ func (cfg * Cfg ) exprEvalIdentifier (e * ast.Ident , parentEntry * CfgEntry ) (interface {}, error ) {
275275 name := e .Name
276276
277+ if parentEntry != nil {
278+ for _ , s := range parentEntry .ValidChoices {
279+ if s == name {
280+ return s , nil
281+ }
282+ }
283+ }
284+
277285 entry , ok := cfg .Settings [name ]
278286 if ! ok {
279287 fixedName := name
@@ -308,7 +316,7 @@ func (cfg *Cfg) exprEvalIdentifier(e *ast.Ident) (interface{}, error) {
308316 return val , err
309317}
310318
311- func (cfg * Cfg ) exprEvalNode (node ast.Node ) (interface {}, error ) {
319+ func (cfg * Cfg ) exprEvalNode (node ast.Node , parentEntry * CfgEntry ) (interface {}, error ) {
312320 switch e := node .(type ) {
313321 case * ast.BasicLit :
314322 return cfg .exprEvalLiteral (e )
@@ -319,9 +327,9 @@ func (cfg *Cfg) exprEvalNode(node ast.Node) (interface{}, error) {
319327 case * ast.CallExpr :
320328 return cfg .exprEvalCallExpr (e )
321329 case * ast.Ident :
322- return cfg .exprEvalIdentifier (e )
330+ return cfg .exprEvalIdentifier (e , parentEntry )
323331 case * ast.ParenExpr :
324- return cfg .exprEvalNode (e .X )
332+ return cfg .exprEvalNode (e .X , nil )
325333 }
326334
327335 return 0 , util .FmtNewtError ("Invalid token in expression" )
0 commit comments