public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Expression.Execute(ref result, ref callFrame, interpreter); var obj = Operations.Convert.ToObject.Run(ref result); result.Set(obj.ToDFunction()); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var catchSymbol = Identifier.Symbol; Debug.Assert(catchSymbol.SymbolType == JSSymbol.SymbolTypes.Local, "catch symbol must be local, nothing else is supported at this time"); interpreter.SymbolValues[catchSymbol.ValueIndex] = result; Statement.Execute(ref result, ref callFrame, interpreter); //catchSymbol.SymbolType = JSSymbol.SymbolTypes.Unknown; interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); result.Set(Value); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); if (Expression != null) { Expression.Execute(ref result, ref callFrame, interpreter); callFrame.Return = result; } interpreter.SetCompletion(Interpreter.CompletionTypes.Return, null); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Expression.Execute(ref result, ref callFrame, interpreter); JSException.Throw(ref result); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); interpreter.PushTarget(this); var tempCount = interpreter.GetTemporaryCount(); //int backedgeCount = -1; do { //if (JSRuntime.Instance.Configuration.EnableProfiling) //backedgeCount++; Body.Execute(ref result, ref callFrame, interpreter); if (interpreter.CompletionType == Interpreter.CompletionTypes.Continue && interpreter.CompletionTargetStatement == this) interpreter.SetCompletion(Interpreter.CompletionTypes.Normal, null); else if (interpreter.CompletionType != Interpreter.CompletionTypes.Normal) break; Condition.Execute(ref result, ref callFrame, interpreter); interpreter.ReleaseTemporariesAfter(tempCount); } while (result.AsBoolean()); interpreter.PopTarget(this); //interpreter.IncrementBackedgeCount(backedgeCount); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { ///We try to do as much here as possible to avoid reaching the InternalCall and InternalNew ///See NodeFactory.MakeForEachInStatement to understand the logic interpreter.PushLocation(this); Expression.Execute(ref result, ref callFrame, interpreter); var iterator = new JSPropertyNameEnumerator(result.AsDObject()); Debug.Assert( ExtendedBody.Statements.Count == 2 && ExtendedBody.Statements[0] is ExpressionStatement , "Invalid situation! We must have a ExpressionStatement here!"); var assignToLeft = (ExtendedBody.Statements[0] as ExpressionStatement).Expression; interpreter.PushTarget(this); var tempCount = interpreter.GetTemporaryCount(); //int backedgeCount = 0; while (iterator.MoveNext()) { var writeId = assignToLeft as WriteIdentifierExpression; if (writeId != null) { result.Set(iterator.GetCurrent()); interpreter.WriteSymbol(writeId.Symbol, ref result, ref callFrame); } else { //This is an unlikely case anyways! var writeIndex = assignToLeft as WriteIndexerExpression; Debug.Assert(writeIndex != null, "Invalid situation! We must have a WriteIndexerExpression here!"); writeIndex.Container.Execute(ref result, ref callFrame, interpreter); var obj = result.AsDObject(); writeIndex.Index.Execute(ref result, ref callFrame, interpreter); obj.SetField(ref result, iterator.GetCurrent()); } //backedgeCount++; OriginalBody.Execute(ref result, ref callFrame, interpreter); if (interpreter.CompletionType == Interpreter.CompletionTypes.Continue && interpreter.CompletionTargetStatement == this) interpreter.SetCompletion(Interpreter.CompletionTypes.Normal, null); else if (interpreter.CompletionType != Interpreter.CompletionTypes.Normal) break; interpreter.ReleaseTemporariesAfter(tempCount); } interpreter.PopTarget(this); //interpreter.IncrementBackedgeCount(backedgeCount); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { var temp = interpreter.Declare(this); if (temp.Node == null) { //This is the very first visit //We need to regenerate results temp.Node = this; interpreter.PushLocation(this); Value.Execute(ref result, ref callFrame, interpreter); temp.Value = result; interpreter.PopLocation(this, ref result); } else result = temp.Value; }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Value.Execute(ref result, ref callFrame, interpreter); interpreter.WriteSymbol(Symbol, ref result, ref callFrame); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var tmp = new mdr.DValue(); Left.Execute(ref result, ref callFrame, interpreter); Right.Execute(ref tmp, ref callFrame, interpreter); result.Set(Operations.Binary.BitwiseXor.Run(ref result, ref tmp)); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Left.Execute(ref result, ref callFrame, interpreter); if (result.AsBoolean()) Middle.Execute(ref result, ref callFrame, interpreter); else Right.Execute(ref result, ref callFrame, interpreter); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Expression.Execute(ref result, ref callFrame, interpreter); result.Set(Operations.Unary.LogicalNot.Run(ref result)); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Expression.Execute(ref result, ref callFrame, interpreter); result.SetUndefined(); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var expression = Expression; var parent = expression as ParenExpression; if (parent != null) expression = parent.Expression; var indexer = expression as ReadIndexerExpression; if (indexer != null) { indexer.Container.Execute(ref result, ref callFrame, interpreter); var obj = result.AsDObject(); indexer.Index.Execute(ref result, ref callFrame, interpreter); result.Set(Operations.Unary.DeleteProperty.Run(obj, ref result)); } else { //we need to visit in case the expression has side effects, but then throw away result expression.Execute(ref result, ref callFrame, interpreter); var readId = expression as ReadIdentifierExpression; if (readId != null) result.Set(Operations.Unary.DeleteVariable.Run(interpreter.Context, readId.Symbol.FieldId)); else result.Set(Operations.Unary.Delete.Run(ref result)); } interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); if (Initialization != null) Initialization.Execute(ref result, ref callFrame, interpreter); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Container.Execute(ref result, ref callFrame, interpreter); var obj = result.AsDObject(); var index = new mdr.DValue(); Index.Execute(ref index, ref callFrame, interpreter); Value.Execute(ref result, ref callFrame, interpreter); obj.SetField(ref index, ref result); //interpreter.PopLocation(this, ref result, obj); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Condition.Execute(ref result, ref callFrame, interpreter); if (result.AsBoolean()) Then.Execute(ref result, ref callFrame, interpreter); else if (Else != null) Else.Execute(ref result, ref callFrame, interpreter); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Container.Execute(ref result, ref callFrame, interpreter); var obj = result.AsDObject(); AssignFieldId(); Value.Execute(ref result, ref callFrame, interpreter); obj.SetFieldByFieldId(FieldId, ref result); //interpreter.PopLocation(this, ref result, obj); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); interpreter.PushTarget(this); if (Initialization != null) Initialization.Execute(ref result, ref callFrame, interpreter); var tempCount = interpreter.GetTemporaryCount(); //int backedgeCount = 0; while (true) { if (Condition != null) { Condition.Execute(ref result, ref callFrame, interpreter); if (!result.AsBoolean()) break; } //backedgeCount++; Body.Execute(ref result, ref callFrame, interpreter); if (interpreter.CompletionType == Interpreter.CompletionTypes.Continue && interpreter.CompletionTargetStatement == this) interpreter.SetCompletion(Interpreter.CompletionTypes.Normal, null); else if (interpreter.CompletionType != Interpreter.CompletionTypes.Normal) break; if (Increment != null) Increment.Execute(ref result, ref callFrame, interpreter); interpreter.ReleaseTemporariesAfter(tempCount); } interpreter.PopTarget(this); //interpreter.IncrementBackedgeCount(backedgeCount); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var tmpCallFrame = new mdr.CallFrame(); Function.Execute(ref result, ref callFrame, interpreter); interpreter.LoadArguments(this.Arguments, ref tmpCallFrame, ref callFrame); tmpCallFrame.Function = result.AsDFunction(); JSRuntime.StopTimer(interpreter.Timer); tmpCallFrame.Function.Construct(ref tmpCallFrame); JSRuntime.StartTimer(interpreter.Timer); result.Set(tmpCallFrame.This); interpreter.PopLocation(this, tmpCallFrame.Function); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); interpreter.SetCompletion(Interpreter.CompletionTypes.Break, Target); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var tmpCallFrame = new mdr.CallFrame(); Function.Execute(ref result, ref callFrame, interpreter); if (ThisArg != null) { var thisValue = new mdr.DValue(); ThisArg.Execute(ref thisValue, ref callFrame, interpreter); tmpCallFrame.This = thisValue.AsDObject(); } else if (IsDirectEvalCall) { tmpCallFrame.CallerFunction = callFrame.Function; tmpCallFrame.CallerContext = interpreter.Context; tmpCallFrame.This = callFrame.This; } else { tmpCallFrame.This = mdr.Runtime.Instance.GlobalContext; } interpreter.LoadArguments(this.Arguments, ref tmpCallFrame, ref callFrame); tmpCallFrame.Function = result.AsDFunction(); JSRuntime.StopTimer(interpreter.Timer); tmpCallFrame.Function.Call(ref tmpCallFrame); JSRuntime.StartTimer(interpreter.Timer); result = tmpCallFrame.Return; interpreter.PopLocation(this, tmpCallFrame.Function); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); interpreter.PushTarget(this); var i = 0; for (; i < CaseClauses.Count; ++i) { var caseClause = CaseClauses[i]; if (caseClause.IsDefault) break; caseClause.Comparison.Execute(ref result, ref callFrame, interpreter); if (result.AsBoolean()) break; } for (; i < CaseClauses.Count && interpreter.CompletionType == Interpreter.CompletionTypes.Normal; ++i) { var caseClause = CaseClauses[i]; caseClause.Execute(ref result, ref callFrame, interpreter); } interpreter.PopTarget(this); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var func = new mdr.DFunction( ((JSFunctionMetadata)callFrame.Function.Metadata).SubFunctions[Metadata.FuncDefinitionIndex] , interpreter.Context); result.Set(func); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var count = interpreter.GetTemporaryCount(); try { Statement.Execute(ref result, ref callFrame, interpreter); } catch (JSException e) { if (Catch != null) Catch.Execute(ref e.Value, ref callFrame, interpreter); else throw; } finally { if (Finally != null) Finally.Execute(ref result, ref callFrame, interpreter); interpreter.ReleaseTemporariesAfter(count); } //if (Catch != null) //{ // if (Finally != null) // { // try // { // Statement.Execute(ref result, ref callFrame, interpreter); // } // catch (JSException e) // { // Catch.Execute(ref e.Value, ref callFrame, interpreter); // } // finally // { // Finally.Execute(ref result, ref callFrame, interpreter); // } // } // else // { // try // { // Statement.Execute(ref result, ref callFrame, interpreter); // } // catch (JSException e) // { // Catch.Execute(ref e.Value, ref callFrame, interpreter); // } // } //} //else //{ // try // { // Statement.Execute(ref result, ref callFrame, interpreter); // } // finally // { // Finally.Execute(ref result, ref callFrame, interpreter); // } //} interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); for (var i = 0; i < Statements.Count; ++i) { Statements[i].Execute(ref result, ref callFrame, interpreter); if (interpreter.CompletionType != Interpreter.CompletionTypes.Normal) break; } interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Statement.Execute(ref result, ref callFrame, interpreter); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); for (var i = 0; i < Declarations.Count; ++i) Declarations[i].Execute(ref result, ref callFrame, interpreter); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); result.Set(new mdr.DRegExp(Regexp, Options)); interpreter.PopLocation(this, ref result); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); Expression.Execute(ref result, ref callFrame, interpreter); if (mdr.Runtime.Instance.Configuration.ProfileStats) { mdr.Runtime.Instance.Counters.GetCounter("ToObject").Count++; string toObjectCounterName = "ToObject_" + result.ValueType; mdr.Runtime.Instance.Counters.GetCounter(toObjectCounterName).Count++; } result.Set(Operations.Convert.ToObject.Run(ref result)); interpreter.PopLocation(this, ref result); }