private static AstBinding ParseRequired(string name, Syntax stx, Syntax definition, Environment env, ArgumentBinding.Type type) { Syntax var = null; ParseArg(name, stx, definition, env, out var); var binding = new ArgumentBinding(var, type, null); env.Define(binding); return(binding); }
private static AstBinding ParseOptional(string name, Syntax stx, Syntax definition, Environment env, ArgumentBinding.Type type) { Syntax var = null; AST val = null; if (definition.IsIdentifier) { ParseArg(name, stx, definition, env, out var); } else if (definition.IsExpression) { ParseArg(name, stx, definition.AsLinkedList <Value>(), env, out var, out val); } else { throw SchemeError.ArgumentError("lambda", "list?", definition); } var binding = new ArgumentBinding(var, type, val); env.Define(binding); return(binding); }