public static object Eval(ScriptEngine engine, object code) { if (TypeUtilities.IsString(code) == false) { return(code); } return(engine.Eval(TypeConverter.ToString(code), RuntimeScope.CreateGlobalScope(engine), engine.Global, false)); }
/// <summary> /// Executes the compiled script. /// </summary> /// <param name="engine"> The script engine to use to execute the script. </param> /// <exception cref="ArgumentNullException"> <paramref name="engine"/> is a <c>null</c> reference. </exception> public void Execute(ScriptEngine engine) { try { methodGen.Execute(engine, RuntimeScope.CreateGlobalScope(engine), engine.Global); // Execute any pending callbacks. engine.ExecutePostExecuteSteps(); } finally { // Ensure the list of post-execute steps is cleared if there is an exception. engine.ClearPostExecuteSteps(); } }
// INITIALIZATION //_________________________________________________________________________________________ /// <summary> /// Creates a new instance of a user-defined function. /// </summary> /// <param name="prototype"> The next object in the prototype chain. </param> /// <param name="name"> The name of the function. </param> /// <param name="argumentsText"> A comma-separated list of arguments. </param> /// <param name="bodyText"> The source code for the body of the function. </param> /// <remarks> This is used by <c>new Function()</c>. </remarks> internal UserDefinedFunction(ObjectInstance prototype, string name, string argumentsText, string bodyText) : base(prototype) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (argumentsText == null) { throw new ArgumentNullException(nameof(argumentsText)); } if (bodyText == null) { throw new ArgumentNullException(nameof(bodyText)); } // Set up a new function scope. this.ParentScope = RuntimeScope.CreateGlobalScope(Engine); // Compile the code. var context = new FunctionMethodGenerator(name, argumentsText, bodyText, new CompilerOptions() { #if ENABLE_DEBUGGING EnableDebugging = this.Engine.EnableDebugging, #endif ForceStrictMode = this.Engine.ForceStrictMode, EnableILAnalysis = this.Engine.EnableILAnalysis, CompatibilityMode = this.Engine.CompatibilityMode }); try { context.GenerateCode(); } catch (SyntaxErrorException ex) { throw new JavaScriptException(ErrorType.SyntaxError, ex.Message, ex.LineNumber, ex.SourcePath); } this.ArgumentsText = argumentsText; this.ArgumentNames = context.Arguments.Select(a => a.Name).ToList(); this.BodyText = bodyText; this.generatedMethod = context.GeneratedMethod; this.body = (FunctionDelegate)this.generatedMethod.GeneratedDelegate; this.StrictMode = context.StrictMode; InitProperties(name, context.Arguments.Count); }
/// <summary> /// Executes the compiled eval code. /// </summary> /// <param name="engine"> The script engine to use to execute the script. </param> /// <returns> The result of the eval. </returns> /// <exception cref="ArgumentNullException"> <paramref name="engine"/> is a <c>null</c> reference. </exception> public object Evaluate(ScriptEngine engine) { try { object result = methodGen.Execute(engine, RuntimeScope.CreateGlobalScope(engine), engine.Global); // Execute any pending callbacks. engine.ExecutePostExecuteSteps(); return(TypeUtilities.NormalizeValue(result)); } finally { // Ensure the list of post-execute steps is cleared if there is an exception. engine.ClearPostExecuteSteps(); } }