在编译时未知参数的数量时,在LLVM(haskell绑定)中添加函数

时间:2011-06-23 02:27:57

标签: haskell compiler-construction language-design llvm

背景:我写了一个玩具Lisp解释器,我正在尝试添加LLVM JIT功能。目前,已经施加了以下限制:

  • 功能
  • 中仅允许使用整数值
  • 变量只能引用形式参数

鉴于

compile :: [Value] -- List of Formal Parameters
        -> [Value] -- Body of function
        -> CodeGenModule(Function a)`

问题:如何生成参数个数等于形式参数列表长度的函数?

1 个答案:

答案 0 :(得分:6)

我不知道是否有可能只使用来自LLVM.Core的EDSL(这些类型确实非常多毛),但是如果你看LLVM.FFI.Core,你会发现较低的manipulating LLVM function typescreating LLVM functions的级别功能。这导致了以下行动计划:

  • 使用TypeRef为您的函数创建functionType
  • 使用addFunction将此功能添加到您的模块。
  • 使用appendBasicBlock / insertBasicBlock使用基本块填充它。使用getParam引用基本块内的函数参数。

应该可以利用漂亮的monadic EDSL语法来构造基本块。另外,查看LLVM.Core.Util,它包含一些用于处理FFI层的辅助函数。