mcjs: Are we ECMAScript yet?

This is about mcjs, a toy implementation of JavaScript inspired by LuaJIT that I'm writing for fun and learning. Learn more in the blog post.

This chart tracks how much of the test/language/ section of the Test262 ECMAScript Test Suite mcjs passes today. Feels good to see the line go up!

Commit # OK # Fail % OK Summary
0eb933048 738 2045 mcjs_vm: add tool `scan_eval`
40fa6a8aa 738 2045 mcjs_test262: disable some tests using `eval`
40f38e349 786 1997 mcjs_vm: hack: support eval("...")
6781a2fff 794 1989 scoping: error on const/let redeclaration
143f0025c 810 1973 scoping: error on const/let + function redeclaration
2d5e28948 798 1829 mcjs_test262: remove async tests
02cc2c850 793 1622 mcjs_test262: remove tests with generators
3f92a929a 793 1622 fix regs count (independent from instr count)
485184df1 793 1622 mcjs_tools: allow viewing other stack frames
4e72965e6 795 1620 impl `for(x in ...)` (without explicit `var`)
2bca36f80 795 1620 mcjs_tools: keep breakpoints across restart/file change
09039ebff 796 1619 for...in: disallow kws in strict mode
12cf279cf 810 1605 fix if miscompilation
108eb3862 810 1605 mcjs_tools: debug.sh: allow watch
3909872bb 810 1605 mcjs_tools: show source code when intrp is failed
68b1fb372 810 1605 mcjs_test262: track mcjs version in tests.db
617368611 810 1605 mcjs_test262: bit of refactoring
37313e96d 810 1605 mcjs_test262: add support for '-dirty' suffix to more scripts
ac1998a7d 823 1592 reject `var` redecls of `let`/`const`
2ece532f2 849 1566 mcjs_test262: default to --release
6e2be0d65 856 1559 reject `var` redecls of `let`/`const` at different scopes
02c8fc845 831 1584 mcjs_test262: default back to debug mode
2f548b7d4 831 1584 mcjs_test262: stop tracking status.txt
743677d6e 831 1584 bc compiler: separate path for scripts
dda4b3afa 831 1584 interpreter: fix: wrong # instrs for root frame
e7b06844e 831 1584 mcjs_test262: scripts: refactor; add mk_report, run_multi
58833a39f 831 1584 mcjs_test262: add status page generator
2876d3ef6 831 1584 mcjs_test262: view 'general': add column is_strict
b412ede64 831 1584 mcjs_tools: new script: compare.rb
fc8831ecf mcjs_test262: use version 'dirty' when the working tree is dirty