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); 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); 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); 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) { 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); }