Exemple #1
0
        protected ObjectDef EmitAdditiveExpression(CParser.AdditiveExpressionContext additiveExpression)
        {
            ObjectDef returnObjectDef = null;

            if (additiveExpression.multiplicativeExpression() != null)
            {
                returnObjectDef = EmitMultiplicativeExpression(additiveExpression.multiplicativeExpression());
            }

            if (additiveExpression.multiplicativeExpression() != null &&
                additiveExpression.additiveExpression() != null)
            {
                var additiveObj = EmitAdditiveExpression(additiveExpression.additiveExpression());

                additiveObj.Load();
                returnObjectDef.Load();

                if (additiveExpression.Plus() != null)
                {
                    _generatorIL.Emit(OpCodes.Add);
                }
                else if (additiveExpression.Minus() != null)
                {
                    _generatorIL.Emit(OpCodes.Sub);
                }

                returnObjectDef = LocalObjectDef.AllocateLocal(typeof(int));
            }

            return(returnObjectDef);
        }
        public override void ExitAdditiveExpression(CParser.AdditiveExpressionContext context)
        {
            if (context.additiveExpression() != null)
            {
                string operation = context.GetText().Substring(context.additiveExpression().GetText().Length, 1);

                if (operation == "+")
                {
                    //additiveExpression '+' multiplicativeExpression
                    SafeCall(context, CExpression.AdditionOperator);
                }
                else if (operation == "-")
                {
                    //additiveExpression '-' multiplicativeExpression
                    SafeCall(context, CExpression.SubtractionOperator);
                }
            }
        }