Exemple #1
0
 public override void Emit()
 {
     //MarkSequencePoint(context);
     IL.BeginCatchBlock(exType.SharpType);
     EmitHelper.StormVar(IL, exSymbol.VarBuilder);
     StmtBody.Emit();
     IL.EndExceptionBlock();
 }
Exemple #2
0
 public override void Emit()
 {
     //EmitHelper.LoadInt(IL, 1);
     //IL.Emit(OpCodes.Ceq);
     //IL.Emit(OpCodes.Brfalse, EndLabel);
     StmtBody.Emit();
     //IL.Emit(OpCodes.Br, EndLabel);
 }
Exemple #3
0
 public override void Emit()
 {
     IL.MarkLabel(CurrentLabel);
     ConditionExp.Emit();
     EmitHelper.LoadInt(IL, 1);
     IL.Emit(OpCodes.Ceq);
     IL.Emit(OpCodes.Brfalse, NextLabel);
     StmtBody.Emit();
     IL.Emit(OpCodes.Br, EndLabel);
 }
Exemple #4
0
        //public override CodePosition Position
        //{
        //    get { return DangToken.Position; }
        //}

        public override void Emit()
        {
            var True_Label  = IL.DefineLabel();
            var False_Label = IL.DefineLabel();

            IL.MarkLabel(True_Label);
            ConditionExp.Emit();
            EmitHelper.LoadInt(IL, 1);
            IL.Emit(OpCodes.Ceq);
            IL.Emit(OpCodes.Brfalse, False_Label);
            StmtBody.Emit();
            IL.Emit(OpCodes.Br, True_Label);
            IL.MarkLabel(False_Label);
        }
Exemple #5
0
        public void EmitBody()
        {
            var symbols = this.ProcContext.Symbols;
            var IL      = this.ProcContext.EmitContext.ILout;

            this.ProcContext.LoacalVarList.Reverse();
            for (int i = 0; i < this.ProcContext.LoacalVarList.Count; i++)
            {
                string         ident     = this.ProcContext.LoacalVarList[i];
                SymbolLocalVar varSymbol = symbols.Get(ident) as SymbolLocalVar;
                varSymbol.VarBuilder = IL.DeclareLocal(varSymbol.SymbolZType.SharpType);
                varSymbol.VarBuilder.SetLocalSymInfo(varSymbol.SymbolName);
            }

            Body.Emit();
            ProcContext.EmitContext.ILout.Emit(OpCodes.Ret);
        }
Exemple #6
0
        public override void Emit()
        {
            TimesExp.Emit();
            EmitHelper.StormVar(IL, CountSymbol.VarBuilder);

            EmitHelper.LoadInt(IL, START_INDEX);
            EmitHelper.StormVar(IL, IndexSymbol.VarBuilder);

            var True_Label  = IL.DefineLabel();
            var False_Label = IL.DefineLabel();

            EmitCondition();
            IL.Emit(OpCodes.Brfalse, False_Label);

            //定义一个标签,表示从下面开始进入循环体
            IL.MarkLabel(True_Label);
            RepeatBody.Emit();
            EmitHelper.Inc(IL, IndexSymbol.VarBuilder);
            EmitCondition();

            IL.Emit(OpCodes.Brtrue, True_Label);
            IL.MarkLabel(False_Label);
        }
Exemple #7
0
        //int START_INDEX = 0;
        public override void Emit()
        {
            var True_Label  = IL.DefineLabel();
            var False_Label = IL.DefineLabel();

            ForeachListExp.Emit();
            EmitHelper.StormVar(IL, listSymbol.VarBuilder);

            generateCount();
            genInitIndex();

            EmitCondition();
            IL.Emit(OpCodes.Brfalse, False_Label);

            //定义一个标签,表示从下面开始进入循环体
            IL.MarkLabel(True_Label);
            emitItem();
            StmtBody.Emit();
            EmitHelper.Inc(IL, indexSymbol.VarBuilder);
            EmitCondition();
            IL.Emit(OpCodes.Brtrue, True_Label);
            IL.MarkLabel(False_Label);
        }
 public void EmitBody()
 {
     Body.Emit();
     ProcContext.EmitContext.ILout.Emit(OpCodes.Ret);
 }