@tsukiroku/tiny
Version:
Tiny interpreter
64 lines (63 loc) • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.objectKindStringify = exports.objectStringify = void 0;
const objectStringify = (obj, strW = false) => {
if (!obj)
return 'NULL';
switch (obj.kind) {
case 300 /* ObjectKind.NUMBER */:
return obj.value.toString();
case 301 /* ObjectKind.STRING */:
return strW ? `"${obj.value}"` : obj.value;
case 302 /* ObjectKind.BOOLEAN */:
return obj.value ? 'true' : 'false';
case 303 /* ObjectKind.ARRAY */:
return `[${obj.value.map((v) => (0, exports.objectStringify)(v, true)).join(', ')}]`;
case 304 /* ObjectKind.OBJECT */:
return `{ ${[...obj.pairs.entries()]
.map(([key, value]) => `${(0, exports.objectStringify)(key, true)}: ${(0, exports.objectStringify)(value, true)}`)
.join(', ')} }`;
case 305 /* ObjectKind.FUNCTION */:
return `func([${obj.parameters.map((m) => m?.kind).join(', ')}])`;
case 306 /* ObjectKind.BUILTIN */:
return 'builtin';
case 309 /* ObjectKind.NULL */:
return 'NULL';
case 310 /* ObjectKind.UNDEFINED */:
return 'UNDEFINED';
case 308 /* ObjectKind.ERROR */:
return `ERROR: ${obj.message}`;
default:
return `[Unknown]`;
}
};
exports.objectStringify = objectStringify;
const objectKindStringify = (kind) => {
switch (kind) {
case 300 /* ObjectKind.NUMBER */:
return 'NUMBER';
case 301 /* ObjectKind.STRING */:
return 'STRING';
case 302 /* ObjectKind.BOOLEAN */:
return 'BOOLEAN';
case 303 /* ObjectKind.ARRAY */:
return 'ARRAY';
case 304 /* ObjectKind.OBJECT */:
return 'OBJECT';
case 305 /* ObjectKind.FUNCTION */:
return 'FUNCTION';
case 306 /* ObjectKind.BUILTIN */:
return 'BUILTIN';
case 307 /* ObjectKind.RETURN_VALUE */:
return 'RETURN_VALUE';
case 308 /* ObjectKind.ERROR */:
return 'ERROR';
case 309 /* ObjectKind.NULL */:
return 'NULL';
case 310 /* ObjectKind.UNDEFINED */:
return 'UNDEFINED';
default:
return 'UNKNOWN';
}
};
exports.objectKindStringify = objectKindStringify;