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.

update symbol system

+41 -2
+1
include/internal.h
··· 161 161 162 162 jsval_t coerce_to_str(struct js *js, jsval_t v); 163 163 jsval_t coerce_to_str_concat(struct js *js, jsval_t v); 164 + jsval_t builtin_regexp_symbol_split(struct js *js, jsval_t *args, int nargs); 164 165 165 166 js_intern_stats_t js_intern_stats(void); 166 167 js_cstr_t js_to_cstr(struct js *js, jsval_t value, char *stack_buf, size_t stack_size);
+5
include/modules/symbol.h
··· 18 18 const char *get_observable_sym_key(void); 19 19 const char *get_toPrimitive_sym_key(void); 20 20 const char *get_hasInstance_sym_key(void); 21 + const char *get_match_sym_key(void); 22 + const char *get_replace_sym_key(void); 23 + const char *get_search_sym_key(void); 24 + const char *get_split_sym_key(void); 25 + const char *get_isConcatSpreadable_sym_key(void); 21 26 const char *get_species_sym_key(void); 22 27 const char *get_unscopables_sym_key(void); 23 28
+35 -2
src/modules/symbol.c
··· 18 18 static wellknown_sym_t g_asyncIterator = {0}; 19 19 static wellknown_sym_t g_toStringTag = {0}; 20 20 static wellknown_sym_t g_hasInstance = {0}; 21 + static wellknown_sym_t g_match = {0}; 22 + static wellknown_sym_t g_replace = {0}; 23 + static wellknown_sym_t g_search = {0}; 24 + static wellknown_sym_t g_split = {0}; 25 + static wellknown_sym_t g_isConcatSpreadable = {0}; 21 26 static wellknown_sym_t g_observable = {0}; 22 27 static wellknown_sym_t g_toPrimitive = {0}; 23 28 static wellknown_sym_t g_species = {0}; ··· 33 38 const char *get_observable_sym_key(void) { return g_observable.key; } 34 39 const char *get_toPrimitive_sym_key(void) { return g_toPrimitive.key; } 35 40 const char *get_hasInstance_sym_key(void) { return g_hasInstance.key; } 41 + const char *get_match_sym_key(void) { return g_match.key; } 42 + const char *get_replace_sym_key(void) { return g_replace.key; } 43 + const char *get_search_sym_key(void) { return g_search.key; } 44 + const char *get_split_sym_key(void) { return g_split.key; } 45 + const char *get_isConcatSpreadable_sym_key(void) { return g_isConcatSpreadable.key; } 36 46 const char *get_species_sym_key(void) { return g_species.key; } 37 47 const char *get_unscopables_sym_key(void) { return g_unscopables.key; } 38 48 ··· 41 51 { &g_asyncIterator.sym, "Symbol.asyncIterator" }, 42 52 { &g_toStringTag.sym, "Symbol.toStringTag" }, 43 53 { &g_hasInstance.sym, "Symbol.hasInstance" }, 54 + { &g_match.sym, "Symbol.match" }, 55 + { &g_replace.sym, "Symbol.replace" }, 56 + { &g_search.sym, "Symbol.search" }, 57 + { &g_split.sym, "Symbol.split" }, 58 + { &g_isConcatSpreadable.sym, "Symbol.isConcatSpreadable" }, 44 59 { &g_observable.sym, "Symbol.observable" }, 45 60 { &g_toPrimitive.sym, "Symbol.toPrimitive" }, 46 61 { &g_species.sym, "Symbol.species" }, ··· 62 77 jsval_t get_wellknown_sym_by_key(const char *key, size_t key_len) { 63 78 static const struct { wellknown_sym_t *sym; } table[] = { 64 79 { &g_iterator }, { &g_asyncIterator }, { &g_toStringTag }, 65 - { &g_hasInstance }, { &g_observable }, { &g_toPrimitive }, 80 + { &g_hasInstance }, { &g_match }, { &g_replace }, { &g_search }, { &g_split }, 81 + { &g_isConcatSpreadable }, { &g_observable }, { &g_toPrimitive }, 66 82 { &g_species }, { &g_unscopables } 67 83 }; 68 84 for (size_t i = 0; i < sizeof(table)/sizeof(table[0]); i++) { ··· 301 317 init_symbol(js, &g_observable, "Symbol.observable"); 302 318 init_symbol(js, &g_toPrimitive, "Symbol.toPrimitive"); 303 319 init_symbol(js, &g_hasInstance, "Symbol.hasInstance"); 320 + init_symbol(js, &g_match, "Symbol.match"); 321 + init_symbol(js, &g_replace, "Symbol.replace"); 322 + init_symbol(js, &g_search, "Symbol.search"); 323 + init_symbol(js, &g_split, "Symbol.split"); 324 + init_symbol(js, &g_isConcatSpreadable, "Symbol.isConcatSpreadable"); 304 325 init_symbol(js, &g_species, "Symbol.species"); 305 326 init_symbol(js, &g_unscopables, "Symbol.unscopables"); 306 327 ··· 317 338 js_set(js, symbol_ctor, "asyncIterator", g_asyncIterator.sym); 318 339 js_set(js, symbol_ctor, "toStringTag", g_toStringTag.sym); 319 340 js_set(js, symbol_ctor, "hasInstance", g_hasInstance.sym); 341 + js_set(js, symbol_ctor, "match", g_match.sym); 342 + js_set(js, symbol_ctor, "replace", g_replace.sym); 343 + js_set(js, symbol_ctor, "search", g_search.sym); 344 + js_set(js, symbol_ctor, "split", g_split.sym); 345 + js_set(js, symbol_ctor, "isConcatSpreadable", g_isConcatSpreadable.sym); 320 346 js_set(js, symbol_ctor, "observable", g_observable.sym); 321 347 js_set(js, symbol_ctor, "toPrimitive", g_toPrimitive.sym); 322 348 js_set(js, symbol_ctor, "species", g_species.sym); ··· 354 380 jsval_t date_ctor = js_get(js, js_glob(js), "Date"); 355 381 jsval_t date_proto = js_get(js, date_ctor, "prototype"); 356 382 js_set(js, date_proto, g_toPrimitive.key, js_mkfun(date_toPrimitive)); 383 + 384 + jsval_t regexp_ctor = js_get(js, js_glob(js), "RegExp"); 385 + jsval_t regexp_proto = js_get(js, regexp_ctor, "prototype"); 386 + js_set(js, regexp_proto, g_split.key, js_mkfun(builtin_regexp_symbol_split)); 357 387 358 388 jsval_t promise_ctor = js_get(js, js_glob(js), "Promise"); 359 389 jsval_t promise_proto = js_get(js, promise_ctor, "prototype"); 360 390 js_set(js, promise_proto, g_toStringTag.key, js_mkstr(js, "Promise", 7)); 361 391 392 + jsval_t math_obj = js_get(js, js_glob(js), "Math"); 393 + if (is_object_type(math_obj)) js_set(js, math_obj, g_toStringTag.key, js_mkstr(js, "Math", 4)); 394 + 362 395 js_define_species_getter(js, promise_ctor); 363 396 js_define_species_getter(js, array_ctor); 364 - js_define_species_getter(js, js_get(js, js_glob(js), "RegExp")); 397 + js_define_species_getter(js, regexp_ctor); 365 398 }