private void CodeNumber(NumberExpression number, List<LocalVariable> locals, List<GlobalVariable> globals, FuncParam[] parameters, ILGenerator il) { switch (number.Num.Value) { case 0: il.Emit(OpCodes.Ldc_I4_0); break; case 1: il.Emit(OpCodes.Ldc_I4_1); break; case 2: il.Emit(OpCodes.Ldc_I4_2); break; case 3: il.Emit(OpCodes.Ldc_I4_3); break; case 4: il.Emit(OpCodes.Ldc_I4_4); break; case 5: il.Emit(OpCodes.Ldc_I4_5); break; case 6: il.Emit(OpCodes.Ldc_I4_6); break; case 7: il.Emit(OpCodes.Ldc_I4_7); break; case 8: il.Emit(OpCodes.Ldc_I4_8); break; default: il.Emit(OpCodes.Ldc_I4, number.Num.Value); break; } }
private Expression SimExpr() { Expression ex = null; if (_la == Terminals.Minus || _la == Terminals.Inv) { var op = UnaryOp(); var e = Expr(); ex = new UnaryExpression(op, e); } else if (_la == Terminals.LPar) { Get(); ex = Expr(); Expect(Terminals.RPar); } else if (_la == Terminals.Num) { var num = _la as Num; Get(); ex = new NumberExpression(num); } else if (_la == Terminals.Id) { if (IsAssign()) { ex = Assign(); } else { ex = Access(); } } else SynErr(38); return ex; }