Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }