Example #1
0
    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);
    }
Example #2
0
    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);
    }
Example #3
0
    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);
    }
Example #4
0
    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);
    }
Example #5
0
 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);
 }