示例#1
0
 public override void Generate(ModuleContext context)
 {
     item2Exp.Generate(context);
     item1Exp.Generate(context);
     context.Add(new ByteCode {
         opCode = ByteCode.OpCode.GreaterEqual
     });
 }
示例#2
0
 public override void Generate(ModuleContext context)
 {
     rightList.Generate(context);
     leftList.Generate(context);
     context.Add(new ByteCode {
         opCode = ByteCode.OpCode.BindN, opArg = new LuaInteger(context.vm, ((LeftList2Expression)leftList).itemsList.Count)
     });
 }
示例#3
0
 public override void Generate(ModuleContext context)
 {
     paramsExp.Generate(context);
     targetExp.Generate(context);
     context.Add(new ByteCode {
         opCode = ByteCode.OpCode.Call
     });
 }
示例#4
0
        public override void Generate(ModuleContext context)
        {
            var module = new Module(new ModuleContext(context.vm, nameExp.value, context.level + 1)
            {
                argsList = argsList
            });

            context.vm.Add(module);
            moduleExp.Generate(module.context);
            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.Function, opArg = new LuaModule(context.vm, module)
            });
            nameExp.Generate(context);
            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.Bind
            });
        }
示例#5
0
        public override void Generate(ModuleContext context)
        {
            var jumpEnd = new LuaLabel(context.vm, null, 0);

            context.OnBreak(jumpEnd);
            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.Jump, opArg = jumpEnd
            });
        }
示例#6
0
 public override void Generate(ModuleContext context)
 {
     foreach (var item in itemsList)
     {
         item.Generate(context);
         context.Add(new ByteCode {
             opCode = ByteCode.OpCode.Clear
         });
     }
 }
示例#7
0
        public override void Generate(ModuleContext context)
        {
            condExp.Generate(context);
            var elseLabel = new LabelExpression(context.NewUID(), condExp.debugInfo);
            var endLabel  = new LabelExpression(context.NewUID(), condExp.debugInfo);
            var jumpElse  = new LuaLabel(context.vm, elseLabel.value, elseLabel.index);

            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.JumpNot, opArg = jumpElse
            });
            module1Exp.Generate(context);
            var jumpEnd = new LuaLabel(context.vm, endLabel.value, endLabel.index);

            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.Jump, opArg = jumpEnd
            });
            elseLabel.Generate(context);
            jumpElse.index = elseLabel.index;
            module2Exp.Generate(context);
            endLabel.Generate(context);
            jumpEnd.index = endLabel.index;
        }
示例#8
0
        public override void Generate(ModuleContext context)
        {
            context.BeginLoop();
            var beginLabel = new LabelExpression(context.NewUID(), condExp.debugInfo);

            beginLabel.Generate(context);
            var jumpBegin = new LuaLabel(context.vm, beginLabel.value, beginLabel.index);

            condExp.Generate(context);
            var endLabel = new LabelExpression(context.NewUID(), condExp.debugInfo);
            var jumpEnd  = new LuaLabel(context.vm, endLabel.value, endLabel.index);

            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.JumpNot, opArg = jumpEnd
            });
            moduleExp.Generate(context);
            context.Add(new ByteCode {
                opCode = ByteCode.OpCode.Jump, opArg = jumpBegin
            });
            endLabel.Generate(context);
            jumpEnd.index = endLabel.index;
            context.EndLoop(jumpEnd);
        }