bugfix: xo-jit: track expanded lambda api

This commit is contained in:
Roland Conybeare 2025-07-06 14:33:39 -05:00
commit d74e56bc74
3 changed files with 16 additions and 9 deletions

View file

@ -167,7 +167,8 @@ main() {
/* (define (lm_1 x) (sin (cos x))) */ /* (define (lm_1 x) (sin (cos x))) */
auto lambda = make_lambda("lm_1", auto lambda = make_lambda("lm_1",
{x_var}, {x_var},
call2); call2,
nullptr /*parent_env*/);
log && log(xtag("expr", lambda)); log && log(xtag("expr", lambda));

View file

@ -109,7 +109,8 @@ main() {
auto lambda = make_lambda("callit", auto lambda = make_lambda("callit",
{f_var, x_var}, {f_var, x_var},
call1); call1,
nullptr /*parent_env*/);
#elif CHOICE == 1 #elif CHOICE == 1
#define FUNCTION_SYMBOL "root4" #define FUNCTION_SYMBOL "root4"
/* def root4(x : double) { sqrt(sqrt(x)) } */ /* def root4(x : double) { sqrt(sqrt(x)) } */
@ -120,7 +121,8 @@ main() {
auto lambda = make_lambda("root4", auto lambda = make_lambda("root4",
{x_var}, {x_var},
call2); call2,
nullptr /*parent_env*/);
#elif CHOICE == 2 #elif CHOICE == 2
#define FUNCTION_SYMBOL "twice" #define FUNCTION_SYMBOL "twice"
auto root = make_primitive("sqrt", auto root = make_primitive("sqrt",
@ -137,7 +139,8 @@ main() {
/* (define (twice f ::int->int x ::int) (f (f x))) */ /* (define (twice f ::int->int x ::int) (f (f x))) */
auto lambda = make_lambda("twice", auto lambda = make_lambda("twice",
{f_var, x_var}, {f_var, x_var},
call2); call2,
nullptr /*parent_env*/);
#endif #endif
log && log(xtag("lambda", lambda)); log && log(xtag("lambda", lambda));

View file

@ -19,7 +19,6 @@ namespace xo {
using xo::ast::exprtype; using xo::ast::exprtype;
using xo::reflect::Reflect; using xo::reflect::Reflect;
using xo::reflect::reflect_struct; using xo::reflect::reflect_struct;
using xo::ref::rp;
using xo::ref::brw; using xo::ref::brw;
using std::cerr; using std::cerr;
using std::endl; using std::endl;
@ -41,7 +40,8 @@ namespace xo {
auto fn_ast = make_lambda("root4", auto fn_ast = make_lambda("root4",
{x_var}, {x_var},
call2); call2,
nullptr /*parent_env*/);
return fn_ast; return fn_ast;
} }
@ -65,7 +65,8 @@ namespace xo {
/* def twice(f :: double->double, x :: double) { f(f(x)); } */ /* def twice(f :: double->double, x :: double) { f(f(x)); } */
auto twice = make_lambda("twice", auto twice = make_lambda("twice",
{f_var, x_var}, {f_var, x_var},
call2); call2,
nullptr /*parent_env*/);
auto x2_var = make_var("x2", Reflect::require<double>()); auto x2_var = make_var("x2", Reflect::require<double>());
auto call3 = make_apply(twice, {root, x2_var}); auto call3 = make_apply(twice, {root, x2_var});
@ -77,7 +78,8 @@ namespace xo {
*/ */
auto fn_ast = make_lambda("root_2x", auto fn_ast = make_lambda("root_2x",
{x2_var}, {x2_var},
call3); call3,
nullptr /*parent_env*/);
return fn_ast; return fn_ast;
} }
@ -270,7 +272,8 @@ namespace xo {
auto make_ratio = make_lambda("make_ratio", auto make_ratio = make_lambda("make_ratio",
{n_var, d_var}, {n_var, d_var},
call1); call1,
nullptr /*parent_env*/);
return make_ratio; return make_ratio;
} }