private static LoopData MakeLoopBegin(TokenizerOutput program, TLine line) { var kwFor = (KwFor)line.Statement; var ret = new LoopData { StartLine = (program.Program.Count + 2) }; // step 1: var = initial NumVariable forVar = kwFor.Variable; program.Program.Add(line.Clone(new NumBinaryOperator(forVar, kwFor.Initial, "="))); ret.LoopVariable = forVar; // step 2: make step variable var stepVar = new NumVariable("$" + ret.StartLine + forVar.Name + "_StepVariable"); NumStatement stepValue = kwFor.Step ?? new NumConstant("1"); program.Program.Add(line.Clone(new NumBinaryOperator(stepVar, stepValue, "="))); ret.StepVariable = stepVar; // step 3: loop var condition = new NumBoolBinaryOperator(forVar, kwFor.End, ">"); var jmp = new KwrJumpIfTrue(condition, -1); program.Program.Add(line.Clone(jmp)); return(ret); }
public KwFor(NumVariable var, NumStatement initial, NumStatement end, NumStatement step) { Variable = var; Initial = initial; End = end; Step = step; }
public KwOn(NumStatement statement, object list) { Statement = statement; var l = (KwOnJumpList)list; Kind = l.Kind; JumpList = l.JumpList; }
public NfRnd(NumStatement numStatement) { Statement = numStatement; }
public NfFrac(NumStatement numStatement) { Statement = numStatement; }
public NotOperator(NumStatement st) { Statement = st; }
public Statement Visit(NumStatement numberStatement) { return(null); }
public Type Visit(NumStatement numStatement, FunctionGeneratorEnvironment arg) { Program.Emit(T42Instruction.PUSHINT(numStatement.num)); return(new IntType()); }
public SfRight(StringStatement statement, NumStatement positionStart) { Statement = statement; PositionStart = positionStart; }
public SfMid(StringStatement statement, NumStatement positionStart, NumStatement positionEnd) { Statement = statement; PositionStart = positionStart; PositionEnd = positionEnd; }
public KwRandomize(NumStatement numStatement) { Statement = numStatement; }
public KwPause(NumStatement interval) { Interval = interval; }
public KwLocate(NumStatement x, NumStatement y) { X = x; Y = y; }
public NumBoolBinaryOperator(NumStatement l, NumStatement r, string op) : base(l, r, op) { }
public Type Visit(NumStatement numStatement) { return(new IntType()); }
public Void Visit(NumStatement numberStatement, SortedSet <string> free) { return(null); }
public SfStr(NumStatement numStatement) { Statement = numStatement; }
public SfChr(NumStatement numStatement) { Statement = numStatement; }
public NfInt(NumStatement numStatement) { Statement = numStatement; }
public IValue Visit(NumStatement numStatement) { return(new NumberValue(numStatement.num)); }
public NumUnaryMinus(NumStatement st) { Statement = st; }