xo-expression: naming: {Primitive,Function}ExprInterface
This commit is contained in:
parent
7ee41a4b71
commit
22670cda3d
9 changed files with 38 additions and 41 deletions
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
#include "xo/expression/Expression.hpp"
|
||||
#include "xo/expression/ConstantInterface.hpp"
|
||||
#include "xo/expression/PrimitiveInterface.hpp"
|
||||
#include "xo/expression/PrimitiveExprInterface.hpp"
|
||||
#include "xo/expression/Apply.hpp"
|
||||
#include "xo/expression/Lambda.hpp"
|
||||
#include "xo/expression/Variable.hpp"
|
||||
|
|
@ -110,7 +110,7 @@ namespace xo {
|
|||
**/
|
||||
llvm::Type * codegen_type(TypeDescr td);
|
||||
llvm::Value * codegen_constant(bp<xo::scm::ConstantInterface> expr);
|
||||
llvm::Function * codegen_primitive(bp<xo::scm::PrimitiveInterface> expr);
|
||||
llvm::Function * codegen_primitive(bp<xo::scm::PrimitiveExprInterface> expr);
|
||||
|
||||
/** like @ref codegen_primitive , but create wrapper function that accepts (and discards)
|
||||
* environment pointer as first argument.
|
||||
|
|
@ -118,7 +118,7 @@ namespace xo {
|
|||
* Implementation consists of tail call to natural primitive, that skips the unused
|
||||
* environment pointer
|
||||
**/
|
||||
llvm::Function * codegen_primitive_wrapper(bp<xo::scm::PrimitiveInterface> expr,
|
||||
llvm::Function * codegen_primitive_wrapper(bp<xo::scm::PrimitiveExprInterface> expr,
|
||||
llvm::IRBuilder<> & ir_builder);
|
||||
|
||||
/** Generate closure for invoking a primitive function.
|
||||
|
|
@ -126,7 +126,7 @@ namespace xo {
|
|||
* to support function-pointer-like behavior for a target function
|
||||
* that may resolve to primitive-or-lambda at runtime
|
||||
**/
|
||||
llvm::Value * codegen_primitive_closure(bp<xo::scm::PrimitiveInterface> expr,
|
||||
llvm::Value * codegen_primitive_closure(bp<xo::scm::PrimitiveExprInterface> expr,
|
||||
llvm::IRBuilder<> & ir_builder);
|
||||
|
||||
llvm::Value * codegen_apply(bp<xo::scm::Apply> expr,
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ namespace xo {
|
|||
**/
|
||||
struct type2llvm {
|
||||
public:
|
||||
using FunctionInterface = xo::scm::FunctionInterface;
|
||||
using FunctionInterface = xo::scm::FunctionExprInterface;
|
||||
using Lambda = xo::scm::Lambda;
|
||||
using TypeDescr = xo::reflect::TypeDescr;
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ namespace xo {
|
|||
using xo::scm::Expression;
|
||||
using xo::scm::ConstantInterface;
|
||||
//using xo::scm::FunctionInterface;
|
||||
using xo::scm::PrimitiveInterface;
|
||||
using xo::scm::PrimitiveExprInterface;
|
||||
using xo::scm::Lambda;
|
||||
using xo::scm::Variable;
|
||||
using xo::scm::Apply;
|
||||
|
|
@ -166,7 +166,7 @@ namespace xo {
|
|||
}
|
||||
|
||||
llvm::Function *
|
||||
MachPipeline::codegen_primitive(bp<PrimitiveInterface> expr)
|
||||
MachPipeline::codegen_primitive(bp<PrimitiveExprInterface> expr)
|
||||
{
|
||||
constexpr bool c_debug_flag = true;
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ namespace xo {
|
|||
} /*codegen_primitive*/
|
||||
|
||||
llvm::Function *
|
||||
MachPipeline::codegen_primitive_wrapper(bp<PrimitiveInterface> expr,
|
||||
MachPipeline::codegen_primitive_wrapper(bp<PrimitiveExprInterface> expr,
|
||||
llvm::IRBuilder<> & /*ir_builder*/)
|
||||
{
|
||||
constexpr bool c_debug_flag = true;
|
||||
|
|
@ -369,7 +369,7 @@ namespace xo {
|
|||
} /*codegen_primitive_wrapper*/
|
||||
|
||||
llvm::Value *
|
||||
MachPipeline::codegen_primitive_closure(bp<xo::scm::PrimitiveInterface> expr,
|
||||
MachPipeline::codegen_primitive_closure(bp<xo::scm::PrimitiveExprInterface> expr,
|
||||
llvm::IRBuilder<> & ir_builder)
|
||||
{
|
||||
constexpr bool c_debug_flag = true;
|
||||
|
|
@ -422,7 +422,7 @@ namespace xo {
|
|||
* allows substituting LLVM intrinsic
|
||||
*/
|
||||
if (apply->fn()->extype() == exprtype::primitive) {
|
||||
auto pm = PrimitiveInterface::from(apply->fn());
|
||||
auto pm = PrimitiveExprInterface::from(apply->fn());
|
||||
|
||||
if (pm) {
|
||||
llvm_closure = this->codegen_primitive_closure(pm, ir_builder);
|
||||
|
|
@ -979,7 +979,7 @@ namespace xo {
|
|||
case exprtype::constant:
|
||||
return this->codegen_constant(ConstantInterface::from(expr));
|
||||
case exprtype::primitive:
|
||||
return this->codegen_primitive_closure(PrimitiveInterface::from(expr), ir_builder);
|
||||
return this->codegen_primitive_closure(PrimitiveExprInterface::from(expr), ir_builder);
|
||||
case exprtype::apply:
|
||||
return this->codegen_apply(Apply::from(expr), envptr, ir_builder);
|
||||
case exprtype::lambda:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue