From 3d5a08a7dc69b4581e4e3a6372e0b08bd378decb Mon Sep 17 00:00:00 2001 From: giles Date: Mon, 2 Feb 2026 23:59:38 +0000 Subject: [PATCH] Don't overwrite pre-registered primitives in _load_primitives --- streaming/stream_sexp_generic.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/streaming/stream_sexp_generic.py b/streaming/stream_sexp_generic.py index 1256c62..354e022 100644 --- a/streaming/stream_sexp_generic.py +++ b/streaming/stream_sexp_generic.py @@ -189,7 +189,10 @@ class StreamInterpreter: prim_name = name[5:] dash_name = prim_name.replace('_', '-') # Register ONLY with namespace (geometry:ripple-displace) - self.primitives[f"{lib_name}:{dash_name}"] = func + # Don't overwrite if already registered (allows pre-registration of overrides) + key = f"{lib_name}:{dash_name}" + if key not in self.primitives: + self.primitives[key] = func count += 1 if hasattr(module, 'PRIMITIVES'): @@ -197,9 +200,12 @@ class StreamInterpreter: if isinstance(prims, dict): for name, func in prims.items(): # Register ONLY with namespace + # Don't overwrite if already registered dash_name = name.replace('_', '-') - self.primitives[f"{lib_name}:{dash_name}"] = func - count += 1 + key = f"{lib_name}:{dash_name}" + if key not in self.primitives: + self.primitives[key] = func + count += 1 print(f"Loaded primitives: {lib_name} ({count} functions)", file=sys.stderr)