From bb5c7e844465eba5bd32838bb966b56cf8c50cb5 Mon Sep 17 00:00:00 2001 From: giles Date: Thu, 5 Mar 2026 22:48:14 +0000 Subject: [PATCH] Fall through to shared primitive registry for external primitives is_primitive/get_primitive now check the shared registry (shared.sx.primitives) when a name isn't in the transpiled PRIMITIVES dict. Fixes Undefined symbol errors for register_primitive'd functions like relations-from. Co-Authored-By: Claude Opus 4.6 --- shared/sx/ref/bootstrap_py.py | 11 +++++++++-- shared/sx/ref/sx_ref.py | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/shared/sx/ref/bootstrap_py.py b/shared/sx/ref/bootstrap_py.py index 87ecba2..af8d831 100644 --- a/shared/sx/ref/bootstrap_py.py +++ b/shared/sx/ref/bootstrap_py.py @@ -1647,10 +1647,17 @@ def _sx_parse_int(v, default=0): return default def is_primitive(name): - return name in PRIMITIVES + if name in PRIMITIVES: + return True + from shared.sx.primitives import get_primitive as _ext_get + return _ext_get(name) is not None def get_primitive(name): - return PRIMITIVES.get(name) + p = PRIMITIVES.get(name) + if p is not None: + return p + from shared.sx.primitives import get_primitive as _ext_get + return _ext_get(name) # Higher-order helpers used by transpiled code def map(fn, coll): diff --git a/shared/sx/ref/sx_ref.py b/shared/sx/ref/sx_ref.py index a11f98e..a8f3eb8 100644 --- a/shared/sx/ref/sx_ref.py +++ b/shared/sx/ref/sx_ref.py @@ -775,10 +775,17 @@ def _sx_parse_int(v, default=0): return default def is_primitive(name): - return name in PRIMITIVES + if name in PRIMITIVES: + return True + from shared.sx.primitives import get_primitive as _ext_get + return _ext_get(name) is not None def get_primitive(name): - return PRIMITIVES.get(name) + p = PRIMITIVES.get(name) + if p is not None: + return p + from shared.sx.primitives import get_primitive as _ext_get + return _ext_get(name) # Higher-order helpers used by transpiled code def map(fn, coll):