✔️ | supported |
❔ | unknown |
should be supported, unimplemented | |
➖ | will not be supported |
if-true | if(true) { e1 } else { e2 } |
✔️ | |
if(true) { e1 } |
✔️ | ||
if-false | if(false) { e1 } else { e2 } |
✔️ | |
if(false) { e1 } |
✔️ | ||
while | while(e1) { e2 } |
✔️ | |
while-false | while(false) { e2 } |
✔️ | |
throw | ➖ | ||
try-catch | ➖ | ||
try-catch-pop | ➖ | ||
uncaught-exception | ❔ | ||
try-finally-error | ➖ | ||
try-finally-break | ➖ | ||
try-finally-pop | ➖ | ||
label-break | l: { e; break l v; } |
✔️ | |
label-break-pop | l1: { e; break l2 v; } |
✔️ | |
label-pop | l: { v } |
❔ | |
break-break | break l1 (break l2 v) |
❔ |
object literal | {x:1, y:2} |
✔️ | |
get field | {x:1}.x |
✔️ | |
{x:1}["x"] |
❔ | TODO: merge this and ^ | |
get field - not found | {x:1}.y -> undefined |
❔ | |
get field - proto null | {x:1, __proto__: null}.y -> undefined |
||
get field - proto | {x:1, __proto__: l}.y -> (deref l).y |
||
update field | {x:1}.x = 4 |
✔️ | |
create field | {x:1}.y = 4 |
❔ | |
delete field | delete {x.1}.x |
||
delete field - not found | delete {x.1}.y |
+ |
✔️ | TODO: ensure it matches with implicit type conversions |
- |
✔️ | |
/ |
✔️ | |
% |
||
* |
✔️ | |
** |
||
& |
➖ | |
| |
➖ | |
>> |
➖ | |
>>> |
➖ | |
<< |
➖ | |
^ |
➖ | |
== |
➖ | |
=== |
✔️ | |
!= |
➖ | |
!== |
✔️ | |
in |
||
instanceof |
❔ | |
> |
✔️ | |
< |
✔️ | |
>= |
✔️ | |
<= |
✔️ | |
++ |
NOTE: might get desugared with js-transform | |
-- |
NOTE: might get desugared with js-transform |
this |
❔ | |
instanceof |
❔ | |
typeof |
❔ | TODO: ensure all cases are implemented |
❔
➖
var |
✔️ | |
let |
✔️ |
❔
➖