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.

add support for array length property in bracket and dot operations

+12 -10
+1 -1
meson.build
··· 74 74 build_date = run_command('date', '+%Y-%m-%d', check: true).stdout().strip() 75 75 76 76 version_conf = configuration_data() 77 - version_conf.set('ANT_VERSION', '0.2.1.1') 77 + version_conf.set('ANT_VERSION', '0.2.1.2') 78 78 version_conf.set('ANT_GIT_HASH', git_hash) 79 79 version_conf.set('ANT_BUILD_DATE', build_date) 80 80
+11 -9
src/ant.c
··· 4587 4587 } else { 4588 4588 return js_mkerr(js, "invalid index type"); 4589 4589 } 4590 - if ((vtype(obj) == T_STR || vtype(obj) == T_ARR) && streq(keystr, keylen, "length", 6)) { 4590 + if (streq(keystr, keylen, "length", 6)) { 4591 4591 if (vtype(obj) == T_STR) { 4592 4592 return tov(offtolen(loadoff(js, (jsoff_t) vdata(obj)))); 4593 + } 4594 + if (vtype(obj) == T_ARR) { 4595 + return tov(arr_length(js, obj)); 4593 4596 } 4594 4597 } 4595 4598 if (vtype(obj) == T_STR) { ··· 4668 4671 } 4669 4672 4670 4673 if (t == T_ARR && streq(ptr, plen, "length", 6)) { 4671 - jsval_t key = js_mkstr(js, "length", 6); 4672 - return mkpropref((jsoff_t) vdata(l), (jsoff_t) vdata(key)); 4674 + return tov(arr_length(js, l)); 4673 4675 } 4674 4676 4675 4677 if (t == T_STR || t == T_NUM || t == T_BOOL || t == T_BIGINT) { ··· 6006 6008 l_str = js_mkstr(js, buf, len); 6007 6009 if (is_err(l_str)) return l_str; 6008 6010 } else if (vtype(l) != T_STR) { 6009 - const char *str = js_str(js, l); 6010 - l_str = js_mkstr(js, str, strlen(str)); 6011 + l_str = js_tostring_val(js, l); 6011 6012 if (is_err(l_str)) return l_str; 6012 6013 } 6013 6014 ··· 6017 6018 r_str = js_mkstr(js, buf, len); 6018 6019 if (is_err(r_str)) return r_str; 6019 6020 } else if (vtype(r) != T_STR) { 6020 - const char *str = js_str(js, r); 6021 - r_str = js_mkstr(js, str, strlen(str)); 6021 + r_str = js_tostring_val(js, r); 6022 6022 if (is_err(r_str)) return r_str; 6023 6023 } 6024 6024 ··· 10878 10878 } 10879 10879 10880 10880 jsval_t v = js_mkundef(); 10881 + bool has_initializer = false; 10881 10882 js->consumed = 1; 10882 10883 if (next(js) == TOK_ASSIGN) { 10883 10884 js->consumed = 1; 10884 10885 v = js_expr(js); 10885 10886 if (is_err(v)) return v; 10887 + has_initializer = true; 10886 10888 } 10887 10889 10888 10890 if (exe) { ··· 10891 10893 10892 10894 jsoff_t existing_off = lkp(js, var_scope, decoded_name, decoded_len); 10893 10895 if (existing_off > 0) { 10894 - jsval_t key_val = js_mkstr(js, decoded_name, decoded_len); 10895 - if (!is_err(v)) { 10896 + if (has_initializer && !is_err(v)) { 10897 + jsval_t key_val = js_mkstr(js, decoded_name, decoded_len); 10896 10898 setprop(js, var_scope, key_val, resolveprop(js, v)); 10897 10899 } 10898 10900 } else {