protected ObjectDef EmitMultiplicativeExpression(CParser.MultiplicativeExpressionContext multiplicativeExpression) { ObjectDef returnObjectDef = null; if (multiplicativeExpression.castExpression() != null) { returnObjectDef = EmitCastExpression(multiplicativeExpression.castExpression()); } if (multiplicativeExpression.castExpression() != null && multiplicativeExpression.multiplicativeExpression() != null) { var multiplicativeObj = EmitMultiplicativeExpression(multiplicativeExpression.multiplicativeExpression()); multiplicativeObj.Load(); returnObjectDef.Load(); if (multiplicativeExpression.Star() != null) { _generatorIL.Emit(OpCodes.Mul); } else if (multiplicativeExpression.Div() != null) { _generatorIL.Emit(OpCodes.Div); } else if (multiplicativeExpression.Mod() != null) { _generatorIL.Emit(OpCodes.Rem); } returnObjectDef = LocalObjectDef.AllocateLocal(typeof(int)); } return(returnObjectDef); }
public override void ExitMultiplicativeExpression(CParser.MultiplicativeExpressionContext context) { if (context.multiplicativeExpression() != null) { string operation = context.GetText().Substring(context.multiplicativeExpression().GetText().Length, 1); if (operation == "*") { //multiplicativeExpression '*' castExpression SafeCall(context, CExpression.MultiplicationOperator); } else if (operation == "/") { //multiplicativeExpression '/' castExpression SafeCall(context, CExpression.DivisionOperator); } else if (operation == "%") { //multiplicativeExpression '%' castExpression SafeCall(context, CExpression.ModuloOperator); } } }