*** empty log message ***
[m17n/m17n-lib-cs.git] / XmlExpr.cs
index f88d2e7..84d808e 100644 (file)
@@ -138,15 +138,14 @@ namespace System.Xml.Expression
 
        public override Term Call (Domain domain, Variable vari, Term[] args)
        {
-         Term[] newargs = new Term[args.Length];
-
+         args = (Term[]) args.Clone ();
          for (int i = 0; i < args.Length; i++)
            {
-             newargs[i] = args[i].Eval (domain);
+             args[i] = args[i].Eval (domain);
              if (domain.Thrown)
-               return newargs[i];
+               return args[i];
            }
-         return builtin (domain, vari, newargs);
+         return builtin (domain, vari, args);
        }
       }
 
@@ -270,7 +269,7 @@ namespace System.Xml.Expression
       }
     }
 
-    public class Variable : Object
+    public class Variable : TermValue
     {
       public readonly Name name;
       public string desc;
@@ -1178,7 +1177,6 @@ namespace System.Xml.Expression
          result.objval = list;
          return result;
        }
-      vari.val.objval = list;
       return vari.val;
     }
 
@@ -1429,7 +1427,7 @@ namespace System.Xml.Expression
       return TermTerm;
     }
 
-    private static Term Fcatch (Domain domain, Variable vari, Term[] args)
+    public static Term Fcatch (Domain domain, Variable vari, Term[] args)
     {
       Term result = Zero;
       try {
@@ -1441,18 +1439,18 @@ namespace System.Xml.Expression
       return result;
     }
 
-    private static Term Fthrow (Domain domain, Variable vari, Term[] args)
+    public static Term Fthrow (Domain domain, Variable vari, Term[] args)
     {
       domain.ThrowTag (new CatchTag (args[0].Nameval));
       return (args.Length == 1 ? Zero : args[1]);
     }
 
-    public class Object
+    public class TermValue
     {
       public virtual Term Eval (Domain domain) { return new Term (this); }
     }
 
-    private class Funcall : Object
+    private class Funcall : TermValue
     {
       internal Function func;
       internal Variable vari;
@@ -1522,7 +1520,7 @@ namespace System.Xml.Expression
       public Term (string str) { intval = 0; objval = str; }
       public Term (List<Term> list) { intval = 0; objval = list; }
       public Term (Term term) { intval = term.intval; objval = term.objval; }
-      public Term (Object obj) { intval = 0; objval = obj; }
+      public Term (TermValue obj) { intval = 0; objval = obj; }
 
       public Term (XmlNode node, Domain domain)
        {
@@ -1555,7 +1553,7 @@ namespace System.Xml.Expression
            }
        }
 
-      public int Objval {
+      public object Objval {
        get {
          if (objval == null)
            throw new Exception ("term is an integer: " + this);
@@ -1621,8 +1619,8 @@ namespace System.Xml.Expression
          return this;
        if (objval is List<Term>)
          return new Term ((List<Term>) objval);
-       if (objval is Object)
-         return ((Object) objval).Eval (domain);
+       if (objval is TermValue)
+         return ((TermValue) objval).Eval (domain);
        throw new Exception ("invalid Term object: " + objval);
       }