示例#1
0
 public object MacroExpand(object lval, ref bool proceed)
 {
     if (Lisp.IsFunctor(lval))
     {
         object head = Lisp.Car(lval);
         object[] args = Lisp.ToArray(Lisp.Cdr(lval));
         MacroFuncName name = new MacroFuncName(head, args.Length);
         MacroFuncDef def;
         if (m_macro.TryGetValue(head, out def))
         {
             foreach (MacroFuncBase macro in def)
             {
                 bool completed = false;
                 object res = macro.Execute(this, args, out completed);
                 if (completed)
                 {
                     proceed = true;
                     return res;
                 }
             }
         }
         ControlFormBase control;
         if (m_control.TryGetValue(head, out control))
             return control.MacroExpand(this, args, ref proceed);
         else
             return MacroExpand(head, args, ref proceed);
     }
     else
         return lval;
 }
示例#2
0
 public bool Equals(MacroFuncName name)
 {
     if (name.ID == ID && name.Arity == Arity)
         return true;
     else
         return false;
 }
示例#3
0
 public bool Match(MacroFuncName name)
 {
     return ID == name.ID && (VariableLength || Arity == name.Arity);
 }
示例#4
0
 public XmlForest()
 {
     Name = new MacroFuncName(ID.XmlForest);
 }