예제 #1
0
 /// <summary>
 /// Generates code for a let command node
 /// </summary>
 /// <param name="letCommand">The node to generate code for</param>
 private void GenerateCodeForLetCommand(LetCommandNode letCommand)
 {
     Debugger.Write("Generating code for Let Command");
     scopes.AddScope();
     GenerateCodeFor(letCommand.Declaration);
     GenerateCodeFor(letCommand.Command);
     code.AddInstruction(OpCode.POP, 0, 0, scopes.GetLocalScopeSize());
     scopes.RemoveScope();
 }
예제 #2
0
        private void GenerateCodeForForCommand(ForCommandNode forCommand)
        {
            Debugger.Write("Generating code for the ForCommandNode");

            scopes.AddScope();
            GenerateCodeFor(forCommand.Assign);
            Address forJumpAddress = code.NextAddress;

            GenerateCodeFor(forCommand.Expression);
            Address commandJumpAddress = code.NextAddress;

            code.AddInstruction(OpCode.JUMPIF, Register.CB, FalseValue, 0);
            GenerateCodeFor(forCommand.Command);
            code.AddInstruction(OpCode.JUMP, Register.CB, 0, forJumpAddress);
            code.PatchInstructionToJumpHere(commandJumpAddress);
            code.AddInstruction(OpCode.POP, 0, 0, scopes.GetLocalScopeSize());
            scopes.RemoveScope();
        }
예제 #3
0
        private void GenerateCodeForForCommand(ForCommandNode forCommand)
        {
            scopes.AddScope();
            Debugger.WriteDebuggingInfo("Generating code for For command");
            GenerateCodeFor(forCommand.Expression);
            Address forJumpAddress = code.NextAddress;

            code.AddInstruction(OpCode.JUMPIF, Register.CB, FalseValue, 0);
            code.PatchInstructionToJumpHere(forJumpAddress);
            GenerateCodeFor(forCommand.Identifier);
            Address idJumpAddress = code.NextAddress;

            code.PatchInstructionToJumpHere(idJumpAddress);
            //  code.AddInstruction(OpCode.JUMPIF, Register.CB, FalseValue, 0);
            GenerateCodeFor(forCommand.ToExpression);
            Address toJumpAddress = code.NextAddress;

            code.PatchInstructionToJumpHere(toJumpAddress);
            // code.AddInstruction(OpCode.JUMPIF, Register.CB, FalseValue, 0);
            GenerateCodeFor(forCommand.BecomesExpression);
            Address becomesJumpAddress = code.NextAddress;

            code.PatchInstructionToJumpHere(becomesJumpAddress);
        }