internal static CodeGen GenerateModuleInitialize(CompilerContext context, GlobalSuite gs, TypeGen tg, CustomModuleInit customInit) { CodeGen ncg = tg.DefineUserHiddenMethod(MethodAttributes.Public, "Initialize", typeof(void), Type.EmptyTypes); ncg.Context = context; if (Options.StaticModules) { ncg.Names = CodeGen.CreateStaticFieldNamespace(tg); } else { throw new NotImplementedException(); //.names = new FieldNamespace(null, tg, new ModuleSlot(tg.myType)); } if (context.TrueDivision) { ncg.ModuleSlot.EmitGet(ncg); ncg.EmitInt(1); ncg.EmitCall(typeof(ICallerContext), "set_TrueDivision"); } // Add __doc__ and __name__ ncg.Names.CreateGlobalSlot(Name.Make("__doc__")); ncg.Names.CreateGlobalSlot(Name.Make("__name__")); string doc = gs.GetDocString(); ncg.EmitStringOrNull(doc); ncg.EmitSet(Name.Make("__doc__")); if (customInit != null) { customInit(ncg); } gs.Emit(ncg); ncg.EmitPosition(Location.None, Location.None); ncg.EmitReturn(); FinishCustomDict(tg, ncg.Names); return(ncg); }
internal static CodeGen GenerateModuleInitialize(CompilerContext context, GlobalSuite gs, TypeGen tg, bool staticTypes, CustomModuleInit customInit) { CodeGen ncg = tg.DefineMethodOverride(typeof(CompiledModule).GetMethod("Initialize", BindingFlags.Public | BindingFlags.Instance)); ncg.Context = context; ncg.EmitSetTraceBackUpdateStatus(false); ncg.Names = CodeGen.CreateStaticFieldNamespace(tg); if (context.TrueDivision) { ncg.ModuleSlot.EmitGet(ncg); ncg.EmitInt(1); ncg.EmitCall(typeof(ICallerContext), "set_TrueDivision"); } // Add __doc__ and __name__ ncg.Names.CreateGlobalSlot(SymbolTable.Doc); ncg.Names.CreateGlobalSlot(SymbolTable.Name); string doc = gs.Documentation; ncg.EmitStringOrNull(doc); ncg.EmitSet(SymbolTable.Doc); if (customInit != null) customInit(ncg); if (staticTypes) { UserTypeGenerator.DoStaticCompilation(gs, ncg); } else { gs.Emit(ncg); } ncg.EmitPosition(Location.None, Location.None); ncg.EmitReturn(); ncg.Finish(); FinishCustomDict(tg, ncg.Names); return ncg; }