MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

properly mark date brand in slot

+44 -29
+40 -29
src/ant.c
··· 5256 5256 enum obj_enum_mode { 5257 5257 OBJ_ENUM_KEYS, 5258 5258 OBJ_ENUM_VALUES, 5259 - OBJ_ENUM_ENTRIES 5259 + OBJ_ENUM_ENTRIES, 5260 + OBJ_ENUM_KEYS_ALL 5260 5261 }; 5261 5262 5262 5263 static ant_value_t map_to_entry(ant_t *js, ant_value_t key, ant_value_t val) { ··· 5285 5286 5286 5287 if (is_arr) { 5287 5288 ant_offset_t doff = get_dense_buf(obj); 5288 - if (doff) { 5289 - ant_offset_t dense_len = dense_iterable_length(js, obj); 5290 - for (ant_offset_t i = 0; i < dense_len; i++) { 5291 - ant_value_t v = dense_get(doff, i); 5292 - if (is_empty_slot(v)) continue; 5293 - char idxstr[16]; size_t idxlen = uint_to_str(idxstr, sizeof(idxstr), (unsigned)i); 5294 - ant_value_t key_val = js_mkstr(js, idxstr, idxlen); 5295 - if (mode == OBJ_ENUM_KEYS) arr_set(js, arr, idx, key_val); 5296 - else if (mode == OBJ_ENUM_VALUES) arr_set(js, arr, idx, v); 5297 - else arr_set(js, arr, idx, map_to_entry(js, key_val, v)); 5298 - idx++; 5299 - } 5289 + ant_offset_t dense_len = doff ? dense_iterable_length(js, obj) : 0; 5290 + 5291 + for (ant_offset_t i = 0; i < dense_len; i++) { 5292 + ant_value_t v = dense_get(doff, i); 5293 + if (is_empty_slot(v)) continue; 5294 + char idxstr[16]; size_t idxlen = uint_to_str(idxstr, sizeof(idxstr), (unsigned)i); 5295 + ant_value_t key_val = js_mkstr(js, idxstr, idxlen); 5296 + 5297 + if (mode == OBJ_ENUM_KEYS || mode == OBJ_ENUM_KEYS_ALL) arr_set(js, arr, idx, key_val); 5298 + else if (mode == OBJ_ENUM_VALUES) arr_set(js, arr, idx, v); 5299 + else arr_set(js, arr, idx, map_to_entry(js, key_val, v)); 5300 + 5301 + idx++; 5300 5302 } 5301 5303 } 5302 5304 ··· 5320 5322 } 5321 5323 } 5322 5324 5323 - bool should_include = (ant_shape_get_attrs(ptr->shape, i) & ANT_PROP_ATTR_ENUMERABLE) != 0; 5324 - if (should_include && ptr->is_exotic) { 5325 - descriptor_entry_t *desc = lookup_descriptor(js_as_obj(obj), key, (size_t)klen); 5326 - if (desc) should_include = desc->enumerable; 5325 + if (mode != OBJ_ENUM_KEYS_ALL) { 5326 + bool should_include = (ant_shape_get_attrs(ptr->shape, i) & ANT_PROP_ATTR_ENUMERABLE) != 0; 5327 + if (should_include && ptr->is_exotic) { 5328 + descriptor_entry_t *desc = lookup_descriptor(js_as_obj(obj), key, (size_t)klen); 5329 + if (desc) should_include = desc->enumerable; 5330 + } 5331 + if (!should_include) continue; 5327 5332 } 5328 - if (!should_include) continue; 5329 5333 5330 5334 ant_value_t key_val = js_mkstr(js, key, (size_t)klen); 5331 - if (mode == OBJ_ENUM_KEYS) arr_set(js, arr, idx, key_val); 5335 + if (mode == OBJ_ENUM_KEYS || mode == OBJ_ENUM_KEYS_ALL) arr_set(js, arr, idx, key_val); 5332 5336 else if (mode == OBJ_ENUM_VALUES) arr_set(js, arr, idx, val); 5333 5337 else arr_set(js, arr, idx, map_to_entry(js, key_val, val)); 5338 + 5334 5339 idx++; 5335 5340 } 5336 5341 ··· 5402 5407 return mark; 5403 5408 } 5404 5409 5405 - js_arr_push(js, out, key); 5410 + if (vtype(out) == T_ARR) js_arr_push(js, out, key); 5406 5411 done: 5407 5412 GC_ROOT_RESTORE(js, root_mark); 5408 5413 return js_mkundef(); ··· 5438 5443 5439 5444 for (int depth = 0; is_object_type(cur) && depth < MAX_PROTO_CHAIN_DEPTH; depth++) { 5440 5445 GC_ROOT_SAVE(iter_mark, js); 5441 - ant_value_t cur_keys = object_enum(js, cur, OBJ_ENUM_KEYS); 5442 - GC_ROOT_PIN(js, cur_keys); 5443 - 5444 - if (is_err(cur_keys)) { GC_ROOT_RESTORE(js, iter_mark); return cur_keys; } 5445 - if (vtype(cur_keys) != T_ARR) goto next; 5446 - 5447 - ant_offset_t len = js_arr_len(js, cur_keys); 5446 + ant_value_t all_keys = object_enum(js, cur, OBJ_ENUM_KEYS_ALL); 5447 + GC_ROOT_PIN(js, all_keys); 5448 + 5449 + if (is_err(all_keys)) { GC_ROOT_RESTORE(js, iter_mark); return all_keys; } 5450 + if (vtype(all_keys) != T_ARR) goto next; 5451 + 5452 + ant_offset_t len = js_arr_len(js, all_keys); 5448 5453 for (ant_offset_t i = 0; i < len; i++) { 5449 - ant_value_t key = js_arr_get(js, cur_keys, i); 5454 + ant_value_t key = js_arr_get(js, all_keys, i); 5450 5455 GC_ROOT_PIN(js, key); 5451 - ant_value_t r = for_in_keys_add(js, out, seen, key); 5456 + 5457 + prop_meta_t meta; 5458 + ant_offset_t klen = 0; 5459 + const char *kptr = (const char *)(uintptr_t)vstr(js, key, &klen); 5460 + bool enumerable = lookup_string_prop_meta(js, cur, kptr, klen, &meta) && meta.enumerable; 5461 + 5462 + ant_value_t r = for_in_keys_add(js, enumerable ? out : js_mkundef(), seen, key); 5452 5463 if (is_err(r)) { GC_ROOT_RESTORE(js, iter_mark); return r; } 5453 5464 } 5454 5465
+4
src/modules/date.c
··· 806 806 807 807 if (vtype(js->new_target) == T_UNDEF) { 808 808 val = (double)date_now(); 809 + 809 810 ant_value_t tmp = js_mkobj(js); 810 811 ant_value_t date_proto = js_get_ctor_proto(js, "Date", 4); 811 812 if (is_object_type(date_proto)) js_set_proto_init(tmp, date_proto); 813 + 812 814 js_set_slot(tmp, SLOT_DATA, tov(val)); 815 + js_set_slot(tmp, SLOT_BRAND, js_mknum(BRAND_DATE)); 816 + 813 817 return get_date_string(js, tmp, kDateToStringSpec); 814 818 } 815 819