Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module ILMethodBuilder
- open System.Reflection.Emit
- open System.Reflection
- open Env
- let defineParam (newMethod : MethodBuilder) index arg =
- newMethod.DefineParameter(index + 1, ParameterAttributes.None, arg) |> ignore
- let createMethod (tb : TypeBuilder) name args =
- let argTypes = Array.create (List.length args) typeof<int>
- let newMethod = tb.DefineMethod(name, MethodAttributes.Public ||| MethodAttributes.Static, typeof<int>, argTypes)
- List.iteri (defineParam newMethod) args
- newMethod
- let updateMeta meta newMethod name =
- let currentMethodInfoMap = meta.methodInfoMap
- { meta with methodInfoMap = Map.add name (newMethod :> MethodInfo) currentMethodInfoMap }
- let defineMethod (tb : TypeBuilder) meta name args =
- let newMethod = createMethod tb name args
- updateMeta meta newMethod name
- let defineMainMethod (ab : AssemblyBuilder) (tb : TypeBuilder) meta name args =
- let newMethod = createMethod tb name args
- ab.SetEntryPoint(newMethod)
- updateMeta meta newMethod name
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement