spec: gensym + symbol interning — *gensym-counter*, string->symbol, symbol->string, intern
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
// =========================================================================
|
||||
|
||||
var NIL = Object.freeze({ _nil: true, toString: function() { return "nil"; } });
|
||||
var SX_VERSION = "2026-05-01T10:16:10Z";
|
||||
var SX_VERSION = "2026-05-01T10:26:58Z";
|
||||
|
||||
function isNil(x) { return x === NIL || x === null || x === undefined; }
|
||||
function isSxTruthy(x) { return x !== false && !isNil(x); }
|
||||
@@ -810,6 +810,8 @@
|
||||
var vectorLength = PRIMITIVES["vector-length"];
|
||||
var vectorRef = PRIMITIVES["vector-ref"];
|
||||
var reverse = PRIMITIVES["reverse"];
|
||||
var stringToSymbol = PRIMITIVES["string->symbol"];
|
||||
var symbolToString = PRIMITIVES["symbol->string"];
|
||||
function zip(a, b) { var r = []; for (var i = 0; i < Math.min(a.length, b.length); i++) r.push([a[i], b[i]]); return r; }
|
||||
function append_b(arr, x) { arr.push(x); return arr; }
|
||||
var apply = function(f, args) {
|
||||
@@ -3570,6 +3572,33 @@ PRIMITIVES["eval-expr"] = evalExpr;
|
||||
var trampoline = function(val) { return (isSxTruthy(isThunk(val)) ? evalExpr(thunkExpr(val), thunkEnv(val)) : val); };
|
||||
PRIMITIVES["trampoline"] = trampoline;
|
||||
|
||||
// *gensym-counter*
|
||||
var _gensymCounter_ = 0;
|
||||
PRIMITIVES["*gensym-counter*"] = _gensymCounter_;
|
||||
|
||||
// gensym
|
||||
var gensym = function() { var args = Array.prototype.slice.call(arguments, 0); return (function() {
|
||||
var prefix = (isSxTruthy(isEmpty(args)) ? "g" : (String(first(args))));
|
||||
return ((_gensymCounter_ = (_gensymCounter_ + 1)), makeSymbol((String(prefix) + String(_gensymCounter_))));
|
||||
})(); };
|
||||
PRIMITIVES["gensym"] = gensym;
|
||||
|
||||
// string->symbol
|
||||
var stringToSymbol = function(s) { return makeSymbol(s); };
|
||||
PRIMITIVES["string->symbol"] = stringToSymbol;
|
||||
|
||||
// symbol->string
|
||||
var symbolToString = function(sym) { return symbolName(sym); };
|
||||
PRIMITIVES["symbol->string"] = symbolToString;
|
||||
|
||||
// intern
|
||||
var intern = function(s) { return makeSymbol(s); };
|
||||
PRIMITIVES["intern"] = intern;
|
||||
|
||||
// symbol-interned?
|
||||
var symbolInterned_p = function(sym) { return true; };
|
||||
PRIMITIVES["symbol-interned?"] = symbolInterned_p;
|
||||
|
||||
|
||||
// === Transpiled from freeze (serializable state boundaries) ===
|
||||
|
||||
|
||||
Reference in New Issue
Block a user