diff --git a/include/xo/numeric/NumericPrimitives.hpp b/include/xo/numeric/NumericPrimitives.hpp index 54201f59..8a1cd33d 100644 --- a/include/xo/numeric/NumericPrimitives.hpp +++ b/include/xo/numeric/NumericPrimitives.hpp @@ -18,7 +18,8 @@ namespace xo { public: /** polymorphic (in both arguments1) multiply **/ - static DPrimitive_gco_2_gco_gco * make_multiply_pm(obj mm); + static DPrimitive_gco_2_gco_gco * make_multiply_pm(obj mm, + StringTable * stbl); /** polymorphic (in both arguments) divide **/ static DPrimitive_gco_2_gco_gco * make_divide_pm(obj mm); diff --git a/src/numeric/NumericPrimitives.cpp b/src/numeric/NumericPrimitives.cpp index 9ef0b979..aeb7d8fb 100644 --- a/src/numeric/NumericPrimitives.cpp +++ b/src/numeric/NumericPrimitives.cpp @@ -5,6 +5,8 @@ #include "NumericPrimitives.hpp" #include "NumericDispatch.hpp" +#include +#include namespace xo { using xo::mm::AAllocator; @@ -13,9 +15,21 @@ namespace xo { namespace scm { DPrimitive_gco_2_gco_gco * - NumericPrimitives::make_multiply_pm(obj mm) + NumericPrimitives::make_multiply_pm(obj mm, + StringTable * stbl) { - return DPrimitive_gco_2_gco_gco::_make(mm, "_mul", + (void)stbl; + + // TODO: want to expand this to record schedule based on argument types. + // + // e.g. f64 x f64 -> f64 + + auto numeric_ty = DAtomicType::make(mm, Metatype::t_numeric()); + // #op+: numeric x numeric -> numeric + auto pm_ty = obj + (DFunctionType::_make(mm, numeric_ty, numeric_ty, numeric_ty)); + + return DPrimitive_gco_2_gco_gco::_make(mm, "_mul", pm_ty, &NumericDispatch::multiply); } diff --git a/src/numeric/numeric_register_primitives.cpp b/src/numeric/numeric_register_primitives.cpp index aa4a24d0..20eb5967 100644 --- a/src/numeric/numeric_register_primitives.cpp +++ b/src/numeric/numeric_register_primitives.cpp @@ -59,7 +59,7 @@ namespace xo { bool ok = true; ok = ok & install_aux(sink, - NumericPrimitives::make_multiply_pm(mm), + NumericPrimitives::make_multiply_pm(mm, stbl), flags & InstallFlags::f_essential); ok = ok & install_aux(sink, NumericPrimitives::make_divide_pm(mm),