Skip to content

Commit 4dd1efb

Browse files
committed
ngc: factored out the method compiler.
1 parent af9a53a commit 4dd1efb

1 file changed

Lines changed: 15 additions & 12 deletions

File tree

ngc/Generator.fs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,22 @@ open Context
3737
let 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\nForm: %A\nError: %A" fileName sexp ex.Source
53+
54+
epilogue context ilGenerator
55+
4456
let 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\nForm: %A\nError: %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

Comments
 (0)