code: func (v *evalVisitor) VisitExpression(node *ast.Expression) interface{} {
  	v.at(node)
  
  	var result interface{}
  	done := false
  
  	v.pushExpr(node)
  
  	// helper call
  	if helperName := node.HelperName(); helperName != "" {
  		if helper := v.findHelper(helperName); helper != zero {
  			result = v.callHelper(helperName, helper, node)
  			done = true
  		}
  	}
  
  	if !done {
  		// literal
  		if literal, ok := node.LiteralStr(); ok {
  			if val := v.evalField(v.curCtx(), literal, true); val.IsValid() {
  				result = val.Interface()
  				done = true
  			}
  		}
  	}
  
  	if !done {
  		// field path
  		if path := node.FieldPath(); path != nil {
  			// @todo Find a cleaner way ! Don't break the pattern !
  			// this is an exception to visitor pattern, because we need to pass the info
  			// that this path is at root of current expression
  			if val := v.evalPathExpression(path, true); val != nil {
  				result = val
  			}
  		}
  	}
  
  	v.popExpr()
  
  	return result
  }
docs: // Expressions
  // VisitExpression implements corresponding Visitor interface method