xo-expression: naming: {Primitive,Function}ExprInterface

This commit is contained in:
Roland Conybeare 2025-11-26 13:43:02 -05:00
commit 22670cda3d
9 changed files with 38 additions and 41 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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: