IKVM.Internal.CodeEmitter.EmitCastclass C# (CSharp) Method

EmitCastclass() private method

private EmitCastclass ( Type type ) : void
type IKVM.Reflection.Type
return void
        internal void EmitCastclass(Type type)
        {
            if (verboseCastFailure != null)
            {
                CodeEmitterLocal lb = DeclareLocal(Types.Object);
                Emit(OpCodes.Stloc, lb);
                Emit(OpCodes.Ldloc, lb);
                Emit(OpCodes.Isinst, type);
                Emit(OpCodes.Dup);
                CodeEmitterLabel ok = DefineLabel();
                Emit(OpCodes.Brtrue_S, ok);
                Emit(OpCodes.Ldloc, lb);
                Emit(OpCodes.Brfalse_S, ok);	// handle null
                Emit(OpCodes.Ldtoken, type);
                Emit(OpCodes.Ldloc, lb);
                Emit(OpCodes.Call, verboseCastFailure);
                MarkLabel(ok);
            }
            else
            {
                Emit(OpCodes.Castclass, type);
            }
        }

Usage Example

Example #1
0
		internal override void EmitCheckcast(CodeEmitter ilgen)
		{
			if (IsRemapped)
			{
				TypeWrapper shadow = ClassLoaderWrapper.GetWrapperFromType(type);
				MethodInfo method = shadow.TypeAsBaseType.GetMethod("__<checkcast>");
				if (method != null)
				{
					ilgen.Emit(OpCodes.Call, method);
					return;
				}
			}
			ilgen.EmitCastclass(type);
		}
All Usage Examples Of IKVM.Internal.CodeEmitter::EmitCastclass