void CompileSexpr(SexprNode sexpr, NodeListParser nlp) { Logger.WriteLine(4, "CompileSexpr {0} <{1}>", sexpr, nlp); var snlp = NodeListParser.Create(sexpr.Args, Symbols); _currentparser = snlp; // intrinsics with individual parser and code generator if (sexpr.Sym.IsControl) { if (_controllookup.ContainsKey(sexpr.Sym.Keyword)) { _controllookup[sexpr.Sym.Keyword](sexpr.Sym, snlp, this); } else { nlp.Unexpected("unknown control function"); } } else { CompileBuiltin(sexpr.Sym as BuiltinSymbol, snlp); } }
// Parse list or single atom as Sexpr internal SexprNode GetSexprNode() { Expect(IsCallable, "Callable"); if (IsList) { var nlp = GetParser(); return(SexprNode.Create(nlp.GetIdent().Sym, nlp.GetTail())); } else { return(SexprNode.Create(GetIdent().Sym, new List <Node>())); } }