@@ -11,7 +11,7 @@ let private getMethodAttributes (m : MethodDefinition) =
1111 let conditions =
1212 [ ( m.Visibility = Public, MethodAttributes.Public)
1313 ( true , MethodAttributes.Static) ] // TODO: Proper static method detection
14-
14+
1515 conditions
1616 |> List.map ( fun ( c , r ) -> if c then r else empty)
1717 |> List.fold (|||) empty
@@ -23,7 +23,7 @@ let private findMethod (signature : MethodSignature) =
2323
2424let private buildMethodBody ( m : MethodDefinition ) ( builder : MethodBuilder ) =
2525 let generator = builder.GetILGenerator ()
26-
26+
2727 m.Body
2828 |> List.iter ( function
2929 | Call signature ->
@@ -32,18 +32,20 @@ let private buildMethodBody (m : MethodDefinition) (builder : MethodBuilder) =
3232 | Ldstr string -> generator.Emit ( OpCodes.Ldstr, string)
3333 | Ret -> generator.Emit ( OpCodes.Ret))
3434
35- let private assembleUnit ( builder : ModuleBuilder ) = function
35+ let private assembleUnit ( assemblyBuilder : AssemblyBuilder ) ( builder : ModuleBuilder ) = function
3636 | Method m ->
3737 let name = m.Name
3838 let attributes = getMethodAttributes m
3939 let returnType = m.ReturnType
4040 let argumentTypes = Array.ofList m.ArgumentTypes
41+ System.Diagnostics.Debug.Print ( sprintf " %A " m)
4142 let methodBuilder = builder.DefineGlobalMethod ( name,
4243 attributes,
4344 returnType,
4445 argumentTypes)
46+ if Set.contains EntryPoint m.Metadata then
47+ assemblyBuilder.SetEntryPoint methodBuilder
4548 buildMethodBody m methodBuilder
46-
4749
4850let private assembleAssembly ( assembly : Assembly ) =
4951 let name = AssemblyName assembly.Name
@@ -52,7 +54,8 @@ let private assembleAssembly (assembly : Assembly) =
5254 AssemblyBuilderAccess.Save)
5355 let fileName = assembly.Name + " .dll" // TODO: Proper file naming
5456 let moduleBuilder = builder.DefineDynamicModule ( assembly.Name, fileName)
55- assembly.Units |> List.iter ( assembleUnit moduleBuilder)
57+ assembly.Units |> List.iter ( assembleUnit builder moduleBuilder)
58+ moduleBuilder.CreateGlobalFunctions ()
5659 builder
5760
5861/// Assembles the intermediate program representation. Returns a list of
0 commit comments