5 // Cesar Lopez Nataren (cesar@ciencias.unam.mx)
7 // (C) 2003, Cesar Lopez Nataren
11 using System.Reflection;
12 using System.Reflection.Emit;
13 using System.Threading;
15 namespace Microsoft.JScript {
17 internal class EmitContext {
19 internal TypeBuilder type_builder;
20 internal ILGenerator ig;
22 internal EmitContext (TypeBuilder type)
28 public class CodeGenerator {
30 private static string MODULE = "JScript Module";
32 internal static string mod_name;
33 internal static AppDomain app_domain;
34 internal static AssemblyName assembly_name;
35 internal static AssemblyBuilder assembly_builder;
36 internal static ModuleBuilder module_builder;
38 internal static void Init (string file_name)
40 app_domain = Thread.GetDomain ();
42 assembly_name = new AssemblyName ();
43 assembly_name.Name = trim_extension (file_name);
47 assembly_builder = app_domain.DefineDynamicAssembly (
49 AssemblyBuilderAccess.RunAndSave);
51 module_builder = assembly_builder.DefineDynamicModule (
53 assembly_name.Name + ".exe",
57 internal static string trim_extension (string file_name)
59 int index = file_name.IndexOf ('.');
64 return file_name.Substring (0, index);
67 internal static void Save (string target_name)
69 assembly_builder.Save (target_name);
72 internal static void Emit (AST prog)
77 TypeBuilder type_builder;
78 type_builder = module_builder.DefineType ("JScript 0");
79 EmitContext ec = new EmitContext (type_builder);
83 ec.type_builder.CreateType ();
86 public static void Run (string file_name, AST prog)
88 CodeGenerator.Init (file_name);
89 CodeGenerator.Emit (prog);
91 CodeGenerator.Save (trim_extension (file_name) +