public static ToInteger ( |
||
generator | The IL generator. | |
fromType | PrimitiveType | The type to convert from. |
리턴 | void |
/// <summary> /// Pops the value on the stack, converts it from one type to another, then pushes the /// result onto the stack. /// </summary> /// <param name="il"> The IL generator. </param> /// <param name="fromType"> The type to convert from. </param> /// <param name="toType"> The type to convert to. </param> private static void EmitTypeConversion(ILGenerator il, Type fromType, Type toType) { // If the source type equals the destination type, then there is nothing to do. if (fromType == toType) { return; } // Emit for each type of argument we support. if (toType == typeof(int)) { EmitConversion.ToInteger(il, PrimitiveTypeUtilities.ToPrimitiveType(fromType)); } else if (typeof(ObjectInstance).IsAssignableFrom(toType)) { EmitConversion.Convert(il, PrimitiveTypeUtilities.ToPrimitiveType(fromType), PrimitiveType.Object); if (toType != typeof(ObjectInstance)) { // Convert to null if the from type isn't compatible with the to type. // For example, if the target type is FunctionInstance and the from type is ArrayInstance, then pass null. il.IsInstance(toType); } } else { EmitConversion.Convert(il, PrimitiveTypeUtilities.ToPrimitiveType(fromType), PrimitiveTypeUtilities.ToPrimitiveType(toType)); } }