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;
21 internal EmitContext (TypeBuilder type)
27 public class CodeGenerator {
29 private static string MODULE = "JScript Module";
31 internal static string mod_name;
32 internal static AppDomain app_domain;
33 internal static AssemblyName assembly_name;
34 internal static AssemblyBuilder assembly_builder;
35 internal static ModuleBuilder module_builder;
37 internal static void Init (string file_name)
39 app_domain = Thread.GetDomain ();
41 assembly_name = new AssemblyName ();
42 assembly_name.Name = trim_extension (file_name);
46 assembly_builder = app_domain.DefineDynamicAssembly (
48 AssemblyBuilderAccess.RunAndSave);
50 module_builder = assembly_builder.DefineDynamicModule (
52 assembly_name.Name + ".exe",
56 internal static string trim_extension (string file_name)
58 int index = file_name.IndexOf ('.');
63 return file_name.Substring (0, index);
66 internal static void Save (string target_name)
68 assembly_builder.Save (target_name);
71 internal static void Emit (AST prog)
76 TypeBuilder type_builder;
77 type_builder = module_builder.DefineType ("JScript 0");
78 EmitContext ec = new EmitContext (type_builder);
82 ec.type_builder.CreateType ();
85 public static void Run (string file_name, AST prog)
87 CodeGenerator.Init (file_name);
88 CodeGenerator.Emit (prog);
90 CodeGenerator.Save (trim_extension (file_name) +