Exemplo n.º 1
0
                public static SSObject Swap(SSExpression[] exps, SSScope scope)
                {
                    var na = exps[0].Token.Value;
                    var va = exps[0].Evaluate(scope);
                    var nb = exps[1].Token.Value;
                    var vb = exps[1].Evaluate(scope);

                    scope.Undefine(nb);
                    scope.Undefine(na);
                    scope.Define(nb, va);
                    scope.Define(na, vb);
                    return(true);
                }
Exemplo n.º 2
0
                /// <summary>
                /// (rename old-name new-name)
                /// </summary>
                public static SSObject Rename(SSExpression[] exps, SSScope scope)
                {
                    string oname = exps[0].Token.Value;
                    string nname = exps[1].Token.Value;

                    (!oname.Equals(nname)).OrThrows("same name {0}".Fmt(oname));
                    try
                    {
                        var obj = scope.Find(oname);
                        scope.Define(nname, obj);
                        scope.Undefine(oname);
                        return(nname + "   " + obj.ToString());
                    }
                    catch (Exception)
                    {
                        Func <SSExpression[], SSScope, SSObject> obj = null;
                        if (SSScope.BuiltinFunctions.TryGetValue(oname, out obj))
                        {
                            SSScope.BuiltinFunctions[nname] = obj;
                            SSScope.BuiltinFunctions.Remove(oname);
                            return(nname + "   " + obj.ToString());
                        }
                        throw new Exception("cannot find {0} in scope, and it is not a builtin".Fmt(nname));
                    }
                }
Exemplo n.º 3
0
                /// <summary>
                /// set name value
                /// </summary>
                public static SSObject Set(SSExpression[] exps, SSScope scope)
                {
                    (exps.Length == 2).OrThrows("expect two parameters");
                    var b0 = exps[0];
                    var b1 = exps[1].Evaluate(scope);

                    if (!b0.Evaluate(scope).Replace(b1))
                    {
                        scope.Undefine(b0.Token.Value);
                        scope.Define(b0.Token.Value, b1);
                    }
                    return(b1);
                }
Exemplo n.º 4
0
 /// <summary>
 /// try{
 ///     value
 /// }
 /// catch(ex){
 /// }
 /// </summary>
 public static SSObject TryCatch(SSExpression[] exps, SSScope scope)
 {
     try
     {
         return(exps[0].Evaluate(scope));
     }
     catch (Exception ex)
     {
         var tok = exps[2].Children[0].Token;
         scope.Define(tok.Value, ex.Message);
         return(exps[3].Evaluate(scope));
     }
 }