internal ScriptFunction Construct(Object[] args, VsaEngine engine)
        {
            StringBuilder func_string = new StringBuilder("function anonymous(");

            for (int i = 0, n = args.Length - 2; i < n; i++)
            {
                func_string.Append(Convert.ToString(args[i]));
                func_string.Append(", ");
            }
            if (args.Length > 1)
            {
                func_string.Append(Convert.ToString(args[args.Length - 2]));
            }
            func_string.Append(") {\n");
            if (args.Length > 0)
            {
                func_string.Append(Convert.ToString(args[args.Length - 1]));
            }
            func_string.Append("\n}");
            Context  context = new Context(new DocumentContext("anonymous", engine), func_string.ToString());
            JSParser p       = new JSParser(context);

            engine.PushScriptObject(((IActivationObject)engine.ScriptObjectStackTop()).GetGlobalScope());
            try{
                return((ScriptFunction)p.ParseFunctionExpression().PartiallyEvaluate().Evaluate());
            }finally{
                engine.PopScriptObject();
            }
        }
예제 #2
0
        public static void JScriptPackage(string rootName, VsaEngine engine)
        {
            GlobalScope globalScope = ((IActivationObject)engine.ScriptObjectStackTop()).GetGlobalScope();

            if (globalScope.GetLocalField(rootName) == null)
            {
                FieldInfo info = globalScope.AddNewField(rootName, Namespace.GetNamespace(rootName, engine), FieldAttributes.Literal | FieldAttributes.Public);
            }
        }
예제 #3
0
        public static void JScriptImport(string name, VsaEngine engine)
        {
            int         index       = name.IndexOf('.');
            string      str         = (index > 0) ? name.Substring(0, index) : name;
            GlobalScope globalScope = ((IActivationObject)engine.ScriptObjectStackTop()).GetGlobalScope();

            if (globalScope.GetLocalField(str) == null)
            {
                FieldInfo info = globalScope.AddNewField(str, Namespace.GetNamespace(str, engine), FieldAttributes.Literal | FieldAttributes.Public);
            }
            engine.SetEnclosingContext(new WrappedNamespace(name, engine, false));
        }
 public static object GetClosureInstance(VsaEngine engine)
 {
     if (engine != null)
     {
         StackFrame frame = engine.ScriptObjectStackTop() as StackFrame;
         if (frame != null)
         {
             return(frame.closureInstance);
         }
     }
     return(null);
 }
예제 #5
0
        public static FunctionObject JScriptFunctionExpression(RuntimeTypeHandle handle, string name,
                                                               string methodName, string [] formalParams,
                                                               JSLocalField [] fields, bool mustSaveStackLocals,
                                                               bool hasArgumentsObject, string text,
                                                               VsaEngine engine)
        {
            MethodInfo     method = engine.ScriptObjectStackTop().GetType().GetMethod(methodName);
            FunctionObject fun    = new FunctionObject(method);

            fun.source     = text;
            fun.vsa_engine = engine;
            return(fun);
        }
예제 #6
0
        public static void JScriptImport(String name, VsaEngine engine)
        {
            int         dotPos   = name.IndexOf('.');
            String      rootName = dotPos > 0 ? name.Substring(0, dotPos) : name;
            GlobalScope scope    = ((IActivationObject)engine.ScriptObjectStackTop()).GetGlobalScope();
            FieldInfo   field    = scope.GetLocalField(rootName);

            if (field == null)
            {
                field = scope.AddNewField(rootName, Namespace.GetNamespace(rootName, engine), FieldAttributes.Public | FieldAttributes.Literal);
            }
            engine.SetEnclosingContext(new WrappedNamespace(name, engine, false));
        }
예제 #7
0
 // Push into a "with" scope and return the converted object.
 public static Object JScriptWith(Object withOb, VsaEngine engine)
 {
     withOb = Convert.ToObject(withOb, engine);
     if (withOb != null)
     {
         engine.PushScriptObjectChecked
             (new WithScope(engine.ScriptObjectStackTop(), withOb));
         return(withOb);
     }
     else
     {
         throw new JScriptException(JSError.ObjectExpected);
     }
 }
예제 #8
0
        public static Closure JScriptFunctionDeclaration(RuntimeTypeHandle handle, string name,
                                                         string methodName, string [] formalParameters,
                                                         JSLocalField [] fields, bool mustSaveStackLocals,
                                                         bool hasArgumentsObjects, string text,
                                                         Object declaringObject, VsaEngine engine)
        {
            FunctionObject f = new FunctionObject(name, null, null, null, null);

            f.source = text;
            MethodInfo method = engine.ScriptObjectStackTop().GetType().GetMethod(methodName);

            f.method     = method;
            f.vsa_engine = engine;
            return(new Closure(f));
        }
예제 #9
0
 private static Object DoEvaluate(Object source, VsaEngine engine, bool isUnsafe)
 {
     if (engine.doFast)
     {
         engine.PushScriptObject(new BlockScope(engine.ScriptObjectStackTop()));
     }
     try{
         Context  context = new Context(new DocumentContext("eval code", engine), ((IConvertible)source).ToString());
         JSParser p       = new JSParser(context);
         if (!isUnsafe)
         {
             new SecurityPermission(SecurityPermissionFlag.Execution).PermitOnly();
         }
         return(((Completion)p.ParseEvalBody().PartiallyEvaluate().Evaluate()).value);
     }finally{
         if (engine.doFast)
         {
             engine.PopScriptObject();
         }
     }
 }
예제 #10
0
 public static Object JScriptEvaluate(Object source, VsaEngine engine)
 {
     if (Convert.GetTypeCode(source) != TypeCode.String)
     {
         return(source);
     }
     if (engine.doFast)
     {
         engine.PushScriptObject(new BlockScope(engine.ScriptObjectStackTop()));
     }
     try{
         Context  context = new Context(new DocumentContext("eval code", engine), ((IConvertible)source).ToString());
         JSParser p       = new JSParser(context);
         return(((Completion)p.ParseEvalBody().PartiallyEvaluate().Evaluate()).value);
     }finally{
         if (engine.doFast)
         {
             engine.PopScriptObject();
         }
     }
 }
예제 #11
0
        private static object DoEvaluate(object source, VsaEngine engine, bool isUnsafe)
        {
            object obj2;

            if (engine.doFast)
            {
                engine.PushScriptObject(new BlockScope(engine.ScriptObjectStackTop()));
            }
            try
            {
                Context  context = new Context(new DocumentContext("eval code", engine), ((IConvertible)source).ToString());
                JSParser parser  = new JSParser(context);
                obj2 = ((Completion)parser.ParseEvalBody().PartiallyEvaluate().Evaluate()).value;
            }
            finally
            {
                if (engine.doFast)
                {
                    engine.PopScriptObject();
                }
            }
            return(obj2);
        }
        internal ScriptFunction Construct(object[] args, VsaEngine engine)
        {
            ScriptFunction function;
            StringBuilder  builder = new StringBuilder("function anonymous(");
            int            index   = 0;
            int            num2    = args.Length - 2;

            while (index < num2)
            {
                builder.Append(Microsoft.JScript.Convert.ToString(args[index]));
                builder.Append(", ");
                index++;
            }
            if (args.Length > 1)
            {
                builder.Append(Microsoft.JScript.Convert.ToString(args[args.Length - 2]));
            }
            builder.Append(") {\n");
            if (args.Length > 0)
            {
                builder.Append(Microsoft.JScript.Convert.ToString(args[args.Length - 1]));
            }
            builder.Append("\n}");
            Context  context = new Context(new DocumentContext("anonymous", engine), builder.ToString());
            JSParser parser  = new JSParser(context);

            engine.PushScriptObject(((IActivationObject)engine.ScriptObjectStackTop()).GetGlobalScope());
            try
            {
                function = (ScriptFunction)parser.ParseFunctionExpression().PartiallyEvaluate().Evaluate();
            }
            finally
            {
                engine.PopScriptObject();
            }
            return(function);
        }
예제 #13
0
 private static object DefaultThisObject(VsaEngine engine)
 {
     Debug.Assert(engine != null);
     return(((IActivationObject)engine.ScriptObjectStackTop()).GetDefaultThisObject());
 }
예제 #14
0
파일: Eval.cs 프로젝트: ForNeVeR/pnet
        // Evaluate a JScript expression in the context of a specific engine.
        public static Object JScriptEvaluate(Object source, VsaEngine engine)
        {
            Object value = null;

            // Bail out if we weren't supplied a string.
            if (!(source is String))
            {
                return(source);
            }

            // Parse the "eval" statement.
            Context context = new Context((String)source);

            context.codebase = new CodeBase("eval code", null);
            JSParser parser = new JSParser(context);
            JNode    node   = parser.ParseSource(true);

            // Push a scope for use during evaluation.
            engine.PushScriptObject
                (new BlockScope(engine.ScriptObjectStackTop(),
                                new JSObject(null, engine)));

            // Evaluate the statement.
            try
            {
                value = node.Eval(engine);
                if (value == Empty.Value)
                {
                    value = null;
                }
            }
            catch (JScriptException e)
            {
                // Attach the context information to low-level exceptions.
                if (e.context == null)
                {
                    e.context = context;
                }
                throw;
            }
            catch (BreakJumpOut brk)
            {
                // "break" used incorrectly.
                throw new JScriptException(JSError.BadBreak, brk.context);
            }
            catch (ContinueJumpOut cont)
            {
                // "continue" used incorrectly.
                throw new JScriptException(JSError.BadContinue,
                                           cont.context);
            }
            catch (ReturnJumpOut ret)
            {
                // "return" used incorrectly.
                throw new JScriptException(JSError.BadReturn, ret.context);
            }
            finally
            {
                // Pop the script scope.
                engine.PopScriptObject();
            }

            // Return the result of the evaluation to the caller.
            return(value);
        }
예제 #15
0
 public static void PushHandlerScope(VsaEngine engine, string id, int scopeId)
 {
     engine.PushScriptObject(new BlockScope(engine.ScriptObjectStackTop(), id, scopeId));
 }