diff --git a/.gitignore b/.gitignore index d4efdd4..f186cff 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .nova .maid .cache +.superset .claude .github/artifacts diff --git a/include/internal.h b/include/internal.h index 69bbf76..6465a6e 100644 --- a/include/internal.h +++ b/include/internal.h @@ -153,11 +153,6 @@ struct ant_isolate_t { void *jit_ctx; #endif - // TODO: should be under sym struct - // rename object to object_proto - ant_value_t object; - ant_value_t array_proto; - ant_value_t global; ant_value_t this_val; ant_value_t new_target; @@ -194,6 +189,8 @@ struct ant_isolate_t { uint64_t counter; struct sym_registry_entry *registry; + ant_value_t object_proto; + ant_value_t array_proto; ant_value_t iterator_proto; ant_value_t array_iterator_proto; ant_value_t string_iterator_proto; diff --git a/src/ant.c b/src/ant.c index 20526c3..f98f442 100644 --- a/src/ant.c +++ b/src/ant.c @@ -1411,7 +1411,7 @@ print_plain_object: if (pt != T_OBJ && pt != T_FUNC) break; ant_value_t proto_proto = js_get_proto(js, proto_val); - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; proto_is_null_proto = (vtype(proto_proto) == T_NULL) && (vdata(proto_val) != vdata(object_proto)); @@ -2372,7 +2372,7 @@ static ant_value_t alloc_array_with_proto(ant_t *js, ant_value_t proto) { } static inline ant_value_t mkarr(ant_t *js) { - return alloc_array_with_proto(js, js->array_proto); + return alloc_array_with_proto(js, js->sym.array_proto); } ant_value_t js_mkarr(ant_t *js) { @@ -2381,7 +2381,7 @@ ant_value_t js_mkarr(ant_t *js) { ant_value_t js_newobj(ant_t *js) { ant_value_t obj = mkobj(js, 0); - ant_value_t proto = js->object; + ant_value_t proto = js->sym.object_proto; if (vtype(proto) == T_OBJ) js_set_proto_init(obj, proto); return obj; } @@ -2660,7 +2660,7 @@ static ant_value_t setup_func_prototype(ant_t *js, ant_value_t func) { ant_value_t proto_obj = mkobj(js, 0); if (is_err(proto_obj)) return proto_obj; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; if (vtype(object_proto) == T_OBJ) { js_set_proto_init(proto_obj, object_proto); } @@ -3843,8 +3843,8 @@ static inline ant_value_t get_ctor_proto(ant_t *js, const char *name, size_t len static ant_value_t get_prototype_for_type(ant_t *js, uint8_t type) { switch (type) { - case T_OBJ: return js->object; - case T_ARR: return js->array_proto; + case T_OBJ: return js->sym.object_proto; + case T_ARR: return js->sym.array_proto; case T_STR: return get_ctor_proto(js, "String", 6); case T_NUM: return get_ctor_proto(js, "Number", 6); case T_BOOL: return get_ctor_proto(js, "Boolean", 7); @@ -4601,7 +4601,7 @@ static ant_value_t builtin_Boolean(ant_t *js, ant_value_t *args, int nargs) { static ant_value_t builtin_Object(ant_t *js, ant_value_t *args, int nargs) { if (nargs == 0 || vtype(args[0]) == T_NULL || vtype(args[0]) == T_UNDEF) { - ant_value_t obj_proto = js->object; + ant_value_t obj_proto = js->sym.object_proto; if (is_unboxed_obj(js, js->this_val, obj_proto)) return js->this_val; return js_mkobj(js); } @@ -12807,8 +12807,8 @@ ant_t *js_create(void *buf, size_t len) { set_proto(js, glob, object_proto); - js->object = object_proto; - js->array_proto = array_proto; + js->sym.object_proto = object_proto; + js->sym.array_proto = array_proto; js->owns_mem = false; js->max_size = 0; diff --git a/src/gc/objects.c b/src/gc/objects.c index cff56d4..f2d20d7 100644 --- a/src/gc/objects.c +++ b/src/gc/objects.c @@ -452,8 +452,8 @@ static void gc_mark_roots(ant_t *js) { for (coroutine_t *c = js->active_async_coro; c; c = c->active_parent) gc_mark_coroutine(js, c); gc_mark_value(js, js->global); - gc_mark_value(js, js->object); - gc_mark_value(js, js->array_proto); + gc_mark_value(js, js->sym.object_proto); + gc_mark_value(js, js->sym.array_proto); gc_mark_value(js, js->this_val); gc_mark_value(js, js->new_target); gc_mark_value(js, js->current_func); diff --git a/src/modules/bigint.c b/src/modules/bigint.c index 047ccad..51a7745 100644 --- a/src/modules/bigint.c +++ b/src/modules/bigint.c @@ -1470,7 +1470,7 @@ void init_bigint_module(void) { ant_t *js = rt->js; ant_value_t glob = js_glob(js); - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; ant_value_t function_proto = js_get_slot(glob, SLOT_FUNC_PROTO); if (vtype(function_proto) == T_UNDEF) function_proto = js_get_ctor_proto(js, "Function", 8); diff --git a/src/modules/buffer.c b/src/modules/buffer.c index 5835d41..bfb649e 100644 --- a/src/modules/buffer.c +++ b/src/modules/buffer.c @@ -2379,7 +2379,7 @@ void init_buffer_module() { ant_t *js = rt->js; ant_value_t glob = js->global; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; ant_value_t arraybuffer_ctor_obj = js_mkobj(js); ant_value_t arraybuffer_proto = js_mkobj(js); diff --git a/src/modules/collections.c b/src/modules/collections.c index 43878c8..7d6d07a 100644 --- a/src/modules/collections.c +++ b/src/modules/collections.c @@ -1023,7 +1023,7 @@ void init_collections_module(void) { ant_t *js = rt->js; ant_value_t glob = js->global; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; ant_value_t iter_sym = get_iterator_sym(); ant_value_t tag_sym = get_toStringTag_sym(); diff --git a/src/modules/date.c b/src/modules/date.c index 80ab0c9..8de8a4a 100644 --- a/src/modules/date.c +++ b/src/modules/date.c @@ -1287,7 +1287,7 @@ static void date_define_methods( void init_date_module(void) { ant_t *js = rt->js; ant_value_t glob = js->global; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; ant_value_t function_proto = js_get_ctor_proto(js, "Function", 8); ant_value_t date_proto = js_mkobj(js); diff --git a/src/modules/lmdb.c b/src/modules/lmdb.c index 693116c..1e92d87 100644 --- a/src/modules/lmdb.c +++ b/src/modules/lmdb.c @@ -968,7 +968,7 @@ static ant_value_t lmdb_txn_constructor(ant_t *js, ant_value_t *args, int nargs) static void ensure_lmdb_prototypes(ant_t *js) { if (lmdb_types.ready) return; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; ant_value_t env_ctor_obj = js_mkobj(js); ant_value_t env_proto = js_mkobj(js); diff --git a/src/modules/math.c b/src/modules/math.c index 139c476..b3c4748 100644 --- a/src/modules/math.c +++ b/src/modules/math.c @@ -278,9 +278,9 @@ void init_math_module(void) { ant_t *js = rt->js; ant_value_t glob = js_glob(js); - ant_value_t object_proto = js->object; ant_value_t math_obj = mkobj(js, 0); - + ant_value_t object_proto = js->sym.object_proto; + js_set_proto_init(math_obj, object_proto); js_setprop(js, math_obj, js_mkstr(js, "E", 1), tov(M_E)); js_setprop(js, math_obj, js_mkstr(js, "LN10", 4), tov(M_LN10)); diff --git a/src/modules/regex.c b/src/modules/regex.c index 5729e12..05bbcca 100644 --- a/src/modules/regex.c +++ b/src/modules/regex.c @@ -1853,7 +1853,7 @@ static ant_value_t builtin_string_match(ant_t *js, ant_value_t *args, int nargs) void init_regex_module(void) { ant_t *js = rt->js; ant_value_t glob = js->global; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; ant_value_t regexp_proto = js_mkobj(js); js_set_proto_init(regexp_proto, object_proto); diff --git a/src/modules/symbol.c b/src/modules/symbol.c index 80e47cc..2ef8050 100644 --- a/src/modules/symbol.c +++ b/src/modules/symbol.c @@ -68,7 +68,7 @@ static ant_value_t get_iterator_prototype(ant_t *js) { if (vtype(js->sym.iterator_proto) == T_OBJ) return js->sym.iterator_proto; js->sym.iterator_proto = js_mkobj(js); - js_set_proto_init(js->sym.iterator_proto, js->object); + js_set_proto_init(js->sym.iterator_proto, js->sym.object_proto); js_set_sym(js, js->sym.iterator_proto, g_iterator, js_mkfun(sym_this_cb)); return js->sym.iterator_proto; diff --git a/src/modules/wasm.c b/src/modules/wasm.c index 1246ef0..68fab1a 100644 --- a/src/modules/wasm.c +++ b/src/modules/wasm.c @@ -1239,13 +1239,13 @@ void init_wasm_module(void) { g_wasm_linkerror_proto = js_mkobj(js); g_wasm_runtimeerror_proto = js_mkobj(js); - js_set_proto_init(g_wasm_module_proto, js->object); - js_set_proto_init(g_wasm_instance_proto, js->object); - js_set_proto_init(g_wasm_global_proto, js->object); - js_set_proto_init(g_wasm_memory_proto, js->object); - js_set_proto_init(g_wasm_table_proto, js->object); - js_set_proto_init(g_wasm_tag_proto, js->object); - js_set_proto_init(g_wasm_exception_proto, js->object); + js_set_proto_init(g_wasm_module_proto, js->sym.object_proto); + js_set_proto_init(g_wasm_instance_proto, js->sym.object_proto); + js_set_proto_init(g_wasm_global_proto, js->sym.object_proto); + js_set_proto_init(g_wasm_memory_proto, js->sym.object_proto); + js_set_proto_init(g_wasm_table_proto, js->sym.object_proto); + js_set_proto_init(g_wasm_tag_proto, js->sym.object_proto); + js_set_proto_init(g_wasm_exception_proto, js->sym.object_proto); js_set_proto_init(g_wasm_compileerror_proto, error_proto); js_set_proto_init(g_wasm_linkerror_proto, error_proto); diff --git a/src/silver/glue.c b/src/silver/glue.c index 0b02c84..fdf0ed1 100644 --- a/src/silver/glue.c +++ b/src/silver/glue.c @@ -390,7 +390,7 @@ ant_value_t jit_helper_put_global( ant_value_t jit_helper_object(sv_vm_t *vm, ant_t *js) { ant_value_t obj = mkobj(js, 0); - ant_value_t proto = js->object; + ant_value_t proto = js->sym.object_proto; if (vtype(proto) == T_OBJ) js_set_proto_init(obj, proto); return obj; } diff --git a/src/silver/ops/literals.h b/src/silver/ops/literals.h index dc79d53..0670773 100644 --- a/src/silver/ops/literals.h +++ b/src/silver/ops/literals.h @@ -57,20 +57,20 @@ static inline void sv_op_object(sv_vm_t *vm, ant_t *js, sv_func_t *func, uint8_t ant_object_t *ptr = js_obj_ptr(js_as_obj(obj)); sv_obj_site_cache_t *site = sv_obj_site_for_ip(func, ip); if (ptr && ptr->shape && site) { - if (site->shared_shape) { - if (site->shared_shape != ptr->shape) { - ant_shape_retain(site->shared_shape); - ant_shape_release(ptr->shape); - ptr->shape = site->shared_shape; - } - uint32_t count = ant_shape_count(ptr->shape); - if (count > ptr->prop_count) (void)js_obj_ensure_prop_capacity(ptr, count); - } else { - site->shared_shape = ptr->shape; + if (site->shared_shape) { + if (site->shared_shape != ptr->shape) { ant_shape_retain(site->shared_shape); + ant_shape_release(ptr->shape); + ptr->shape = site->shared_shape; } - } - ant_value_t proto = js->object; + uint32_t count = ant_shape_count(ptr->shape); + if (count > ptr->prop_count) (void)js_obj_ensure_prop_capacity(ptr, count); + } else { + site->shared_shape = ptr->shape; + ant_shape_retain(site->shared_shape); + }} + + ant_value_t proto = js->sym.object_proto; if (vtype(proto) == T_OBJ) js_set_proto_init(obj, proto); vm->stack[vm->sp++] = obj; } diff --git a/src/silver/ops/upvalues.h b/src/silver/ops/upvalues.h index aacc6fc..0c8bf4f 100644 --- a/src/silver/ops/upvalues.h +++ b/src/silver/ops/upvalues.h @@ -11,7 +11,7 @@ static inline ant_value_t sv_setup_function_prototype( ant_value_t proto_obj = mkobj(js, 0); if (is_err(proto_obj)) return proto_obj; - ant_value_t object_proto = js->object; + ant_value_t object_proto = js->sym.object_proto; if (vtype(object_proto) == T_OBJ) js_set_proto_init(proto_obj, object_proto); ant_value_t ctor_key = js_mkstr(js, "constructor", 11);