Пример #1
0
        protected ObjectDef EmitShiftExpression(CParser.ShiftExpressionContext shiftExpression)
        {
            ObjectDef returnObjectDef = null;

            if (shiftExpression.additiveExpression() != null)
            {
                returnObjectDef = EmitAdditiveExpression(shiftExpression.additiveExpression());
            }

            if (shiftExpression.additiveExpression() != null &&
                shiftExpression.shiftExpression() != null)
            {
                var shiftObj = EmitShiftExpression(shiftExpression.shiftExpression());

                shiftObj.Load();
                returnObjectDef.Load();

                if (shiftExpression.LeftShift() != null)
                {
                    _generatorIL.Emit(OpCodes.Shl);
                }
                else if (shiftExpression.RightShift() != null)
                {
                    _generatorIL.Emit(OpCodes.Shr);
                }

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

            return(returnObjectDef);
        }
Пример #2
0
        public override void ExitShiftExpression(CParser.ShiftExpressionContext context)
        {
            if (context.shiftExpression() != null)
            {
                string operation = context.GetText().Substring(context.shiftExpression().GetText().Length, 2);

                if (operation == "<<")
                {
                    //shiftExpression '<<' additiveExpression
                    SafeCall(context, CExpression.BitwiseLeftShiftOperator);
                }
                else if (operation == ">>")
                {
                    //shiftExpression '>>' additiveExpression
                    SafeCall(context, CExpression.BitwiseRightShiftOperator);
                }
            }
        }