 | Destructuring49 tests/language/statements/for-in/dstr/ | 81% ChakraCore: 100%JavaScriptCore: 100%SpiderMonkey: 100%V8: 100%Moddable XS: 67%QuickJS: 100%engine262: 0% |
 | A property name must not be visited more than once in any enumeration. SD 12.6.4-1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | The values of [[Enumerable]] attributes are not considered when determining if a property of a prototype object is shadowed by a previous object on the prototype chain SD 12.6.4-2.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-decl-abrupt-empty.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-decl-itr.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-decl-skip-itr.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-decl-zero-itr.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-expr-abrupt-empty.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-expr-itr.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-expr-skip-itr.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | cptn-expr-zero-itr.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 0 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | decl-async-fun.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | decl-async-gen.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | decl-cls.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | decl-const.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | decl-fun.js SD | ChakraCore: 1 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | decl-gen.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | decl-let.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-const-bound-names-dup.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-const-bound-names-fordecl-tdz.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-const-bound-names-in-stmt.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-const-bound-names-let.js D | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 0 of 1 |
 | head-const-fresh-binding-per-iteration.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-decl-expr.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-expr-expr.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-let-bound-names-dup.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-let-bound-names-fordecl-tdz.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-let-bound-names-in-stmt.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-let-bound-names-let.js D | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 0 of 1 |
 | head-let-destructuring.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-let-fresh-binding-per-iteration.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-lhs-cover-non-asnmt-trgt.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-lhs-cover.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-lhs-invalid-asnmt-ptrn-ary.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-lhs-invalid-asnmt-ptrn-obj.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-lhs-let.js D | ChakraCore: 1 of 1JavaScriptCore: 0 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | head-lhs-member.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-lhs-non-asnmt-trgt.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | head-var-bound-names-dup.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-var-bound-names-in-stmt.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | head-var-bound-names-let.js D | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | head-var-expr.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | identifier-let-allowed-as-lefthandside-expression-not-strict.js D | ChakraCore: 1 of 1JavaScriptCore: 0 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | labelled-fn-stmt-const.js SD | ChakraCore: 1 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | labelled-fn-stmt-let.js SD | ChakraCore: 1 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | labelled-fn-stmt-lhs.js SD | ChakraCore: 1 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | labelled-fn-stmt-var.js SD | ChakraCore: 1 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | let-array-with-newline.js D | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 0 of 1 |
 | let-block-with-newline.js D | ChakraCore: 0 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | let-identifier-with-newline.js D | ChakraCore: 0 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | order-after-define-property.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | order-enumerable-shadowed.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | order-property-added.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | order-property-on-prototype.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | order-simple-object.js SD | ChakraCore: 0 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | If execution of 'for(key in undefined)' passes SD S12.6.4_A1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using 'function __func(){return {a:1};}()' as Expession SD S12.6.4_A14_T2.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using block within 'for-in' Expression SD S12.6.4_A15.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 0 of 2 |
 | If execution of 'for(key in null)' passes SD S12.6.4_A2.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using an array as an Expression is appropriate. Here Expression is an array of numbers SD S12.6.4_A3.1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using an array as an Expression is appropriate. Here Expression is an array of numbers. Eval is used SD S12.6.4_A3.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using Object as an Expression is appropriate. Eval is used SD S12.6.4_A4.1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using Object as an Expression is appropriate. Eval is used SD S12.6.4_A4.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using hierarchical Object as an Expression is appropriate. The depth is two SD S12.6.4_A5.1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using hierarchical Object as an Expression is appropriate. The depth is two SD S12.6.4_A5.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using Object with custom prototype as an Expression is appropriate. The prototype is '{feat:2,hint:'protohint'}' SD S12.6.4_A6.1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | Using Object with custom prototype as an Expression is appropriate. The prototype is '{feat:2,hint:'protohint'}' SD S12.6.4_A6.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | 'for (LeftHandSideExpression in Expression) Statement' case SD S12.6.4_A7_T1.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | 'for (var VariableDeclarationNoIn in Expression) Statement' case SD S12.6.4_A7_T2.js | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-body-lex-boundary.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-body-lex-close.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-body-lex-open.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-body-var-none.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-head-lex-close.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-head-lex-open.js SD | ChakraCore: 2 of 2JavaScriptCore: 2 of 2SpiderMonkey: 2 of 2V8: 2 of 2Moddable XS: 2 of 2QuickJS: 2 of 2engine262: 2 of 2 |
 | scope-head-var-none.js D | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | var-arguments-fn-strict-init.js S | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | var-arguments-fn-strict.js S | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 0 of 1QuickJS: 1 of 1engine262: 1 of 1 |
 | var-arguments-strict-init.js S | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 0 of 1 |
 | var-arguments-strict.js S | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 0 of 1QuickJS: 1 of 1engine262: 0 of 1 |
 | var-eval-strict-init.js S | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 1 of 1QuickJS: 1 of 1engine262: 0 of 1 |
 | var-eval-strict.js S | ChakraCore: 1 of 1JavaScriptCore: 1 of 1SpiderMonkey: 1 of 1V8: 1 of 1Moddable XS: 0 of 1QuickJS: 1 of 1engine262: 0 of 1 |