*** empty log message ***
[m17n/m17n-lib-cs.git] / XmlExpr.cs
index e18f7d3..2e143a2 100644 (file)
@@ -140,12 +140,15 @@ namespace System.Xml.Expression
 
        public override Term Call (Domain domain, Variable vari, Term[] args)
        {
-         args = (Term[]) args.Clone ();
-         for (int i = 0; i < args.Length; i++)
+         if (args != null)
            {
-             args[i] = args[i].Eval (domain);
-             if (domain.Thrown)
-               return args[i];
+             args = (Term[]) args.Clone ();
+             for (int i = 0; i < args.Length; i++)
+               {
+                 args[i] = args[i].Eval (domain);
+                 if (domain.Thrown)
+                   return args[i];
+               }
            }
          return builtin (domain, vari, args);
        }
@@ -213,7 +216,8 @@ namespace System.Xml.Expression
              }
          }
 
-       public Lambda (Domain domain, Symbol name, bool args_evalled, Symbol[] args)
+       public Lambda (Domain domain, Symbol name,
+                      bool args_evalled, Symbol[] args)
          {
            int nfixed = 0;
            int noptional = 0;
@@ -1558,7 +1562,7 @@ namespace System.Xml.Expression
     public abstract class TermValue
     {
       public virtual Term Eval (Domain domain) { return new Term (this); }
-      public abstract TermValue Clone ();
+      public virtual TermValue Clone () { return this; }
     }
 
     private class Funcall : TermValue
@@ -1626,10 +1630,7 @@ namespace System.Xml.Expression
 
       public override Term Eval (Domain domain)
       {
-       domain.DebugWrite (true, "(({0}", func.name);
-       for (int i = 0; i < args.Length; i++)
-         domain.DebugWrite (false, " {0}", args[i].ToString ());
-       domain.DebugWrite (false, ")");
+       domain.DebugWrite (true, ToString ());
        domain.depth++;
        Term result = func.Call (domain, vari, args);
        domain.depth--;
@@ -1646,12 +1647,15 @@ namespace System.Xml.Expression
       {
        string str = "<" + func.name;
        if (vari != null)
-         str += " \"vname=" + vari.name + "\"";
+         str += " vname=\"" + vari.name + "\"";
        if (args == null)
          return str + "/>";
        str += ">";
-       foreach (Term e in args)
-         str += e;
+       if (func is Function.SpecialForm)
+         str += "...";
+       else
+         foreach (Term e in args)
+           str += e;
        return (str + "</" + func.name + ">");
       }
     }