immediate ascii for string path

This commit is contained in:
2026-02-13 05:35:11 -06:00
parent 0a680a0cd3
commit b960d03eeb
2 changed files with 16 additions and 1 deletions

View File

@@ -78,7 +78,7 @@
*/
// #define DUMP_BYTECODE (1)
/* dump GC summary: old/new heap, recovery %, heap growth */
#define DUMP_GC
// #define DUMP_GC
/* dump detailed GC: roots, scanning, object traversal (implies DUMP_GC) */
// #define DUMP_GC_DETAIL
#ifdef DUMP_GC_DETAIL

View File

@@ -1732,6 +1732,21 @@ static JSValue js_sub_string (JSContext *ctx, JSText *p, int start, int end) {
return JS_MKPTR (p);
}
/* Try immediate ASCII for short substrings (avoids heap allocation) */
if (len <= MIST_ASCII_MAX_LEN && len > 0) {
char buf[MIST_ASCII_MAX_LEN];
int all_ascii = 1;
for (i = 0; i < len; i++) {
uint32_t c = string_get (p, start + i);
if (c >= 128) { all_ascii = 0; break; }
buf[i] = (char)c;
}
if (all_ascii) {
JSValue imm = MIST_TryNewImmediateASCII (buf, len);
if (!JS_IsNull (imm)) return imm;
}
}
/* Root the source string as a JSValue so it survives js_alloc_string GC */
JSGCRef src_ref;
JS_PushGCRef (ctx, &src_ref);