public override void Execute(EpsInterpreter interpreter) { var operandStack = interpreter.OperandStack; bool isStopped; var proc = operandStack.Pop(); interpreter.EnterStoppedContext(); try { interpreter.Execute(proc); isStopped = interpreter.GetStopProcedureStatus(); } catch { isStopped = true; } var boolean = new BooleanOperand(isStopped); operandStack.Push(boolean); interpreter.LeaveStoppedContext(); }
public override void Execute(EpsInterpreter interpreter) { var operandStack = interpreter.OperandStack; var category = operandStack.PopStringValue(); var scratch = operandStack.PopString(); var proc = operandStack.Pop(); var template = operandStack.PopStringValue(); var list = interpreter.ResourceManager.GetFilteredResources(category, template); foreach (var key in list) { var keyName = OperandHelper.TryGetStringValue(key); if (keyName != null) { scratch.Value = keyName; operandStack.Push(scratch); } else { operandStack.Push(key); } interpreter.Execute(proc); if (interpreter.BreakCurrentLoop) { break; } } }
public override void Execute(EpsInterpreter interpreter) { var operandStack = interpreter.OperandStack; var proc2 = operandStack.Pop(); var proc1 = operandStack.Pop(); var boolean = operandStack.PopBoolean(); if (boolean.Value) { interpreter.Execute(proc1); } else { interpreter.Execute(proc2); } }
public override void Execute(EpsInterpreter interpreter) { var op = interpreter.ErrorDict.TryFind("handleerror"); if (op != null) { interpreter.Execute(op); } }
/// <summary> /// Execute the operand /// </summary> public override void Execute(EpsInterpreter interpreter) { if (interpreter.BreakCurrentLoop) { return; } if (BoundOperand != null) { interpreter.Execute(BoundOperand); } else { var name = new NameOperand { Value = this.Name }; var op = DictionaryStackHelper.FindValue(interpreter.DictionaryStack, name); if (op != null) { interpreter.Execute(op); } else { // Throwing an exception when the interpreter is within a stopped context // would also be ok and is the prefered behavior. We test for the stopped // context here to make debugging a bit easier. So that the debugger // doesn't stop when the "exception" is handled in the postscript script, // e.g. when tests are made if a command is available. if (!interpreter.IsInStoppedContext) { throw new Exception($"unknown command \"{Name}\""); } interpreter.StopProcedure(); } } }
public override void Execute(EpsInterpreter interpreter) { var proc = interpreter.OperandStack.Pop(); interpreter.ResetExitCurrentLoop(); while (true) { interpreter.Execute(proc); if (interpreter.BreakCurrentLoop) { break; } } interpreter.ResetExitCurrentLoop(); }
public override void Execute(EpsInterpreter interpreter) { var operandStack = interpreter.OperandStack; var proc = operandStack.Pop(); var countOp = operandStack.PopInteger(); interpreter.ResetExitCurrentLoop(); for (int i = 0; i < countOp.Value; i++) { interpreter.Execute(proc); if (interpreter.BreakCurrentLoop) { break; } } interpreter.ResetExitCurrentLoop(); }
public override void Execute(EpsInterpreter interpreter) { var operand = interpreter.OperandStack.Pop(); interpreter.Execute(operand); }
public override void Execute(EpsInterpreter interpreter) { var operandStack = interpreter.OperandStack; var proc = operandStack.Pop(); var operand = operandStack.Pop(); interpreter.ResetExitCurrentLoop(); switch (operand) { case DictionaryOperand dictionaryOperand: { foreach (var kv in dictionaryOperand.Dictionary) { operandStack.Push(kv.Key); operandStack.Push(kv.Value); interpreter.Execute(proc); if (interpreter.BreakCurrentLoop) { break; } } break; } case ArrayOperand arrayOperand: { foreach (var ao in arrayOperand.Values) { operandStack.Push(ao.Operand); interpreter.Execute(proc); if (interpreter.BreakCurrentLoop) { break; } } break; } case StringOperand stringOperand: { foreach (var ch in stringOperand.Value) { operandStack.Push(new IntegerOperand((int)ch)); interpreter.Execute(proc); if (interpreter.BreakCurrentLoop) { break; } } break; } } interpreter.ResetExitCurrentLoop(); }