Example #1
0
        public override void GenerateCode(CodeGenerator output)
        {
            var reg = condition.GenerateCode(output);

            this.Scope.Enter(output);
            if (@else != null)
            {
                output.AppendLine(this, $"JMPNOT {reg} @else_{this.NodeID}");
                body.GenerateCode(output);
                output.AppendLine(this, $"JMP @then_{this.NodeID}");
                output.AppendLine(this, $"@else_{this.NodeID}: NOP");
                @else.GenerateCode(output);
            }
            else
            {
                output.AppendLine(this, $"JMPNOT {reg} @then_{this.NodeID}");
                body.GenerateCode(output);
            }
            output.AppendLine(this, $"@then_{this.NodeID}: NOP");
            this.Scope.Leave(output);

            Compiler.Instance.DeallocRegister(ref reg);
        }
Example #2
0
        public override void GenerateCode(CodeGenerator output)
        {
            Compiler.Instance.PushLoop(this);

            output.AppendLine(this, $"@loop_start_{this.NodeID}: NOP");

            this.Scope.Enter(output);

            body.GenerateCode(output);

            var reg = condition.GenerateCode(output);

            output.AppendLine(this, $"JMPIF {reg} @loop_start_{this.NodeID}");

            output.AppendLine(this, $"@loop_end_{this.NodeID}: NOP");

            this.Scope.Leave(output);

            Compiler.Instance.DeallocRegister(ref reg);
            Compiler.Instance.PopLoop(this);
        }