/** @file BuiltinPrimitives.cpp * * @author Roland Conybeare, Nov 2025 **/ #include "BuiltinPrimitives.hpp" #include "Integer.hpp" #include "Primitive.hpp" #include "xo/expression/PrimitiveExpr.hpp" #include "xo/object/ObjectConversion.hpp" #include "xo/reflect/Reflect.hpp" #include namespace xo { using xo::reflect::Reflect; using xo::reflect::TaggedPtr; using xo::reflect::TypeDescr; namespace scm { int64_t add64(int64_t x, int64_t y) { return x + y; } void BuiltinPrimitives::install_interpreter_conversions(ObjectConverter * /*target*/) { /* abandoning this path */ } void BuiltinPrimitives::install(gc::IAlloc * mm, gp env) { scope log(XO_DEBUG(true)); // add(x,y) { gp rhs = xo::obj::make_primitive(mm, "add", add64); TypeDescr td = Reflect::require_function(); rp lhs = Variable::make("add", td); gp * addr = env->establish_var(lhs.borrow()); *addr = rhs; } // @add2_i64 { auto pm_expr = PrimitiveExpr_i64::make_add2_i64(); gp rhs = xo::obj::make_primitive(mm, pm_expr->name(), pm_expr->value()); rp lhs = Variable::make(pm_expr->name(), pm_expr->value_td()); gp * addr = env->establish_var(lhs.borrow()); *addr = rhs; } // @mul2_i64 install_pm(mm, PrimitiveExpr_i64::make_mul2_i64(), env); } } } /* end BuiltinPrimitives.cpp */