public object Visit(ValueWithUndefinedOrNullDefaultNode node) { if (node.Value is VariableNode variableNode) { if (!_variables.ContainsKey(variableNode.Identity)) { return(node.DefaultValue.Accept(this)); } } return(node.Value.Accept(this) ?? node.DefaultValue.Accept(this)); }
private bool TryValueOrUndefinedOrNullDefault(ParserContext context, out IAstNode instr) { instr = null; if (!context.Stream.Consume <IAstNode>(TryValue, context, out var value)) { return(false); } if (!context.Stream.Consume(TokenTypes.DefaultUndefinedOrNullValue)) { return(false); } if (!context.Stream.Consume <IAstNode>(TryFactor, context, out var defaultValue)) { return(false); } instr = new ValueWithUndefinedOrNullDefaultNode(value, defaultValue); return(true); }