Skip to content

Commit 58b1597

Browse files
committed
Assembler: fixup global methods.
1 parent b5249f5 commit 58b1597

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

Naggum.Assembler/Assembler.fs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2424
let 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

4850
let 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

Comments
 (0)