Joh*_*ler 7 compiler-construction haskell language-design llvm
背景:我写了一个玩具Lisp解释器,我试图添加LLVM JIT功能.目前,已施加以下限制:
鉴于:
compile :: [Value] -- List of Formal Parameters
-> [Value] -- Body of function
-> CodeGenModule(Function a)`
Run Code Online (Sandbox Code Playgroud)
问题:如何生成一个函数,其中参数的数量等于形式参数列表的长度?
我不知道是否可以仅使用EDSL来实现这一点LLVM.Core
(类型确实非常多毛)但是如果你看一下LLVM.FFI.Core
,你会发现用于操作LLVM函数类型和创建LLVM函数的低级功能.这导致了以下行动计划:
TypeRef
你的功能创建一个functionType
.addFunction
.appendBasicBlock
/ 使用基本块填充它insertBasicBlock
.使用getParam
引用您的基本块内部函数的参数.应该可以利用漂亮的monadic EDSL语法来构造基本块.另外,看一下LLVM.Core.Util
,它包含一些用于处理FFI层的辅助函数.