Advertisement
Guest User

Untitled

a guest
Apr 28th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.03 KB | None | 0 0
  1. module ILMethodBuilder
  2. open System.Reflection.Emit
  3. open System.Reflection
  4. open Env
  5.  
  6. let defineParam (newMethod : MethodBuilder) index arg =
  7.     newMethod.DefineParameter(index + 1, ParameterAttributes.None, arg) |> ignore
  8.  
  9. let createMethod (tb : TypeBuilder) name args =
  10.     let argTypes = Array.create (List.length args) typeof<int>
  11.     let newMethod = tb.DefineMethod(name, MethodAttributes.Public ||| MethodAttributes.Static, typeof<int>, argTypes)
  12.     List.iteri (defineParam newMethod) args
  13.     newMethod
  14.  
  15. let updateMeta meta newMethod name =
  16.     let currentMethodInfoMap = meta.methodInfoMap
  17.     { meta with methodInfoMap = Map.add name (newMethod :> MethodInfo) currentMethodInfoMap }
  18.  
  19. let defineMethod (tb : TypeBuilder) meta name args =
  20.     let newMethod = createMethod tb name args
  21.     updateMeta meta newMethod name
  22.  
  23. let defineMainMethod (ab : AssemblyBuilder) (tb : TypeBuilder) meta name args =
  24.     let newMethod = createMethod tb name args
  25.     ab.SetEntryPoint(newMethod)    
  26.     updateMeta meta newMethod name
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement