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.

remove deprecated keywords and improve error messages

+15 -16
+1 -1
meson.build
··· 79 79 build_date = run_command('date', '+%Y-%m-%d', check: true).stdout().strip() 80 80 81 81 version_conf = configuration_data() 82 - version_conf.set('ANT_VERSION', '0.2.2.10') 82 + version_conf.set('ANT_VERSION', '0.2.2.11') 83 83 version_conf.set('ANT_GIT_HASH', git_hash) 84 84 version_conf.set('ANT_BUILD_DATE', build_date) 85 85
+8 -11
src/ant.c
··· 3699 3699 case 'd': if (streq("do", 2, buf, len)) return TOK_DO; if (streq("default", 7, buf, len)) return TOK_DEFAULT; if (streq("delete", 6, buf, len)) return TOK_DELETE; if (streq("debugger", 8, buf, len)) return TOK_DEBUGGER; break; 3700 3700 case 'e': if (streq("else", 4, buf, len)) return TOK_ELSE; if (streq("export", 6, buf, len)) return TOK_EXPORT; break; 3701 3701 case 'f': if (streq("for", 3, buf, len)) return TOK_FOR; if (streq("from", 4, buf, len)) return TOK_FROM; if (streq("function", 8, buf, len)) return TOK_FUNC; if (streq("finally", 7, buf, len)) return TOK_FINALLY; if (streq("false", 5, buf, len)) return TOK_FALSE; break; 3702 - case 'g': if (streq("globalThis", 10, buf, len)) return TOK_GLOBAL_THIS; break; 3702 + case 'g': break; 3703 3703 case 'i': if (streq("if", 2, buf, len)) return TOK_IF; if (streq("import", 6, buf, len)) return TOK_IMPORT; if (streq("in", 2, buf, len)) return TOK_IN; if (streq("instanceof", 10, buf, len)) return TOK_INSTANCEOF; break; 3704 3704 case 'l': if (streq("let", 3, buf, len)) return TOK_LET; break; 3705 3705 case 'n': if (streq("new", 3, buf, len)) return TOK_NEW; if (streq("null", 4, buf, len)) return TOK_NULL; break; ··· 3709 3709 case 't': if (streq("try", 3, buf, len)) return TOK_TRY; if (streq("this", 4, buf, len)) return TOK_THIS; if (streq("throw", 5, buf, len)) return TOK_THROW; if (streq("true", 4, buf, len)) return TOK_TRUE; if (streq("typeof", 6, buf, len)) return TOK_TYPEOF; break; 3710 3710 case 'u': if (streq("undefined", 9, buf, len)) return TOK_UNDEF; break; 3711 3711 case 'v': if (streq("var", 3, buf, len)) return TOK_VAR; if (streq("void", 4, buf, len)) return TOK_VOID; break; 3712 - case 'w': if (streq("while", 5, buf, len)) return TOK_WHILE; if (streq("with", 4, buf, len)) return TOK_WITH; if (streq("window", 6, buf, len)) return TOK_WINDOW; break; 3712 + case 'w': if (streq("while", 5, buf, len)) return TOK_WHILE; if (streq("with", 4, buf, len)) return TOK_WITH; break; 3713 3713 case 'y': if (streq("yield", 5, buf, len)) return TOK_YIELD; break; 3714 3714 } 3715 3715 return TOK_IDENTIFIER; ··· 6080 6080 if (is_err(prop)) return prop; 6081 6081 return r; 6082 6082 } 6083 - return js_mkerr(js, "bad lhs"); 6083 + return js_mkerr_typed(js, JS_ERR_SYNTAX, "Invalid left-hand side in assignment"); 6084 6084 } 6085 6085 6086 6086 switch (op) { ··· 6097 6097 case TOK_DOT: return do_dot_op(js, l, r); 6098 6098 case TOK_OPTIONAL_CHAIN: return do_optional_chain_op(js, l, r); 6099 6099 case TOK_POSTINC: { 6100 - if (vtype(lhs) != T_PROP) return js_mkerr(js, "bad lhs for ++"); 6100 + if (vtype(lhs) != T_PROP) return js_mkerr_typed(js, JS_ERR_SYNTAX, "Invalid left-hand side expression in postfix operation"); 6101 6101 do_assign_op(js, TOK_PLUS_ASSIGN, lhs, tov(1)); return l; 6102 6102 } 6103 6103 case TOK_POSTDEC: { 6104 - if (vtype(lhs) != T_PROP) return js_mkerr(js, "bad lhs for --"); 6104 + if (vtype(lhs) != T_PROP) return js_mkerr_typed(js, JS_ERR_SYNTAX, "Invalid left-hand side expression in postfix operation"); 6105 6105 do_assign_op(js, TOK_MINUS_ASSIGN, lhs, tov(1)); return l; 6106 6106 } 6107 6107 case TOK_NOT: return mkval(T_BOOL, !js_truthy(js, r)); ··· 6109 6109 if (vtype(r) == T_BIGINT) return bigint_neg(js, r); 6110 6110 break; 6111 6111 case TOK_UPLUS: 6112 - if (vtype(r) == T_BIGINT) return js_mkerr(js, "Cannot convert BigInt to number"); 6112 + if (vtype(r) == T_BIGINT) return js_mkerr(js, "Cannot convert a BigInt value to a number"); 6113 6113 break; 6114 6114 } 6115 6115 if (is_assign(op)) return do_assign_op(js, op, lhs, r); ··· 6184 6184 } 6185 6185 if (vtype(l) == T_BIGINT || vtype(r) == T_BIGINT) { 6186 6186 if (vtype(l) != T_BIGINT || vtype(r) != T_BIGINT) { 6187 - return js_mkerr(js, "Cannot mix BigInt and other types"); 6187 + return js_mkerr(js, "Cannot mix BigInt value and other types"); 6188 6188 } 6189 6189 switch (op) { 6190 6190 case TOK_PLUS: return bigint_add(js, l, r); ··· 6197 6197 case TOK_GT: return mkval(T_BOOL, bigint_compare(js, l, r) > 0); 6198 6198 case TOK_LE: return mkval(T_BOOL, bigint_compare(js, l, r) <= 0); 6199 6199 case TOK_GE: return mkval(T_BOOL, bigint_compare(js, l, r) >= 0); 6200 - default: return js_mkerr(js, "unsupported BigInt operation"); 6200 + default: return js_mkerr(js, "Unsupported BigInt operation"); 6201 6201 } 6202 6202 } 6203 6203 if (op == TOK_PLUS && (vtype(l) == T_STR || vtype(r) == T_STR || vtype(l) == T_ARR || vtype(r) == T_ARR)) { ··· 7609 7609 case TOK_TRUE: return js_mktrue(); 7610 7610 case TOK_FALSE: return js_mkfalse(); 7611 7611 case TOK_THIS: return js->this_val; 7612 - 7613 - case TOK_WINDOW: 7614 - case TOK_GLOBAL_THIS: return js_glob(js); 7615 7612 7616 7613 case TOK_OF: 7617 7614 case TOK_FOR:
+1 -1
src/core/events.js
··· 1 - globalThis.createEventTarget = function () { 1 + this.createEventTarget = function () { 2 2 const obj = {}; 3 3 obj.addEventListener = EventTargetPrototype.addEventListener; 4 4 obj.removeEventListener = EventTargetPrototype.removeEventListener;
+2
src/runtime.c
··· 17 17 18 18 js_set(js, js_glob(js), "Ant", runtime.ant_obj); 19 19 js_set(js, js_glob(js), "global", js_glob(js)); 20 + js_set(js, js_glob(js), "window", js_glob(js)); 21 + js_set(js, js_glob(js), "globalThis", js_glob(js)); 20 22 21 23 return &runtime; 22 24 }
+3 -3
tests/test_function_constructor.cjs
··· 32 32 console.log(' multi(5):', multi(5), '(expected: 11)'); 33 33 34 34 // Test 5: Access to global scope 35 - console.log('\nTest 5: Access to global scope variables'); 36 - let factor = 10; 35 + console.log('\nTest 5: Access to window.global scope variables'); 36 + window.global.factor = 10; 37 37 let multiply = new Function('x', 'return x * factor'); 38 38 console.log(' multiply(5):', multiply(5), '(expected: 50)'); 39 39 ··· 50 50 // Test 8: String concatenation 51 51 console.log('\nTest 8: String concatenation'); 52 52 let greet = new Function('name', 'return "Hello, " + name + "!"'); 53 - console.log(' greet("World"):', greet("World"), '(expected: "Hello, World!")'); 53 + console.log(' greet("World"):', greet('World'), '(expected: "Hello, World!")'); 54 54 55 55 console.log('\n=== All Function Constructor Tests Complete ===');