@@ -37,10 +37,22 @@ open Context
3737let private prologue ( ilGen : ILGenerator ) =
3838 ilGen.BeginScope()
3939
40- let private epilogue context typeBuilder ( ilGen : ILGenerator ) =
40+ let private epilogue context ( ilGen : ILGenerator ) =
4141 ilGen.Emit OpCodes.Ret
4242 ilGen.EndScope()
4343
44+ let compileMethod context ( generatorFactory : IGeneratorFactory ) body ( methodBuilder : MethodBuilder ) fileName =
45+ let ilGenerator = methodBuilder.GetILGenerator()
46+
47+ prologue ilGenerator
48+ try
49+ let gen = generatorFactory.MakeBody context body
50+ gen.Generate ilGenerator
51+ with
52+ | ex -> printfn " File: %A \n Form: %A \n Error: %A " fileName sexp ex.Source
53+
54+ epilogue context ilGenerator
55+
4456let compile ( source : Stream ) ( assemblyName : string ) ( fileName : string ) ( asmRefs : string list ): unit =
4557 let assemblyName = new AssemblyName( assemblyName)
4658 let assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess.Save)
@@ -51,8 +63,6 @@ let compile (source : Stream) (assemblyName : string) (fileName : string) (asmRe
5163 let gf = new GeneratorFactory( typeBuilder) :> IGeneratorFactory
5264 assemblyBuilder.SetEntryPoint methodBuilder
5365
54- let ilGenerator = methodBuilder.GetILGenerator()
55-
5666 let context = Context.create ()
5767
5868 //loading language runtime
@@ -63,15 +73,8 @@ let compile (source : Stream) (assemblyName : string) (fileName : string) (asmRe
6373 context.loadAssembly <| Assembly.Load " mscorlib"
6474 List.iter context.loadAssembly ( List.map Assembly.LoadFrom asmRefs)
6575
66- prologue ilGenerator
67- try
68- let body = Reader.parse fileName source
69- let gen = gf.MakeBody context body
70- gen.Generate ilGenerator
71- with
72- | ex -> printfn " File: %A \n Form: %A \n Error: %A " fileName sexp ex.Source
73-
74- epilogue context typeBuilder ilGenerator
76+ let body = Reader.parse fileName source
77+ compileMethod context gf body methodBuilder fileName
7578
7679 typeBuilder.CreateType()
7780 |> ignore
0 commit comments