Example #1
0
		public static SingleLiteralElement Parse(string image, IServiceProvider services)
		{
            ExpressionParserOptions options = (ExpressionParserOptions)services.GetService(typeof(ExpressionParserOptions));
			SingleLiteralElement element = new SingleLiteralElement();

			try {
				float value = options.ParseSingle(image);
				return new SingleLiteralElement(value);
			} catch (OverflowException) {
				element.OnParseOverflow(image);
				return null;
			}
		}
Example #2
0
        // Emit the load of a constant field.  We can't emit a ldsfld/ldfld of a constant so we have to get its value
        // and then emit a ldc.
		private static void EmitLiteral(System.Reflection.FieldInfo fi, FleeILGenerator ilg, IServiceProvider services)
		{
			object value = fi.GetValue(null);
			Type t = value.GetType();
			TypeCode code = Type.GetTypeCode(t);
			LiteralElement elem = null;

			switch (code) {
				case TypeCode.Char:
				case TypeCode.Byte:
				case TypeCode.SByte:
				case TypeCode.Int16:
				case TypeCode.UInt16:
				case TypeCode.Int32:
					elem = new Int32LiteralElement(System.Convert.ToInt32(value));
					break;
				case TypeCode.UInt32:
					elem = new UInt32LiteralElement((UInt32)value);
					break;
				case TypeCode.Int64:
					elem = new Int64LiteralElement((Int64)value);
					break;
				case TypeCode.UInt64:
					elem = new UInt64LiteralElement((UInt64)value);
					break;
				case TypeCode.Double:
					elem = new DoubleLiteralElement((double)value);
					break;
				case TypeCode.Single:
					elem = new SingleLiteralElement((float)value);
					break;
				case TypeCode.Boolean:
					elem = new BooleanLiteralElement((bool)value);
					break;
				case TypeCode.String:
					elem = new StringLiteralElement((string)value);
					break;
				default:
					elem = null;
					Debug.Fail("Unsupported constant type");
					break;
			}

			elem.Emit(ilg, services);
		}