예제 #1
0
        public Context(Type rootType)
        {
            RootType = rootType;
            dm       = new DynamicMethod("dyn_instantiator",
                                         CompilerServices.TObject, new Type [] { typeof(Instantiator), typeof(Interface) }, true);
            il = dm.GetILGenerator(256);

            il.DeclareLocal(typeof(GraphicObject));
            il.Emit(OpCodes.Nop);
            //set local GraphicObject to root object
            il.Emit(OpCodes.Newobj, rootType.GetConstructors() [0]);
            il.Emit(OpCodes.Stloc_0);
            CompilerServices.emitSetCurInterface(il);
        }
예제 #2
0
파일: IMLContext.cs 프로젝트: masums/Crow
        public IMLContext(Type rootType)
        {
            RootType = rootType;
            dm       = new DynamicMethod("dyn_instantiator",
                                         CompilerServices.TObject, new Type [] { typeof(Instantiator), typeof(Interface) }, true);
            il = dm.GetILGenerator(256);

            il.DeclareLocal(typeof(GraphicObject));
            il.Emit(OpCodes.Nop);
            //set local GraphicObject to root object
            ConstructorInfo ci = rootType.GetConstructor(
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,
                null, Type.EmptyTypes, null);

            if (ci == null)
            {
                throw new Exception("No default parameterless constructor found in " + rootType.Name);
            }
            il.Emit(OpCodes.Newobj, ci);
            il.Emit(OpCodes.Stloc_0);
            CompilerServices.emitSetCurInterface(il);
        }