static DynamicAsmManager() { var asmName = new AssemblyName(TidaAsmName); AsmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave); ModuleBuilder = AsmBuilder.DefineDynamicModule(asmName.Name, asmName.Name + ".dll"); }
static DynamicAsmManager() { var asmName = new AssemblyName(TidaAsmName); AsmBuilder = AssemblyBuilder.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndCollect); ModuleBuilder = AsmBuilder.DefineDynamicModule(asmName.Name); }
public CodeEmitor(string name, Dictionary <string, FuncMeta> funcs) { Name = name; m_fileName = name + "_Script.exe"; FuncName2MethodInfo = new Dictionary <string, MethodInfo>(); AsmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(name), AssemblyBuilderAccess.RunAndSave); var moduleBuilder = AsmBuilder.DefineDynamicModule(name + "_MainModule", m_fileName); TypeBuilder = moduleBuilder.DefineType(name + "_MainClass"); GlobalField = TypeBuilder.DefineField("s_global", typeof(Dictionary <string, object>), FieldAttributes.Static | FieldAttributes.Private); buildStaticConstructor(); BuildinCodeEmitor.emitBuildins(this); var stmts = from kv in funcs select new StmtNodeVisitor_CodeEmitor(this, kv.Value); foreach (var stmt in stmts) { stmt.emit(); } m_mainClass = TypeBuilder.CreateType(); }