From 9ca146955211f42437823649080a28f5dfedd77f Mon Sep 17 00:00:00 2001 From: Satish Srinivasan Date: Sun, 22 Sep 2024 04:04:02 +0530 Subject: [PATCH] FEAT: Support default parameters --- .../org/mozilla/javascript/Arguments.java | 6 + .../org/mozilla/javascript/BaseFunction.java | 5 + .../org/mozilla/javascript/CodeGenerator.java | 1 + .../org/mozilla/javascript/IRFactory.java | 67 +- .../javascript/InterpretedFunction.java | 5 + .../mozilla/javascript/InterpreterData.java | 1 + .../java/org/mozilla/javascript/Node.java | 3 +- .../mozilla/javascript/NodeTransformer.java | 11 + .../java/org/mozilla/javascript/Parser.java | 380 +++- .../java/org/mozilla/javascript/Token.java | 2 + .../mozilla/javascript/ast/FunctionNode.java | 29 + .../org/mozilla/javascript/ast/Scope.java | 1 - .../mozilla/javascript/ast/ScriptNode.java | 11 + .../mozilla/javascript/optimizer/Codegen.java | 16 +- .../javascript/resources/Messages.properties | 17 +- .../javascript/tests/Issue385Test.java | 35 +- .../tests/DefaultParametersTest.java | 449 +++++ .../javascript/tests/Test262SuiteTest.java | 1 - tests/testsrc/test262.properties | 1595 +++++++---------- 19 files changed, 1562 insertions(+), 1073 deletions(-) create mode 100644 tests/src/test/java/org/mozilla/javascript/tests/DefaultParametersTest.java diff --git a/rhino/src/main/java/org/mozilla/javascript/Arguments.java b/rhino/src/main/java/org/mozilla/javascript/Arguments.java index 7674b6f187..e041880c00 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Arguments.java +++ b/rhino/src/main/java/org/mozilla/javascript/Arguments.java @@ -120,6 +120,12 @@ private boolean sharedWithActivation(int index) { return false; } NativeFunction f = activation.function; + + // Check if default arguments are present + if (f == null || f.hasDefaultParameters()) { + return false; + } + int definedCount = f.getParamCount(); if (index < definedCount) { // Check if argument is not hidden by later argument with the same diff --git a/rhino/src/main/java/org/mozilla/javascript/BaseFunction.java b/rhino/src/main/java/org/mozilla/javascript/BaseFunction.java index c1faff15dc..15698d511d 100644 --- a/rhino/src/main/java/org/mozilla/javascript/BaseFunction.java +++ b/rhino/src/main/java/org/mozilla/javascript/BaseFunction.java @@ -70,6 +70,11 @@ protected boolean isGeneratorFunction() { return isGeneratorFunction; } + // Generated code will override this + protected boolean hasDefaultParameters() { + return false; + } + /** * Gets the value returned by calling the typeof operator on this object. * diff --git a/rhino/src/main/java/org/mozilla/javascript/CodeGenerator.java b/rhino/src/main/java/org/mozilla/javascript/CodeGenerator.java index 8abe18f550..7b4867e6d0 100644 --- a/rhino/src/main/java/org/mozilla/javascript/CodeGenerator.java +++ b/rhino/src/main/java/org/mozilla/javascript/CodeGenerator.java @@ -189,6 +189,7 @@ private void generateICodeFromTree(Node tree) { itsData.argIsConst = scriptOrFn.getParamAndVarConst(); itsData.argCount = scriptOrFn.getParamCount(); itsData.argsHasRest = scriptOrFn.hasRestParameter(); + itsData.argsHasDefaults = scriptOrFn.getDefaultParams() != null; itsData.rawSourceStart = scriptOrFn.getRawSourceStart(); itsData.rawSourceEnd = scriptOrFn.getRawSourceEnd(); diff --git a/rhino/src/main/java/org/mozilla/javascript/IRFactory.java b/rhino/src/main/java/org/mozilla/javascript/IRFactory.java index e0c74906a1..b8ec566228 100644 --- a/rhino/src/main/java/org/mozilla/javascript/IRFactory.java +++ b/rhino/src/main/java/org/mozilla/javascript/IRFactory.java @@ -577,6 +577,44 @@ private Node transformFunction(FunctionNode fn) { ++parser.nestingOfFunction; // only for body, not params Node body = transform(fn.getBody()); + /* Process simple default parameters */ + List defaultParams = fn.getDefaultParams(); + if (defaultParams != null) { + for (int i = defaultParams.size() - 1; i > 0; ) { + if (defaultParams.get(i) instanceof AstNode + && defaultParams.get(i - 1) instanceof String) { + AstNode rhs = (AstNode) defaultParams.get(i); + String name = (String) defaultParams.get(i - 1); + body.addChildToFront( + createIf( + createBinary( + Token.SHEQ, + parser.createName(name), + parser.createName("undefined")), + new Node( + Token.EXPR_VOID, + createAssignment( + Token.ASSIGN, + parser.createName(name), + transform(rhs)), + body.getLineno()), + null, + body.getLineno())); + } + i -= 2; + } + } + + /* transform nodes used as default parameters */ + List dfns = fn.getDestructuringRvalues(); + if (dfns != null) { + for (var i : dfns) { + Node a = i[0]; + AstNode b = (AstNode) i[1]; + a.replaceChild(b, transform(b)); + } + } + if (destructuring != null) { body.addChildToFront(new Node(Token.EXPR_VOID, destructuring, lineno)); } @@ -859,7 +897,7 @@ private Node transformObjectLiteral(ObjectLiteral node) { int size = elems.size(), i = 0; properties = new Object[size]; for (ObjectProperty prop : elems) { - Object propKey = getPropKey(prop.getLeft()); + Object propKey = Parser.getPropKey(prop.getLeft()); if (propKey == null) { Node theId = transform(prop.getLeft()); properties[i++] = theId; @@ -882,23 +920,6 @@ private Node transformObjectLiteral(ObjectLiteral node) { return object; } - private Object getPropKey(Node id) { - Object key; - if (id instanceof Name) { - String s = ((Name) id).getIdentifier(); - key = ScriptRuntime.getIndexObject(s); - } else if (id instanceof StringLiteral) { - String s = ((StringLiteral) id).getValue(); - key = ScriptRuntime.getIndexObject(s); - } else if (id instanceof NumberLiteral) { - double n = ((NumberLiteral) id).getNumber(); - key = ScriptRuntime.getIndexObject(n); - } else { - key = null; // Filled later - } - return key; - } - private Node transformParenExpr(ParenthesizedExpression node) { AstNode expr = node.getExpression(); while (expr instanceof ParenthesizedExpression) { @@ -1133,7 +1154,9 @@ private Node transformVariableInitializers(VariableDeclaration node) { } else { astNodePos.push(var); try { - Node d = parser.createDestructuringAssignment(node.getType(), left, right); + Node d = + parser.createDestructuringAssignment( + node.getType(), left, right, this::transform); node.addChildToBack(d); } finally { astNodePos.pop(); @@ -1501,8 +1524,7 @@ private Node createForIn( Node assign; if (destructuring != -1) { assign = - parser.createDestructuringAssignment( - declType, lvalue, id, (AstNode node) -> transform(node)); + parser.createDestructuringAssignment(declType, lvalue, id, this::transform); if (!isForEach && !isForOf && (destructuring == Token.OBJECTLIT || destructuringLen != 2)) { @@ -2079,8 +2101,7 @@ private Node createAssignment(int assignType, Node left, Node right) { parser.reportError("msg.bad.destruct.op"); return right; } - return parser.createDestructuringAssignment( - -1, left, right, (AstNode node) -> transform(node)); + return parser.createDestructuringAssignment(-1, left, right, this::transform); } parser.reportError("msg.bad.assign.left"); return right; diff --git a/rhino/src/main/java/org/mozilla/javascript/InterpretedFunction.java b/rhino/src/main/java/org/mozilla/javascript/InterpretedFunction.java index 2976a0c27b..35ec112874 100644 --- a/rhino/src/main/java/org/mozilla/javascript/InterpretedFunction.java +++ b/rhino/src/main/java/org/mozilla/javascript/InterpretedFunction.java @@ -164,4 +164,9 @@ boolean hasFunctionNamed(String name) { } return true; } + + @Override + public boolean hasDefaultParameters() { + return idata.argsHasDefaults; + } } diff --git a/rhino/src/main/java/org/mozilla/javascript/InterpreterData.java b/rhino/src/main/java/org/mozilla/javascript/InterpreterData.java index c97f7e618a..45ff68eb06 100644 --- a/rhino/src/main/java/org/mozilla/javascript/InterpreterData.java +++ b/rhino/src/main/java/org/mozilla/javascript/InterpreterData.java @@ -69,6 +69,7 @@ private void init() { boolean[] argIsConst; int argCount; boolean argsHasRest; + boolean argsHasDefaults; int itsMaxCalleeArgs; diff --git a/rhino/src/main/java/org/mozilla/javascript/Node.java b/rhino/src/main/java/org/mozilla/javascript/Node.java index 42b9a757ab..47cee265af 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Node.java +++ b/rhino/src/main/java/org/mozilla/javascript/Node.java @@ -65,7 +65,8 @@ public class Node implements Iterable { ARROW_FUNCTION_PROP = 26, TEMPLATE_LITERAL_PROP = 27, TRAILING_COMMA = 28, - LAST_PROP = 28; + OBJECT_LITERAL_DESTRUCTURING = 29, + LAST_PROP = 29; // values of ISNUMBER_PROP to specify // which of the children are Number types diff --git a/rhino/src/main/java/org/mozilla/javascript/NodeTransformer.java b/rhino/src/main/java/org/mozilla/javascript/NodeTransformer.java index 46c717cb99..67a8d3a777 100644 --- a/rhino/src/main/java/org/mozilla/javascript/NodeTransformer.java +++ b/rhino/src/main/java/org/mozilla/javascript/NodeTransformer.java @@ -6,12 +6,15 @@ package org.mozilla.javascript; +import static org.mozilla.javascript.Context.reportError; + import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; import org.mozilla.javascript.ast.FunctionNode; import org.mozilla.javascript.ast.Jump; +import org.mozilla.javascript.ast.Name; import org.mozilla.javascript.ast.Scope; import org.mozilla.javascript.ast.ScriptNode; @@ -343,6 +346,14 @@ private void transformCompilationUnit_r( case Token.SETNAME: if (inStrictMode) { node.setType(Token.STRICT_SETNAME); + if (node.getFirstChild().getType() == Token.BINDNAME) { + Node name = node.getFirstChild(); + if (name instanceof Name + && ((Name) name).getIdentifier().equals("eval")) { + // Don't allow set of `eval` in strict mode + reportError("syntax error"); + } + } } /* fall through */ case Token.NAME: diff --git a/rhino/src/main/java/org/mozilla/javascript/Parser.java b/rhino/src/main/java/org/mozilla/javascript/Parser.java index 09aab64f8c..cb13ad6c0f 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Parser.java +++ b/rhino/src/main/java/org/mozilla/javascript/Parser.java @@ -719,6 +719,9 @@ private AstNode parseFunctionBody(int type, FunctionNode fnNode) throws IOExcept if (directive == null) { inDirectivePrologue = false; } else if (directive.equals("use strict")) { + if (fnNode.getDefaultParams() != null) { + reportError("msg.default.args.use.strict"); + } inUseStrictDirective = true; fnNode.setInStrictMode(true); if (!savedStrictMode) { @@ -763,6 +766,8 @@ private void parseFunctionParams(FunctionNode fnNode) throws IOException { // Would prefer not to call createDestructuringAssignment until codegen, // but the symbol definitions have to happen now, before body is parsed. Map destructuring = null; + Map destructuringDefault = null; + Set paramNames = new HashSet<>(); do { int tt = peekToken(); @@ -781,18 +786,45 @@ private void parseFunctionParams(FunctionNode fnNode) throws IOException { reportError("msg.parm.after.rest", ts.tokenBeg, ts.tokenEnd - ts.tokenBeg); } - AstNode expr = destructuringPrimaryExpr(); - markDestructuring(expr); - fnNode.addParam(expr); - // Destructuring assignment for parameters: add a dummy - // parameter name, and add a statement to the body to initialize - // variables from the destructuring assignment + AstNode expr = destructuringAssignExpr(); if (destructuring == null) { destructuring = new HashMap<>(); } - String pname = currentScriptOrFn.getNextTempName(); - defineSymbol(Token.LP, pname, false); - destructuring.put(pname, expr); + + if (expr instanceof Assignment) { + // We have default arguments inside destructured function parameters + // eg: f([x = 1] = [2]) { ... }, transform this into: + // f(x) { + // if ($1 == undefined) + // var $1 = [2]; + // if (x == undefined) + // if (($1[0]) == undefined) + // var x = 1; + // else + // var x = $1[0]; + // } + // fnNode.addParam(name) + AstNode lhs = ((Assignment) expr).getLeft(); // [x = 1] + AstNode rhs = ((Assignment) expr).getRight(); // [2] + markDestructuring(lhs); + fnNode.addParam(lhs); + String pname = currentScriptOrFn.getNextTempName(); + defineSymbol(Token.LP, pname, false); + if (destructuringDefault == null) { + destructuringDefault = new HashMap<>(); + } + destructuring.put(pname, lhs); + destructuringDefault.put(pname, rhs); + } else { + markDestructuring(expr); + fnNode.addParam(expr); + // Destructuring assignment for parameters: add a dummy + // parameter name, and add a statement to the body to initialize + // variables from the destructuring assignment + String pname = currentScriptOrFn.getNextTempName(); + defineSymbol(Token.LP, pname, false); + destructuring.put(pname, expr); + } } else { boolean wasRest = false; if (tt == Token.DOTDOTDOT) { @@ -828,6 +860,14 @@ private void parseFunctionParams(FunctionNode fnNode) throws IOException { addError("msg.dup.param.strict", paramName); paramNames.add(paramName); } + + if (matchToken(Token.ASSIGN, true)) { + if (compilerEnv.getLanguageVersion() >= Context.VERSION_ES6) { + fnNode.putDefaultParams(paramName, assignExpr()); + } else { + reportError("msg.default.args"); + } + } } else { fnNode.addParam(makeErrorNode()); } @@ -838,9 +878,16 @@ private void parseFunctionParams(FunctionNode fnNode) throws IOException { Node destructuringNode = new Node(Token.COMMA); // Add assignment helper for each destructuring parameter for (Map.Entry param : destructuring.entrySet()) { + Node defaultValue = null; + if (destructuringDefault != null) { + defaultValue = destructuringDefault.get(param.getKey()); + } Node assign = createDestructuringAssignment( - Token.VAR, param.getValue(), createName(param.getKey())); + Token.VAR, + param.getValue(), + createName(param.getKey()), + defaultValue); destructuringNode.addChildToBack(assign); } fnNode.putProp(Node.DESTRUCTURING_PARAMS, destructuringNode); @@ -977,6 +1024,7 @@ private AstNode arrowFunction(AstNode params) throws IOException { // Would prefer not to call createDestructuringAssignment until codegen, // but the symbol definitions have to happen now, before body is parsed. Map destructuring = new HashMap<>(); + Map destructuringDefault = new HashMap<>(); Set paramNames = new HashSet<>(); PerFunctionVariables savedVars = new PerFunctionVariables(fnNode); @@ -988,19 +1036,27 @@ private AstNode arrowFunction(AstNode params) throws IOException { } AstNode p = ((ParenthesizedExpression) params).getExpression(); if (!(p instanceof EmptyExpression)) { - arrowFunctionParams(fnNode, p, destructuring, paramNames); + arrowFunctionParams(fnNode, p, destructuring, destructuringDefault, paramNames); } } else { - arrowFunctionParams(fnNode, params, destructuring, paramNames); + arrowFunctionParams( + fnNode, params, destructuring, destructuringDefault, paramNames); } if (!destructuring.isEmpty()) { Node destructuringNode = new Node(Token.COMMA); // Add assignment helper for each destructuring parameter for (Map.Entry param : destructuring.entrySet()) { + Node defaultValue = null; + if (destructuringDefault != null) { + defaultValue = destructuringDefault.get(param.getKey()); + } Node assign = createDestructuringAssignment( - Token.VAR, param.getValue(), createName(param.getKey())); + Token.VAR, + param.getValue(), + createName(param.getKey()), + defaultValue); destructuringNode.addChildToBack(assign); } fnNode.putProp(Node.DESTRUCTURING_PARAMS, destructuringNode); @@ -1031,7 +1087,9 @@ private void arrowFunctionParams( FunctionNode fnNode, AstNode params, Map destructuring, - Set paramNames) { + Map destructuringDefault, + Set paramNames) + throws IOException { if (params instanceof ArrayLiteral || params instanceof ObjectLiteral) { markDestructuring(params); fnNode.addParam(params); @@ -1040,9 +1098,17 @@ private void arrowFunctionParams( destructuring.put(pname, params); } else if (params instanceof InfixExpression && params.getType() == Token.COMMA) { arrowFunctionParams( - fnNode, ((InfixExpression) params).getLeft(), destructuring, paramNames); + fnNode, + ((InfixExpression) params).getLeft(), + destructuring, + destructuringDefault, + paramNames); arrowFunctionParams( - fnNode, ((InfixExpression) params).getRight(), destructuring, paramNames); + fnNode, + ((InfixExpression) params).getRight(), + destructuring, + destructuringDefault, + paramNames); } else if (params instanceof Name) { fnNode.addParam(params); String paramName = ((Name) params).getIdentifier(); @@ -1055,6 +1121,32 @@ private void arrowFunctionParams( if (paramNames.contains(paramName)) addError("msg.dup.param.strict", paramName); paramNames.add(paramName); } + } else if (params instanceof Assignment) { + if (compilerEnv.getLanguageVersion() >= Context.VERSION_ES6) { + AstNode rhs = ((Assignment) params).getRight(); + AstNode lhs = ((Assignment) params).getLeft(); + String paramName; + + /* copy default values for use in IR */ + if (lhs instanceof Name) { + paramName = ((Name) lhs).getIdentifier(); + fnNode.putDefaultParams(paramName, rhs); + arrowFunctionParams( + fnNode, lhs, destructuring, destructuringDefault, paramNames); + } else if (lhs instanceof ArrayLiteral || lhs instanceof ObjectLiteral) { + markDestructuring(lhs); + fnNode.addParam(lhs); + String pname = currentScriptOrFn.getNextTempName(); + defineSymbol(Token.LP, pname, false); + destructuring.put(pname, lhs); + destructuringDefault.put(pname, rhs); + } else { + reportError("msg.no.parm", params.getPosition(), params.getLength()); + fnNode.addParam(makeErrorNode()); + } + } else { + reportError("msg.default.args"); + } } else { reportError("msg.no.parm", params.getPosition(), params.getLength()); fnNode.addParam(makeErrorNode()); @@ -2147,8 +2239,12 @@ private VariableDeclaration variables(int declType, int pos, boolean isStatement if (tt == Token.LB || tt == Token.LC) { // Destructuring assignment, e.g., var [a,b] = ... + + // TODO: support default values inside destructured assignment + // eg: for (let { x = 3 } = {}) ... destructuring = destructuringPrimaryExpr(); end = getNodeEnd(destructuring); + if (!(destructuring instanceof DestructuringForm)) reportError("msg.bad.assign.left", kidPos, end - kidPos); markDestructuring(destructuring); @@ -2336,13 +2432,6 @@ private AstNode assignExpr() throws IOException { tt = peekToken(); } if (Token.FIRST_ASSIGN <= tt && tt <= Token.LAST_ASSIGN) { - if (inDestructuringAssignment) { - // default values inside destructuring assignments, - // like 'var [a = 10] = b' or 'var {a: b = 10} = c', - // are not supported - reportError("msg.destruct.default.vals"); - } - consumeToken(); // Pull out JSDoc info and reset it before recursing. @@ -2365,6 +2454,9 @@ private AstNode assignExpr() throws IOException { } else if (!hasEOL && tt == Token.ARROW) { consumeToken(); pn = arrowFunction(pn); + } else if (pn.getIntProp(Node.OBJECT_LITERAL_DESTRUCTURING, 0) == 1 + && !inDestructuringAssignment) { + reportError("msg.syntax"); } return pn; } @@ -3020,7 +3112,6 @@ private AstNode attributeAccess() throws IOException { * Check if :: follows name in which case it becomes a qualified name. * * @param atPos a natural number if we just read an '@' token, else -1 - * @param s the name or string that was matched (an identifier, "throw" or "*"). * @param memberTypeFlags flags tracking whether we're a '.' or '..' child * @return an XmlRef node if it's an attribute access, a child of a '..' operator, or the name * is followed by ::. For a plain name, returns a Name node. Returns an ErrorNode for @@ -3092,6 +3183,15 @@ private XmlElemRef xmlElemRef(int atPos, Name namespace, int colonPos) throws IO return ref; } + private AstNode destructuringAssignExpr() throws IOException, ParserException { + try { + inDestructuringAssignment = true; + return assignExpr(); + } finally { + inDestructuringAssignment = false; + } + } + private AstNode destructuringPrimaryExpr() throws IOException, ParserException { try { inDestructuringAssignment = true; @@ -3210,8 +3310,11 @@ private AstNode parenExpr() throws IOException { int length = ts.tokenEnd - begin; + boolean hasObjectLiteralDestructuring = + e.getIntProp(Node.OBJECT_LITERAL_DESTRUCTURING, 0) == 1; boolean hasTrailingComma = e.getIntProp(Node.TRAILING_COMMA, 0) == 1; - if ((hasTrailingComma || e.getType() == Token.EMPTY) && peekToken() != Token.ARROW) { + if ((hasTrailingComma || hasObjectLiteralDestructuring || e.getType() == Token.EMPTY) + && peekToken() != Token.ARROW) { reportError("msg.syntax"); return makeErrorNode(); } @@ -3516,7 +3619,7 @@ private ObjectLiteral objectLiteral() throws IOException { setterNames = new HashSet<>(); } Comment objJsdocNode = getAndResetJsDoc(); - + boolean objectLiteralDestructuringDefault = false; commaLoop: for (; ; ) { String propertyName = null; @@ -3549,7 +3652,20 @@ private ObjectLiteral objectLiteral() throws IOException { // many tokens.) int peeked = peekToken(); if (peeked != Token.COMMA && peeked != Token.COLON && peeked != Token.RC) { - if (peeked == Token.LP) { + if (peeked == Token.ASSIGN) { // we have an object literal with + // destructuring assignment and a default value + objectLiteralDestructuringDefault = true; + if (compilerEnv.getLanguageVersion() >= Context.VERSION_ES6) { + elems.add(plainProperty(pname, tt)); + if (matchToken(Token.COMMA, true)) { + continue; + } else { + break commaLoop; + } + } else { + reportError("msg.default.args"); + } + } else if (peeked == Token.LP) { entryKind = METHOD_ENTRY; } else if (pname.getType() == Token.NAME) { if ("get".equals(propertyName)) { @@ -3619,6 +3735,9 @@ private ObjectLiteral objectLiteral() throws IOException { mustMatchToken(Token.RC, "msg.no.brace.prop", true); ObjectLiteral pn = new ObjectLiteral(pos, ts.tokenEnd - pos); + if (objectLiteralDestructuringDefault) { + pn.putIntProp(Node.OBJECT_LITERAL_DESTRUCTURING, 1); + } if (objJsdocNode != null) { pn.setJsDocNode(objJsdocNode); } @@ -3696,6 +3815,14 @@ private ObjectProperty plainProperty(AstNode property, int ptt) throws IOExcepti pn.setIsShorthand(true); pn.setLeftAndRight(property, nn); return pn; + } else if (tt == Token.ASSIGN) { + /* we're in destructuring with defaults in a object literal; treat defaults as values */ + ObjectProperty pn = new ObjectProperty(); + consumeToken(); // consume the `=` + Assignment defaultValue = new Assignment(property, assignExpr()); + defaultValue.setType(Token.ASSIGN); + pn.setLeftAndRight(property, defaultValue); + return pn; } mustMatchToken(Token.COLON, "msg.no.colon.prop", true); ObjectProperty pn = new ObjectProperty(); @@ -3923,7 +4050,7 @@ private void saveNameTokenData(int pos, String name, int lineno) { * to 0, and if it's beyond the end of the source buffer, the last source position is used. * @return the offset of the beginning of the line containing pos (i.e. 1+ the offset of the * first preceding newline). Returns -1 if the {@link CompilerEnvirons} is not set to - * ide-mode, and {@link #parse(java.io.Reader,String,int)} was used. + * ide-mode, and {@link #parse(Reader,String,int)} was used. */ private int lineBeginningFor(int pos) { if (sourceChars == null) { @@ -4034,20 +4161,32 @@ PerFunctionVariables createPerFunctionVariables(FunctionNode fnNode) { * @param right expression to assign from * @return expression that performs a series of assignments to the variables defined in left */ - Node createDestructuringAssignment(int type, Node left, Node right) { - return createDestructuringAssignment(type, left, right, null); - } - - Node createDestructuringAssignment(int type, Node left, Node right, Transformer transformer) { + Node createDestructuringAssignment( + int type, Node left, Node right, Node defaultValue, Transformer transformer) { String tempName = currentScriptOrFn.getNextTempName(); - Node result = destructuringAssignmentHelper(type, left, right, tempName, transformer); + Node result = + destructuringAssignmentHelper( + type, left, right, tempName, defaultValue, transformer); Node comma = result.getLastChild(); comma.addChildToBack(createName(tempName)); return result; } + Node createDestructuringAssignment(int type, Node left, Node right, Transformer transformer) { + return createDestructuringAssignment(type, left, right, null, transformer); + } + + Node createDestructuringAssignment(int type, Node left, Node right, Node defaultValue) { + return createDestructuringAssignment(type, left, right, defaultValue, null); + } + Node destructuringAssignmentHelper( - int variableType, Node left, Node right, String tempName, Transformer transformer) { + int variableType, + Node left, + Node right, + String tempName, + Node defaultValue, + Transformer transformer) { Scope result = createScopeNode(Token.LETEXPR, left.getLineno()); result.addChildToFront(new Node(Token.LET, createName(Token.NAME, tempName, right))); try { @@ -4068,6 +4207,7 @@ Node destructuringAssignmentHelper( tempName, comma, destructuringNames, + defaultValue, transformer); } else if (left instanceof ObjectLiteral) { empty = @@ -4077,6 +4217,7 @@ Node destructuringAssignmentHelper( tempName, comma, destructuringNames, + defaultValue, transformer); } else if (left.getType() == Token.GETPROP || left.getType() == Token.GETELEM) { switch (variableType) { @@ -4103,17 +4244,26 @@ boolean destructuringArray( String tempName, Node parent, List destructuringNames, + Node defaultValue, /* defaultValue to use in function param decls */ Transformer transformer) { boolean empty = true; int setOp = variableType == Token.CONST ? Token.SETCONST : Token.SETNAME; int index = 0; + boolean defaultValuesSetup = false; for (AstNode n : array.getElements()) { if (n.getType() == Token.EMPTY) { index++; continue; } Node rightElem = new Node(Token.GETELEM, createName(tempName), createNumber(index)); + + if (defaultValue != null && !defaultValuesSetup) { + setupDefaultValues(tempName, parent, defaultValue, setOp, transformer); + defaultValuesSetup = true; + } + if (n.getType() == Token.NAME) { + /* [x] = [1] */ String name = n.getString(); parent.addChildToBack( new Node(setOp, createName(Token.BINDNAME, name, null), rightElem)); @@ -4121,6 +4271,16 @@ boolean destructuringArray( defineSymbol(variableType, name, true); destructuringNames.add(name); } + } else if (n.getType() == Token.ASSIGN) { + /* [x = 1] = [2] */ + processDestructuringDefaults( + variableType, + parent, + destructuringNames, + (Assignment) n, + rightElem, + setOp, + transformer); } else { parent.addChildToBack( destructuringAssignmentHelper( @@ -4128,6 +4288,7 @@ boolean destructuringArray( n, rightElem, currentScriptOrFn.getNextTempName(), + null, transformer)); } index++; @@ -4136,25 +4297,156 @@ boolean destructuringArray( return empty; } + private void processDestructuringDefaults( + int variableType, + Node parent, + List destructuringNames, + Assignment n, + Node rightElem, + int setOp, + Transformer transformer) { + Node left = n.getLeft(); + Node right = null; + if (left.getType() == Token.NAME) { + String name = left.getString(); + // x = (x == undefined) ? + // (($1[0] == undefined) ? + // 1 + // : $1[0]) + // : x + + if ((n.getRight() instanceof FunctionNode + || n.getRight() instanceof UpdateExpression + || n.getRight() instanceof ParenthesizedExpression) + && transformer != null) { + right = transformer.transform(n.getRight()); + } else { + right = n.getRight(); + } + + Node cond_inner = + new Node( + Token.HOOK, + new Node(Token.SHEQ, createName("undefined"), rightElem), + right, + rightElem); + + // if right is a function/update expression, it should be processed later + // store it in the node to be processed + if ((right instanceof FunctionNode + || right instanceof UpdateExpression + || right instanceof ParenthesizedExpression) + && transformer == null) { + currentScriptOrFn.putDestructuringRvalues(cond_inner, right); + } + + Node cond = + new Node( + Token.HOOK, + new Node(Token.SHEQ, createName("undefined"), createName(name)), + cond_inner, + left); + parent.addChildToBack(new Node(setOp, createName(Token.BINDNAME, name, null), cond)); + if (variableType != -1) { + defineSymbol(variableType, name, true); + destructuringNames.add(name); + } + } else { + // TODO: should handle other nested values on the lhs (ArrayLiteral, ObjectLiteral) + } + } + + static Object getPropKey(Node id) { + Object key; + if (id instanceof Name) { + String s = ((Name) id).getIdentifier(); + key = ScriptRuntime.getIndexObject(s); + } else if (id instanceof StringLiteral) { + String s = ((StringLiteral) id).getValue(); + key = ScriptRuntime.getIndexObject(s); + } else if (id instanceof NumberLiteral) { + double n = ((NumberLiteral) id).getNumber(); + key = ScriptRuntime.getIndexObject(n); + } else { + key = null; // Filled later + } + return key; + } + + private void setupDefaultValues( + String tempName, Node parent, Node defaultValue, int setOp, Transformer transformer) { + if (defaultValue != null) { + // if there's defaultValue it can be substituted for tempName if that's undefined + // i.e. $1 = ($1 == undefined) ? defaultValue : $1 + Node defaultRvalue = new Node(defaultValue.getType()); + + if (defaultValue instanceof ArrayLiteral) { + for (AstNode child : ((ArrayLiteral) defaultValue).getElements()) + defaultRvalue.addChildToBack(child); + } else if (defaultValue instanceof ObjectLiteral) { + // TODO: check if "Symbol.iterator" is defined + // Node error_call = new Node(Token.NEW, createName("Error")); + // error_call.addChildToBack(Node.newString("value is not + // iterable")); + // + // Node check_iterator = new Node( + // Token.HOOK, + // new Node(Token.SHEQ, + // new Node(Token.GETPROP, + // defaultValue, + // createName("Symbol.iterator")), + // createName("undefined")), + // error_call, + // new Node(Token.TRUE)); + // parent.addChildToBack(check_iterator); + + List elems = ((ObjectLiteral) defaultValue).getElements(); + Object[] props = new Object[elems.size()]; + int i = 0; + for (ObjectProperty child : elems) { + Object key = getPropKey(child.getLeft()); + Node right = child.getRight(); + props[i++] = key; + defaultRvalue.addChildToBack(right); + } + defaultRvalue.putProp(Node.OBJECT_IDS_PROP, props); + } + + Node cond_default = + new Node( + Token.HOOK, + new Node(Token.SHEQ, createName(tempName), createName("undefined")), + defaultRvalue, + createName(tempName)); + + Node set_default = + new Node(setOp, createName(Token.BINDNAME, tempName, null), cond_default); + parent.addChildToBack(set_default); + } + } + boolean destructuringObject( ObjectLiteral node, int variableType, String tempName, Node parent, List destructuringNames, + Node defaultValue, /* defaultValue to use in function param decls */ Transformer transformer) { boolean empty = true; int setOp = variableType == Token.CONST ? Token.SETCONST : Token.SETNAME; + boolean defaultValuesSetup = false; for (ObjectProperty prop : node.getElements()) { int lineno = 0; - // This function is sometimes called from the IRFactory when + // This function is sometimes called from the IRFactory // when executing regression tests, and in those cases the // tokenStream isn't set. Deal with it. if (ts != null) { lineno = ts.lineno; } AstNode id = prop.getLeft(); + Node rightElem = null; if (id instanceof Name) { Node s = Node.newString(((Name) id).getIdentifier()); @@ -4171,7 +4463,13 @@ boolean destructuringObject( } else { throw codeBug(); } + rightElem.setLineno(lineno); + if (defaultValue != null && !defaultValuesSetup) { + setupDefaultValues(tempName, parent, defaultValue, setOp, transformer); + defaultValuesSetup = true; + } + AstNode value = prop.getRight(); if (value.getType() == Token.NAME) { String name = ((Name) value).getIdentifier(); @@ -4181,6 +4479,15 @@ boolean destructuringObject( defineSymbol(variableType, name, true); destructuringNames.add(name); } + } else if (value.getType() == Token.ASSIGN) { + processDestructuringDefaults( + variableType, + parent, + destructuringNames, + (Assignment) value, + rightElem, + setOp, + transformer); } else { parent.addChildToBack( destructuringAssignmentHelper( @@ -4188,6 +4495,7 @@ boolean destructuringObject( value, rightElem, currentScriptOrFn.getNextTempName(), + null, transformer)); } empty = false; diff --git a/rhino/src/main/java/org/mozilla/javascript/Token.java b/rhino/src/main/java/org/mozilla/javascript/Token.java index d1493280f7..b8ed54fb0f 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Token.java +++ b/rhino/src/main/java/org/mozilla/javascript/Token.java @@ -273,6 +273,8 @@ public static String typeToName(int token) { return "IFNE"; case SETNAME: return "SETNAME"; + case STRICT_SETNAME: + return "STRICT_SETNAME"; case BITOR: return "BITOR"; case BITXOR: diff --git a/rhino/src/main/java/org/mozilla/javascript/ast/FunctionNode.java b/rhino/src/main/java/org/mozilla/javascript/ast/FunctionNode.java index 8f8733d3cc..24262f1fde 100644 --- a/rhino/src/main/java/org/mozilla/javascript/ast/FunctionNode.java +++ b/rhino/src/main/java/org/mozilla/javascript/ast/FunctionNode.java @@ -82,6 +82,35 @@ public static enum Form { private int rp = -1; private boolean hasRestParameter; + @Override + public List getDefaultParams() { + return defaultParams; + } + + public void putDefaultParams(Object left, Object right) { + if (defaultParams == null) { + defaultParams = new ArrayList<>(); + } + defaultParams.add(left); + defaultParams.add(right); + } + + @Override + public List getDestructuringRvalues() { + return destructuringRvalues; + } + + @Override + public void putDestructuringRvalues(Node left, Node right) { + if (destructuringRvalues == null) { + destructuringRvalues = new ArrayList<>(); + } + destructuringRvalues.add(new Node[] {left, right}); + } + + ArrayList defaultParams; + ArrayList destructuringRvalues; + // codegen variables private int functionType; private boolean needsActivation; diff --git a/rhino/src/main/java/org/mozilla/javascript/ast/Scope.java b/rhino/src/main/java/org/mozilla/javascript/ast/Scope.java index 0459286d96..336a6ef656 100644 --- a/rhino/src/main/java/org/mozilla/javascript/ast/Scope.java +++ b/rhino/src/main/java/org/mozilla/javascript/ast/Scope.java @@ -120,7 +120,6 @@ public static Scope splitScope(Scope scope) { scope.symbolTable = null; result.parent = scope.parent; result.setParentScope(scope.getParentScope()); - result.setParentScope(result); scope.parent = result; result.top = scope.top; return result; diff --git a/rhino/src/main/java/org/mozilla/javascript/ast/ScriptNode.java b/rhino/src/main/java/org/mozilla/javascript/ast/ScriptNode.java index bb7f24fc11..c7f74d756b 100644 --- a/rhino/src/main/java/org/mozilla/javascript/ast/ScriptNode.java +++ b/rhino/src/main/java/org/mozilla/javascript/ast/ScriptNode.java @@ -245,6 +245,17 @@ public boolean hasRestParameter() { return false; } + public List getDefaultParams() { + return null; + } + + public List getDestructuringRvalues() { + return null; + } + + // Overridden in FunctionNode + public void putDestructuringRvalues(Node left, Node right) {} + void addSymbol(Symbol symbol) { if (variableNames != null) codeBug(); if (symbol.getDeclType() == Token.LP) { diff --git a/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java b/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java index 4062d7ccf3..f079a071a8 100644 --- a/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java +++ b/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java @@ -743,7 +743,8 @@ private void generateNativeFunctionOverrides(ClassFileWriter cfw, String rawSour final int Do_getParamOrVarConst = 5; final int Do_isGeneratorFunction = 6; final int Do_hasRestParameter = 7; - final int SWITCH_COUNT = 8; + final int Do_hasDefaultParameters = 8; + final int SWITCH_COUNT = 9; for (int methodIndex = 0; methodIndex != SWITCH_COUNT; ++methodIndex) { if (methodIndex == Do_getRawSource && rawSource == null) { @@ -790,6 +791,10 @@ private void generateNativeFunctionOverrides(ClassFileWriter cfw, String rawSour methodLocals = 1; // Only this cfw.startMethod("hasRestParameter", "()Z", ACC_PUBLIC); break; + case Do_hasDefaultParameters: + methodLocals = 1; // Only this + cfw.startMethod("hasDefaultParameters", "()Z", ACC_PUBLIC); + break; default: throw Kit.codeBug(); } @@ -934,6 +939,15 @@ private void generateNativeFunctionOverrides(ClassFileWriter cfw, String rawSour cfw.add(ByteCode.IRETURN); break; + case Do_hasDefaultParameters: + if (n instanceof FunctionNode) { + cfw.addPush(n.getDefaultParams() != null); + } else { + cfw.addPush(false); + } + cfw.add(ByteCode.IRETURN); + break; + case Do_getRawSource: // Push number raw source start and end // to prepare for rawSource.substring(start, end) diff --git a/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties b/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties index 61e76cf109..ada8b827ca 100644 --- a/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties +++ b/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties @@ -383,7 +383,7 @@ msg.no.semi.for =\ msg.no.semi.for.cond =\ missing ; after for-loop condition - + msg.in.after.for.name =\ missing in after for @@ -395,7 +395,7 @@ msg.no.paren.with =\ msg.no.paren.after.with =\ missing ) after with-statement object - + msg.no.with.strict =\ with statements not allowed in strict mode @@ -522,8 +522,8 @@ msg.var.hides.arg =\ msg.destruct.assign.no.init =\ Missing = in destructuring declaration -msg.destruct.default.vals =\ - Default values in destructuring declarations are not supported +msg.default.args =\ + Default values are only supported in version >= 200 msg.no.old.octal.strict =\ Old octal numbers prohibited in strict mode. @@ -545,7 +545,7 @@ msg.no.unary.expr.on.left.exp =\ # ScriptRuntime -# is there a better message for this? +# is there a better message for this? # it's currently only used as a poison pill for caller, caller and arguments properties msg.op.not.allowed =\ This operation is not allowed. @@ -890,7 +890,7 @@ msg.send.newborn =\ msg.already.exec.gen =\ Already executing generator - + msg.StopIteration.invalid =\ StopIteration may not be changed to an arbitrary object. @@ -917,6 +917,9 @@ msg.arguments.not.access.strict =\ msg.object.cyclic.prototype =\ Cyclic prototype "{0}" value not allowed. +msg.default.args.use.strict =\ + A function cannot have "use strict" directive with default arguments + # Symbol support msg.object.not.symbolscriptable =\ Object {0} does not support Symbol keys @@ -975,4 +978,4 @@ msg.typed.array.ctor.incompatible = \ # NativeError msg.iterable.expected =\ - Expected the first argument to be iterable \ No newline at end of file + Expected the first argument to be iterable diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java b/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java index 0b75ce64ea..802be5e4aa 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java @@ -4,9 +4,7 @@ package org.mozilla.javascript.tests; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import org.junit.*; import org.mozilla.javascript.Context; import org.mozilla.javascript.EvaluatorException; import org.mozilla.javascript.Scriptable; @@ -16,6 +14,8 @@ * of failing on some later stage (e.g. in the IRFactory). * *

Should be removed when support for default values is added + * + *

Keeping this around, but change the return values */ public class Issue385Test { private Context cx; @@ -37,9 +37,11 @@ public void tearDown() { Context.exit(); } - @Test(expected = EvaluatorException.class) + @Test() public void objDestructSimple() { - cx.evaluateString(scope, "var {a: a = 10} = {}", "", 1, null); + Object result = cx.evaluateString(scope, "var {a: a = 10} = {}; a", "", 1, null); + Assert.assertTrue(result instanceof Double); + Assert.assertEquals(result, 10.0); } @Test(expected = EvaluatorException.class) @@ -55,18 +57,29 @@ public void objDestructSimpleShort() { cx.evaluateString(scope, "var {a = 10} = {}", "", 1, null); } - @Test(expected = EvaluatorException.class) + @Test() + @Ignore("complex-destructuring-not-supported") public void objDestructComplex() { - cx.evaluateString(scope, "var {a: {b} = {b: 10}} = {}", "", 1, null); + Object result = + cx.evaluateString(scope, "var {a: {b} = {b: 10}} = {}; a + b", "", 1, null); + Assert.assertTrue(result instanceof Double); + Assert.assertEquals(result, 20.0); } - @Test(expected = EvaluatorException.class) + @Test() public void arrDestructSimple() { - cx.evaluateString(scope, "var [a = 10] = []", "", 1, null); + Object result = cx.evaluateString(scope, "var [a = 10] = []; a", "", 1, null); + Assert.assertTrue(result instanceof Double); + Assert.assertEquals(result, 10.0); } - @Test(expected = EvaluatorException.class) + @Test() + @Ignore("complex-destructuring-not-supported") public void arrDestructComplex() { - cx.evaluateString(scope, "var [[a = [b] = [4]] = [2]] = []", "", 1, null); + Object result = + cx.evaluateString( + scope, "var [[a = [b] = [4]] = [2]] = []; a + b", "", 1, null); + Assert.assertTrue(result instanceof Double); + Assert.assertEquals(result, 10.0); } } diff --git a/tests/src/test/java/org/mozilla/javascript/tests/DefaultParametersTest.java b/tests/src/test/java/org/mozilla/javascript/tests/DefaultParametersTest.java new file mode 100644 index 0000000000..68c45b605e --- /dev/null +++ b/tests/src/test/java/org/mozilla/javascript/tests/DefaultParametersTest.java @@ -0,0 +1,449 @@ +package org.mozilla.javascript.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.mozilla.javascript.*; + +/* + Many of these are taken from examples at developer.mozilla.org +*/ +public class DefaultParametersTest { + @Test + public void functionDefaultArgsBasic() throws Exception { + final String script = "function foo(a = 2) { return a; }"; + assertIntEvaluates(32, script + "\nfoo(32)"); + assertIntEvaluates(2, script + "\nfoo()"); + assertIntEvaluates(2, script + "\nfoo(undefined)"); + } + + @Test + public void functionDefaultArgsBasicCall() throws Exception { + final String script = "function b() { return 2; }; function foo(a = b()) { return a; }"; + assertIntEvaluates(32, script + "\nfoo(32)"); + assertIntEvaluates(2, script + "\nfoo()"); + assertIntEvaluates(2, script + "\nfoo(undefined)"); + } + + @Test + public void functionDefaultArgsBasicArrow() throws Exception { + final String script = "((a = 2, b) => { return a; })"; + assertIntEvaluates(32, script + "(32, 12)"); + assertIntEvaluates(12, script + "(12)"); + assertIntEvaluates(2, script + "()"); + } + + @Test + public void functionDefaultArgsArrayArrow() throws Exception { + final String script = "(([a = 2, b = 1] = [1, 2]) => { return a + b; })"; + assertIntEvaluates(3, script + "()"); + assertIntEvaluates(5, script + "([4,])"); + assertIntEvaluates(6, script + "([,4])"); + } + + @Test + public void functionDefaultArgsMulti() throws Exception { + final String script = "function foo(a = 2, b = 23) { return a + b; }"; + assertIntEvaluates(55, script + "\nfoo(32)"); + assertIntEvaluates(25, script + "\nfoo()"); + assertIntEvaluates(34, script + "\nfoo(32, 2)"); + assertIntEvaluates(25, script + "\nfoo(undefined, undefined)"); + } + + @Test + public void functionDefaultArgsUsage() throws Exception { + final String script = "function foo(a = 2, b = a * 2) { return a + b; }"; + assertIntEvaluates(96, script + "\nfoo(32)"); + assertIntEvaluates(6, script + "\nfoo()"); + assertIntEvaluates(34, script + "\nfoo(32, 2)"); + } + + @Test + public void ObjIdInitSimpleStrictExpr() throws Exception { + final String script = + "(function () { \n " + "'use strict'; \n " + "(0, { eval = 0 } = {}) })()"; + assertThrows("syntax error", script); + } + + @Test + public void ObjIdInitSimpleStrictForOf() throws Exception { + final String script = "for ({ eval = 0 } of [{}]) ;"; + assertThrows("syntax error", script); + } + + @Test + public void CoverInitName() throws Exception { + final String script = "({ a = 1 });"; + assertThrows("syntax error", script); + } + + @Test + public void functionDefaultArgsObjectArrow() throws Exception { + final String script = "(({x = 1} = {x: 2}) => {\n return x;\n})"; + + assertIntEvaluates(1, script + "({})"); + assertIntEvaluates(2, script + "()"); + assertIntEvaluates(3, script + "({x: 3})"); + } + + @Test + @Ignore("defaults-not-supported-in-let-destructuring") + public void letExprDestructuring() throws Exception { + // JavaScript + final String script = + "function a() {}; (function() { " + + " for (let {x = a()} = {}; ; ) { " + + " return 3; " + + " }" + + " })()"; + assertIntEvaluates(3, script); + } + + @Test + public void letExprUnresolvableRefDestructuring() throws Exception { + // JavaScript + final String script = + " (function() { for (let [ x = unresolvableReference ] = []; ; ) {\n" + + " return 3;\n" + + " }})()"; + assertThrows("ReferenceError: \"unresolvableReference\" is not defined.", script); + } + + @Test + public void destructuringNestedArray() throws Exception { + // JavaScript + final String script = "let [[y], x] = [[4], 3]; x + y"; + assertIntEvaluates(7, script); + } + + @Test + public void letExprUnresolvableRefObjDestructuring() throws Exception { + // JavaScript + final String script = "var f = function({ x = unresolvableReference } = {}) {}; f()"; + assertThrows("ReferenceError: \"unresolvableReference\" is not defined.", script); + } + + @Test + public void getIntPropArg() throws Exception { + final String script = + "function foo([gen = function () { return 2; }, xGen = function* x() { yield 2; }] = []) {\n" + + " return gen() + xGen().next().value; }"; + assertIntEvaluates(4, script + "; foo()"); + } + + @Test + public void getIntErrPropArg() throws Exception { + final String script = + "var e = 0; var b = 'hello'; var { f: y = ++e } = { f: { get: function() {}}}; " + + "Object.keys(y).includes('get') && Object.keys(y).length == 1"; + assertEvaluates(true, script); + } + + @Test + public void getIntPropArgParenExpr() throws Exception { + final String script = + "const [cover = (function () {}), xCover = (0, function() {})] = [];\n" + + "cover.name == 'cover' && xCover.name == 'xCover' ? 4 : -1"; + assertIntEvaluates(-1, script); + } + + @Test + public void getIntProp() throws Exception { + final String script = + "const { gen = function () { return 2;}, xGen = function* () { yield 2;} } = {};\n" + + "gen() + xGen().next().value"; + assertIntEvaluates(4, script); + } + + @Test + public void getIntPropExhausted() throws Exception { + final String script = "const [x = 23] = []; x"; + assertIntEvaluates(23, script); + } + + @Test + @Ignore("temporal-dead-zone") + public void functionDefaultArgsMultiFollowUsage() throws Exception { + final String script = + "function f(a = go()) {\n" + + " function go() {\n" + + " return \":P\";\n" + + " }\n" + + " return a; " + + "}\n" + + "\n"; + assertIntEvaluates(24, script + "\nf(24)"); + assertThrows( + "ReferenceError: \"go\" is not defined.", "function f() { go() }; var f1 = f()"); + assertThrows("ReferenceError: \"go\" is not defined.", script + "\nf()"); + } + + @Test + @Ignore("temporal-dead-zone") + public void functionDefaultArgsMultiReferEarlier() throws Exception { + final String script = "var f = function(a = b * 2, b = 3) { return a * b; }\n"; + assertThrows("ReferenceError: \"b\" is not defined.", script + "\nf()"); + } + + @Test + public void functionConstructor() throws Exception { + final String script = "const f = new Function('a=2', 'b=a', 'return a + b');"; + assertIntEvaluates(4, script + "f()"); + assertIntEvaluates(6, script + "f(3)"); + assertIntEvaluates(16, script + "f(3, 13)"); + } + + @Test + public void destructuringAssigmentDefaultArray() throws Exception { + final String script = + "function f([x = 1, y = 2] = [], [z = 1] = [4]) {\n" + + " return x + y + z;\n" + + "}"; + + assertIntEvaluates(7, script + "f()"); + assertIntEvaluates(7, script + "f([])"); + assertIntEvaluates(4, script + "f([], [])"); + assertIntEvaluates(8, script + "f([2])"); + assertIntEvaluates(5, script + "f([2], [])"); + assertIntEvaluates(8, script + "f([], [5])"); + assertIntEvaluates(6, script + "f([2, 3], [])"); + assertIntEvaluates(9, script + "f([2, 3], [4])"); + assertIntEvaluates(7, script + "f([2], [3])"); + assertIntEvaluates(9, script + "f([2, 3])"); + } + + @Test + @Ignore("needs-checking-for-iterator") + public void destructuringAssigmentInFunctionsWithObjectDefaults() throws Exception { + final String script = "function f([x = 1, y = 2] = {x: 3, y: 4}) {\n return x + y;\n }"; + + assertThrows("TypeError", script + "f()"); // TODO: returns 3 + assertThrows("TypeError", script + "f(2)"); // TODO: returns 3, should be throwing TypeError + } + + @Test + public void destructuringTest() throws Exception { + final String script = "function f([x]) { return x; }; f([1]);"; + assertIntEvaluates(1, script); + } + + @Test + public void destructuringAssignmentDefaultArray() throws Exception { + final String script = "var [a = 10] = []; a"; + final String script2 = "var [a = 10] = [1]; a"; + assertIntEvaluates(10, script); + assertIntEvaluates(1, script2); + } + + @Test + public void destructuringAssignmentDefaultObject() throws Exception { + final String script1 = "var {a: b = 10} = {hello: 3}; b+a"; + final String script3 = "var a = 20; var {a: b = 10} = {hello: 3}; b+a"; + final String script4 = "var a = 30; var {a: b = 10} = {}; b+a"; + assertThrows("ReferenceError", script1); + assertIntEvaluates(30, script3); + assertIntEvaluates(40, script4); + } + + @Test + public void destructuringHookTest() throws Exception { + final String script = "function f([x]) { return x == undefined ? 2 : x; }; f([1]);"; + assertIntEvaluates(1, script); + } + + @Test + public void destructuringAssigmentRealRealBasicArray() throws Exception { + final String script = "function f([x] = [1]) {\n return x;\n }"; + assertIntEvaluates(1, script + "f()"); + assertIntEvaluates(2, script + "f([2])"); + assertIntEvaluates(42, script + "f([]) == undefined ? 42 : 0"); + } + + @Test + public void destructuringAssigmentRealBasicArray() throws Exception { + final String script = "function f([x = 1]) {\n return x;\n }"; + assertIntEvaluates(1, script + "f([])"); + assertIntEvaluates(3, script + "f([3])"); + assertThrows("TypeError", script + "f()"); + } + + @Test + public void destructuringAssigmentBasicArray() throws Exception { + final String script = "function f([x = 1] = [2]) {\n return x;\n }"; + assertIntEvaluates(1, script + "f([])"); + assertIntEvaluates(2, script + "f()"); + assertIntEvaluates(3, script + "f([3])"); + } + + @Test + public void destructuringAssigmentBasicObject() throws Exception { + final String script = "function f({x = 1} = {x: 2}) {\n return x;\n }"; + + assertIntEvaluates(1, script + "f({})"); + assertIntEvaluates(2, script + "f()"); + assertIntEvaluates(3, script + "f({x: 3})"); + } + + @Test + public void destructuringAssigmentRealBasicObject() throws Exception { + final String script = "function f({x = 1}) {\n return x;\n }"; + + assertIntEvaluates(1, script + "f({})"); + assertThrows("TypeError", script + "f()"); + assertIntEvaluates(3, script + "f({x: 3})"); + } + + @Test + public void destructuringAssigmentDefaultObject() throws Exception { + final String script = "function f({ z = 3, x = 2 } = {}) {\n return z;\n}\n"; + assertIntEvaluates(3, script + "f()"); + assertIntEvaluates(3, script + "f({})"); + assertIntEvaluates(2, script + "f({z: 2})"); + } + + @Test + public void destructuringAssigmentDefaultObjectWithDefaults() throws Exception { + final String script = "function f({ z = 3, x = 2 } = {z: 4, x: 5}) {\n return z;\n}\n"; + assertIntEvaluates(4, script + "f()"); + assertIntEvaluates(3, script + "f({})"); + assertIntEvaluates(2, script + "f({z: 2})"); + } + + @Test + @Ignore("deeply-nested-literal-not-supported") + public void deeplyNestedObjectLiteral() throws Exception { + final String script = + "let { d: { b }, d, a} = { \n" + + " a: \"world\",\n" + + " d: {\n" + + " b: \"hello\"\n" + + " }\n" + + " }\n" + + " \n"; + assertEvaluates("hello", script + "b"); + assertEvaluates("world", script + "a"); + assertEvaluates("hello", script + "d[b]"); + } + + @Test + public void defaultParametersWithArgumentsObject() throws Exception { + final String script = + "function f(a = 55) {\n" + + " arguments[0] = 99; // updating arguments[0] does not also update a\n" + + " return a;\n" + + "}\n" + + "\n" + + "function g(a = 55) {\n" + + " a = 99; // updating a does not also update arguments[0]\n" + + " return arguments[0];\n" + + "}\n" + + "\n" + + "// An untracked default parameter\n" + + "function h(a = 55) {\n" + + " return arguments.length;\n" + + "}\n"; + assertIntEvaluates(10, script + "f(10)"); + assertIntEvaluates(55, script + "f()"); + assertIntEvaluates(10, script + "g(10)"); + assertEvaluates(Undefined.instance, script + "g()"); + assertIntEvaluates(0, script + "h()"); + assertIntEvaluates(1, script + "h(10)"); + } + + @Test + public void functionDefaultArgsArray() throws Exception { + final String script = + "function append(value, array = []) {\n" + + " array.push(value);\n" + + " return array;\n" + + "}\n" + + "\n"; + assertIntEvaluates(1, script + "append(1)[0]"); + assertIntEvaluates(2, script + "append(2)[0]"); + } + + @Test + public void functionDefaultArgsObject() throws Exception { + final String script = + "function append(key, value, obj = {}) {\n" + + " obj[key]=value;\n" + + " return obj;\n" + + "}\n" + + "\n"; + assertIntEvaluates(1, script + "append('a', 1)['a']"); + assertIntEvaluates(2, script + "append('a', 2)['a']"); + } + + private static void assertThrows(final String expected, final String source) { + assertThrowsWithLanguageLevel(expected, source, Context.VERSION_ES6); + } + + private static void assertThrowsWithLanguageLevel( + String expected, final String source, int languageLevel) { + Utils.runWithAllOptimizationLevels( + cx -> { + int oldVersion = cx.getLanguageVersion(); + cx.setLanguageVersion(languageLevel); + final Scriptable scope = cx.initStandardObjects(); + var error = + Assert.assertThrows( + RhinoException.class, + () -> cx.evaluateString(scope, source, "test.js", 0, null)); + assertTrue(error.getMessage().startsWith(expected)); + return null; + }); + } + + private static void assertIntEvaluates(final Object expected, final String source) { + assertIntEvaluatesWithLanguageLevel(expected, source, Context.VERSION_ES6); + } + + private static void assertEvaluates(final Object expected, final String source) { + assertIntEvaluatesWithLanguageLevel(expected, source, Context.VERSION_ES6); + } + + @Test + public void parserThrowsOnLowerLanguageLevelBasic() throws Exception { + final String script = "function f(x = 1) {\n return x;\n }"; + assertThrowsWithLanguageLevel( + "Default values are only supported in version >= 200", + script + "f()", + Context.VERSION_1_8); + } + + @Test + public void parserThrowsOnLowerLanguageLevelObjLit() throws Exception { + final String script = "function f({ z = 3, x = 2 } = {}) {\n return z;\n}\n"; + assertThrowsWithLanguageLevel( + "Default values are only supported in version >= 200", + script + "f()", + Context.VERSION_1_8); + } + + @Test + public void parserThrowsOnLowerLanguageLevelArrowBasic() throws Exception { + final String script = "((x = 1) => {\n return x;\n })"; + assertThrowsWithLanguageLevel( + "Default values are only supported in version >= 200", + script + "()", + Context.VERSION_1_8); + } + + private static void assertIntEvaluatesWithLanguageLevel( + final Object expected, final String source, int languageLevel) { + Utils.runWithAllOptimizationLevels( + cx -> { + int oldVersion = cx.getLanguageVersion(); + cx.setLanguageVersion(languageLevel); + final Scriptable scope = cx.initStandardObjects(); + final Object rep = cx.evaluateString(scope, source, "test.js", 0, null); + if (rep instanceof Double) + assertEquals((int) expected, ((Double) rep).intValue()); + else assertEquals(expected, rep); + return null; + }); + } +} diff --git a/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java b/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java index a92e71bb11..92190c1eb2 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java @@ -103,7 +103,6 @@ public class Test262SuiteTest { "class-fields-private", "class-fields-public", "default-arg", - "default-parameters", "new.target", "object-rest", "regexp-dotall", diff --git a/tests/testsrc/test262.properties b/tests/testsrc/test262.properties index b8a3c2e63a..8e16d93b69 100644 --- a/tests/testsrc/test262.properties +++ b/tests/testsrc/test262.properties @@ -769,7 +769,7 @@ built-ins/Error 6/41 (14.63%) ~built-ins/FinalizationRegistry -built-ins/Function 187/508 (36.81%) +built-ins/Function 186/508 (36.61%) internals/Call 2/2 (100.0%) internals/Construct 6/6 (100.0%) length/S15.3.5.1_A1_T3.js strict @@ -863,7 +863,6 @@ built-ins/Function 187/508 (36.81%) prototype/toString/class-expression-explicit-ctor.js prototype/toString/class-expression-implicit-ctor.js prototype/toString/Function.js - prototype/toString/function-declaration-non-simple-parameter-list.js prototype/toString/generator-function-declaration.js prototype/toString/generator-function-expression.js prototype/toString/generator-method.js @@ -975,7 +974,7 @@ built-ins/GeneratorPrototype 38/60 (63.33%) built-ins/Infinity 0/6 (0.0%) -built-ins/JSON 36/144 (25.0%) +built-ins/JSON 37/144 (25.69%) parse/builtin.js {unsupported: [Reflect.construct]} parse/duplicate-proto.js parse/not-a-constructor.js {unsupported: [Reflect.construct]} @@ -1012,6 +1011,7 @@ built-ins/JSON 36/144 (25.0%) stringify/value-bigint-tojson-receiver.js stringify/value-object-proxy.js {unsupported: [Proxy]} stringify/value-object-proxy-revoked.js {unsupported: [Proxy]} + stringify/value-string-escape-unicode.js built-ins/Map 13/171 (7.6%) prototype/clear/not-a-constructor.js {unsupported: [Reflect.construct]} @@ -2198,7 +2198,7 @@ built-ins/SetIteratorPrototype 0/11 (0.0%) ~built-ins/SharedArrayBuffer -built-ins/String 128/1182 (10.83%) +built-ins/String 140/1182 (11.84%) fromCharCode/not-a-constructor.js {unsupported: [Reflect.construct]} fromCodePoint/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/charAt/not-a-constructor.js {unsupported: [Reflect.construct]} @@ -2218,8 +2218,7 @@ built-ins/String 128/1182 (10.83%) prototype/indexOf/searchstring-tostring-errors.js prototype/indexOf/searchstring-tostring-toprimitive.js prototype/indexOf/searchstring-tostring-wrapped-values.js - prototype/isWellFormed/not-a-constructor.js {unsupported: [Reflect.construct]} - prototype/isWellFormed/to-string-primitive.js + prototype/isWellFormed 8/8 (100.0%) prototype/lastIndexOf/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/localeCompare/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/matchAll 20/20 (100.0%) @@ -2285,8 +2284,7 @@ built-ins/String 128/1182 (10.83%) prototype/toString/non-generic-realm.js prototype/toString/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/toUpperCase/not-a-constructor.js {unsupported: [Reflect.construct]} - prototype/toWellFormed/not-a-constructor.js {unsupported: [Reflect.construct]} - prototype/toWellFormed/to-string-primitive.js + prototype/toWellFormed 8/8 (100.0%) prototype/trimEnd/not-a-constructor.js {unsupported: [Reflect.construct]} prototype/trimEnd/this-value-object-toprimitive-call-err.js prototype/trimEnd/this-value-object-toprimitive-meth-err.js @@ -3341,7 +3339,7 @@ built-ins/undefined 0/8 (0.0%) ~intl402 -language/arguments-object 190/263 (72.24%) +language/arguments-object 189/263 (71.86%) mapped/mapped-arguments-nonconfigurable-3.js non-strict mapped/mapped-arguments-nonconfigurable-delete-1.js non-strict mapped/mapped-arguments-nonconfigurable-delete-2.js non-strict @@ -3377,7 +3375,6 @@ language/arguments-object 190/263 (72.24%) mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-basic.js non-strict mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-set-by-arguments.js non-strict mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-set-by-param.js non-strict - unmapped/via-params-dflt.js unmapped/via-params-dstr.js non-strict unmapped/via-params-rest.js non-strict 10.6-11-b-1.js @@ -3629,14 +3626,10 @@ language/computed-property-names 37/48 (77.08%) to-name-side-effects/class.js to-name-side-effects/numbers-class.js -language/destructuring 12/18 (66.67%) - binding/syntax/array-elements-with-initializer.js - binding/syntax/array-elements-with-object-patterns.js +language/destructuring 8/18 (44.44%) binding/syntax/array-rest-elements.js binding/syntax/destructuring-array-parameters-function-arguments-length.js binding/syntax/destructuring-object-parameters-function-arguments-length.js - binding/syntax/property-list-bindings-elements.js - binding/syntax/property-list-single-name-bindings.js binding/syntax/property-list-with-property-list.js binding/syntax/recursive-array-and-object-patterns.js binding/initialization-requires-object-coercible-null.js @@ -3663,19 +3656,15 @@ language/directive-prologue 18/62 (29.03%) 14.1-9-s.js {non-strict: [-1]} func-decl-inside-func-decl-parse.js non-strict -language/eval-code 257/347 (74.06%) +language/eval-code 253/347 (72.91%) direct/arrow-fn-a-following-parameter-is-named-arguments-arrow-func-declare-arguments-assign.js non-strict direct/arrow-fn-a-following-parameter-is-named-arguments-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js non-strict direct/arrow-fn-a-preceding-parameter-is-named-arguments-arrow-func-declare-arguments-assign.js non-strict direct/arrow-fn-a-preceding-parameter-is-named-arguments-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js non-strict direct/arrow-fn-body-cntns-arguments-func-decl-arrow-func-declare-arguments-assign.js non-strict direct/arrow-fn-body-cntns-arguments-func-decl-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js non-strict - direct/arrow-fn-body-cntns-arguments-lex-bind-arrow-func-declare-arguments-assign.js non-strict direct/arrow-fn-body-cntns-arguments-lex-bind-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js non-strict - direct/arrow-fn-body-cntns-arguments-var-bind-arrow-func-declare-arguments-assign.js non-strict direct/arrow-fn-body-cntns-arguments-var-bind-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js non-strict - direct/arrow-fn-no-pre-existing-arguments-bindings-are-present-arrow-func-declare-arguments-assign.js non-strict - direct/arrow-fn-no-pre-existing-arguments-bindings-are-present-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js non-strict direct/async-func-decl-a-following-parameter-is-named-arguments-declare-arguments.js {unsupported: [async]} direct/async-func-decl-a-following-parameter-is-named-arguments-declare-arguments-and-assign.js {unsupported: [async]} direct/async-func-decl-a-preceding-parameter-is-named-arguments-declare-arguments.js {unsupported: [async]} @@ -3978,29 +3967,23 @@ language/expressions/array 41/52 (78.85%) spread-sngl-literal.js spread-sngl-obj-ident.js -language/expressions/arrow-function 213/343 (62.1%) +language/expressions/arrow-function 167/343 (48.69%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js - dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js dstr/ary-ptrn-elem-id-iter-val-err.js @@ -4023,99 +4006,72 @@ language/expressions/arrow-function 213/343 (62.1%) dstr/ary-ptrn-rest-id-iter-val-err.js dstr/ary-ptrn-rest-obj-id.js dstr/ary-ptrn-rest-obj-prop-id.js - dstr/dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/dflt-ary-init-iter-close.js + dstr/dflt-ary-init-iter-get-err.js + dstr/dflt-ary-init-iter-get-err-array-prototype.js + dstr/dflt-ary-init-iter-no-close.js + dstr/dflt-ary-ptrn-elem-ary-elem-init.js + dstr/dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/dflt-ary-ptrn-elem-ary-elision-init.js + dstr/dflt-ary-ptrn-elem-ary-empty-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/dflt-ary-ptrn-elem-id-init-hole.js + dstr/dflt-ary-ptrn-elem-id-init-skipped.js + dstr/dflt-ary-ptrn-elem-id-init-throws.js + dstr/dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/dflt-ary-ptrn-elem-obj-id.js + dstr/dflt-ary-ptrn-elem-obj-id-init.js + dstr/dflt-ary-ptrn-elem-obj-prop-id.js + dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/dflt-ary-ptrn-elision.js + dstr/dflt-ary-ptrn-elision-step-err.js + dstr/dflt-ary-ptrn-rest-ary-elem.js + dstr/dflt-ary-ptrn-rest-ary-elision.js + dstr/dflt-ary-ptrn-rest-ary-empty.js + dstr/dflt-ary-ptrn-rest-ary-rest.js + dstr/dflt-ary-ptrn-rest-id.js + dstr/dflt-ary-ptrn-rest-id-direct.js + dstr/dflt-ary-ptrn-rest-id-elision.js + dstr/dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/dflt-ary-ptrn-rest-id-exhausted.js + dstr/dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/dflt-ary-ptrn-rest-obj-id.js + dstr/dflt-ary-ptrn-rest-obj-prop-id.js + dstr/dflt-obj-init-null.js + dstr/dflt-obj-init-undefined.js + dstr/dflt-obj-ptrn-id-get-value-err.js + dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/dflt-obj-ptrn-id-init-fn-name-class.js + dstr/dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/dflt-obj-ptrn-id-init-skipped.js + dstr/dflt-obj-ptrn-id-init-throws.js + dstr/dflt-obj-ptrn-list-err.js + dstr/dflt-obj-ptrn-prop-ary.js + dstr/dflt-obj-ptrn-prop-ary-init.js + dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/dflt-obj-ptrn-prop-ary-value-null.js + dstr/dflt-obj-ptrn-prop-eval-err.js + dstr/dflt-obj-ptrn-prop-id-get-value-err.js + dstr/dflt-obj-ptrn-prop-id-init-skipped.js + dstr/dflt-obj-ptrn-prop-id-init-throws.js + dstr/dflt-obj-ptrn-prop-obj.js + dstr/dflt-obj-ptrn-prop-obj-init.js + dstr/dflt-obj-ptrn-prop-obj-value-null.js + dstr/dflt-obj-ptrn-prop-obj-value-undef.js + dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/obj-init-null.js dstr/obj-init-undefined.js dstr/obj-ptrn-id-init-fn-name-arrow.js @@ -4131,11 +4087,8 @@ language/expressions/arrow-function 213/343 (62.1%) dstr/obj-ptrn-prop-ary-init.js dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js - dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js - dstr/obj-ptrn-prop-id-init-unresolvable.js dstr/obj-ptrn-prop-obj.js dstr/obj-ptrn-prop-obj-init.js dstr/obj-ptrn-prop-obj-value-null.js @@ -4154,23 +4107,17 @@ language/expressions/arrow-function 213/343 (62.1%) syntax/arrowparameters-bindingidentifier-yield.js non-strict syntax/arrowparameters-cover-formalparameters-yield.js non-strict syntax/arrowparameters-cover-includes-rest-concisebody-functionbody.js - syntax/arrowparameters-cover-initialize-1.js syntax/arrowparameters-cover-initialize-2.js syntax/arrowparameters-cover-rest-concisebody-functionbody.js syntax/arrowparameters-cover-rest-lineterminator-concisebody-functionbody.js array-destructuring-param-strict-body.js ArrowFunction_restricted-properties.js - dflt-params-abrupt.js {unsupported: [default-parameters]} - dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - dflt-params-duplicates.js {unsupported: [default-parameters]} - dflt-params-ref-later.js {unsupported: [default-parameters]} - dflt-params-ref-prior.js {unsupported: [default-parameters]} - dflt-params-ref-self.js {unsupported: [default-parameters]} - dflt-params-rest.js {unsupported: [default-parameters]} + dflt-params-duplicates.js non-strict + dflt-params-ref-later.js + dflt-params-ref-self.js dflt-params-trailing-comma.js - eval-var-scope-syntax-err.js {unsupported: [default-parameters]} - length-dflt.js {unsupported: [default-parameters]} + eval-var-scope-syntax-err.js non-strict + length-dflt.js lexical-new.target.js {unsupported: [new.target]} lexical-new.target-closure-returned.js {unsupported: [new.target]} lexical-super-call-from-within-constructor.js @@ -4178,23 +4125,18 @@ language/expressions/arrow-function 213/343 (62.1%) lexical-super-property-from-within-constructor.js lexical-supercall-from-immediately-invoked-arrow.js object-destructuring-param-strict-body.js - param-dflt-yield-expr.js {unsupported: [default-parameters]} - param-dflt-yield-id-non-strict.js {unsupported: [default-parameters]} - param-dflt-yield-id-strict.js {unsupported: [default-parameters]} + param-dflt-yield-expr.js + param-dflt-yield-id-non-strict.js non-strict params-duplicate.js non-strict scope-body-lex-distinct.js non-strict - scope-param-elem-var-close.js non-strict - scope-param-elem-var-open.js non-strict scope-param-rest-elem-var-close.js non-strict scope-param-rest-elem-var-open.js non-strict - scope-paramsbody-var-close.js scope-paramsbody-var-open.js unscopables-with.js non-strict unscopables-with-in-nested-fn.js non-strict -language/expressions/assignment 207/480 (43.13%) +language/expressions/assignment 193/480 (40.21%) destructuring 3/3 (100.0%) - dstr/array-elem-init-assignment.js dstr/array-elem-init-evaluation.js dstr/array-elem-init-fn-name-arrow.js dstr/array-elem-init-fn-name-class.js {unsupported: [class]} @@ -4205,7 +4147,6 @@ language/expressions/assignment 207/480 (43.13%) dstr/array-elem-init-let.js dstr/array-elem-init-order.js dstr/array-elem-init-simple-no-strict.js non-strict - dstr/array-elem-init-yield-expr.js dstr/array-elem-init-yield-ident-valid.js non-strict dstr/array-elem-iter-get-err.js dstr/array-elem-iter-nrml-close.js @@ -4314,10 +4255,6 @@ language/expressions/assignment 207/480 (43.13%) dstr/obj-empty-null.js dstr/obj-empty-undef.js dstr/obj-id-identifier-yield-ident-valid.js non-strict - dstr/obj-id-init-assignment-missing.js - dstr/obj-id-init-assignment-null.js - dstr/obj-id-init-assignment-truthy.js - dstr/obj-id-init-assignment-undef.js dstr/obj-id-init-evaluation.js dstr/obj-id-init-fn-name-arrow.js dstr/obj-id-init-fn-name-class.js {unsupported: [class]} @@ -4328,15 +4265,9 @@ language/expressions/assignment 207/480 (43.13%) dstr/obj-id-init-let.js dstr/obj-id-init-order.js dstr/obj-id-init-simple-no-strict.js non-strict - dstr/obj-id-init-yield-expr.js dstr/obj-id-init-yield-ident-valid.js non-strict dstr/obj-id-put-const.js non-strict dstr/obj-id-put-let.js - dstr/obj-id-simple-strict.js strict - dstr/obj-prop-elem-init-assignment-missing.js - dstr/obj-prop-elem-init-assignment-null.js - dstr/obj-prop-elem-init-assignment-truthy.js - dstr/obj-prop-elem-init-assignment-undef.js dstr/obj-prop-elem-init-evaluation.js dstr/obj-prop-elem-init-fn-name-arrow.js dstr/obj-prop-elem-init-fn-name-class.js {unsupported: [class]} @@ -4345,14 +4276,12 @@ language/expressions/assignment 207/480 (43.13%) dstr/obj-prop-elem-init-fn-name-gen.js dstr/obj-prop-elem-init-in.js dstr/obj-prop-elem-init-let.js - dstr/obj-prop-elem-init-yield-expr.js dstr/obj-prop-elem-init-yield-ident-valid.js non-strict dstr/obj-prop-elem-target-obj-literal-prop-ref-init.js dstr/obj-prop-elem-target-obj-literal-prop-ref-init-active.js dstr/obj-prop-elem-target-yield-ident-valid.js non-strict dstr/obj-prop-name-evaluation.js dstr/obj-prop-name-evaluation-error.js - dstr/obj-prop-nested-array-yield-expr.js dstr/obj-prop-nested-array-yield-ident-valid.js non-strict dstr/obj-prop-nested-obj-yield-expr.js dstr/obj-prop-nested-obj-yield-ident-valid.js non-strict @@ -4399,7 +4328,7 @@ language/expressions/assignment 207/480 (43.13%) target-super-computed-reference-null.js target-super-identifier-reference-null.js -language/expressions/async-arrow-function 44/60 (73.33%) +language/expressions/async-arrow-function 42/60 (70.0%) forbidden-ext/b1 2/2 (100.0%) forbidden-ext/b2 3/3 (100.0%) arrow-returns-promise.js {unsupported: [async]} @@ -4413,19 +4342,17 @@ language/expressions/async-arrow-function 44/60 (73.33%) await-as-param-nested-arrow-body-position.js {unsupported: [async-functions]} await-as-param-nested-arrow-parameter-position.js {unsupported: [async-functions]} await-as-param-rest-nested-arrow-parameter-position.js {unsupported: [async-functions]} - dflt-params-abrupt.js {unsupported: [default-parameters, async-functions, async]} - dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters, async-functions, async]} - dflt-params-arg-val-undefined.js {unsupported: [default-parameters, async-functions, async]} - dflt-params-duplicates.js {unsupported: [default-parameters]} - dflt-params-ref-later.js {unsupported: [default-parameters, async-functions, async]} - dflt-params-ref-prior.js {unsupported: [default-parameters, async-functions, async]} - dflt-params-ref-self.js {unsupported: [default-parameters, async-functions, async]} - dflt-params-rest.js {unsupported: [default-parameters]} + dflt-params-abrupt.js {unsupported: [async-functions, async]} + dflt-params-arg-val-not-undefined.js {unsupported: [async-functions, async]} + dflt-params-arg-val-undefined.js {unsupported: [async-functions, async]} + dflt-params-ref-later.js {unsupported: [async-functions, async]} + dflt-params-ref-prior.js {unsupported: [async-functions, async]} + dflt-params-ref-self.js {unsupported: [async-functions, async]} dflt-params-trailing-comma.js {unsupported: [async-functions, async]} early-errors-arrow-duplicate-parameters.js {unsupported: [async-functions]} escaped-async.js {unsupported: [async-functions]} escaped-async-line-terminator.js {unsupported: [async-functions]} - eval-var-scope-syntax-err.js {unsupported: [default-parameters, async-functions, async]} + eval-var-scope-syntax-err.js {unsupported: [async-functions, async]} name.js params-trailing-comma-multiple.js {unsupported: [async-functions, async]} params-trailing-comma-single.js {unsupported: [async-functions, async]} @@ -4542,7 +4469,7 @@ language/expressions/coalesce 2/24 (8.33%) language/expressions/comma 1/6 (16.67%) tco-final.js {unsupported: [tail-call-optimization]} -language/expressions/compound-assignment 137/454 (30.18%) +language/expressions/compound-assignment 125/454 (27.53%) 11.13.2-34-s.js strict 11.13.2-35-s.js strict 11.13.2-36-s.js strict @@ -4554,11 +4481,8 @@ language/expressions/compound-assignment 137/454 (30.18%) 11.13.2-42-s.js strict 11.13.2-43-s.js strict 11.13.2-44-s.js strict - 11.13.2-6-1gs.js strict add-arguments-strict.js strict - add-eval-strict.js strict and-arguments-strict.js strict - and-eval-strict.js strict compound-assignment-operator-calls-putvalue-lref--v-.js non-strict compound-assignment-operator-calls-putvalue-lref--v--1.js non-strict compound-assignment-operator-calls-putvalue-lref--v--10.js non-strict @@ -4582,7 +4506,6 @@ language/expressions/compound-assignment 137/454 (30.18%) compound-assignment-operator-calls-putvalue-lref--v--8.js non-strict compound-assignment-operator-calls-putvalue-lref--v--9.js non-strict div-arguments-strict.js strict - div-eval-strict.js strict left-hand-side-private-reference-accessor-property-add.js {unsupported: [class-fields-private]} left-hand-side-private-reference-accessor-property-bitand.js {unsupported: [class-fields-private]} left-hand-side-private-reference-accessor-property-bitor.js {unsupported: [class-fields-private]} @@ -4632,13 +4555,9 @@ language/expressions/compound-assignment 137/454 (30.18%) left-hand-side-private-reference-readonly-accessor-property-srshift.js {unsupported: [class-fields-private]} left-hand-side-private-reference-readonly-accessor-property-sub.js {unsupported: [class-fields-private]} lshift-arguments-strict.js strict - lshift-eval-strict.js strict mod-arguments-strict.js strict - mod-eval-strict.js strict mult-arguments-strict.js strict - mult-eval-strict.js strict or-arguments-strict.js strict - or-eval-strict.js strict S11.13.2_A7.10_T1.js S11.13.2_A7.10_T2.js S11.13.2_A7.10_T4.js @@ -4673,13 +4592,9 @@ language/expressions/compound-assignment 137/454 (30.18%) S11.13.2_A7.9_T2.js S11.13.2_A7.9_T4.js srshift-arguments-strict.js strict - srshift-eval-strict.js strict sub-arguments-strict.js strict - sub-eval-strict.js strict urshift-arguments-strict.js strict - urshift-eval-strict.js strict xor-arguments-strict.js strict - xor-eval-strict.js strict language/expressions/concatenation 0/5 (0.0%) @@ -4716,29 +4631,23 @@ language/expressions/exponentiation 3/44 (6.82%) bigint-wrapped-values.js order-of-evaluation.js -language/expressions/function 214/264 (81.06%) +language/expressions/function 168/264 (63.64%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js - dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js dstr/ary-ptrn-elem-id-iter-val-err.js @@ -4761,99 +4670,72 @@ language/expressions/function 214/264 (81.06%) dstr/ary-ptrn-rest-id-iter-val-err.js dstr/ary-ptrn-rest-obj-id.js dstr/ary-ptrn-rest-obj-prop-id.js - dstr/dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/dflt-ary-init-iter-close.js + dstr/dflt-ary-init-iter-get-err.js + dstr/dflt-ary-init-iter-get-err-array-prototype.js + dstr/dflt-ary-init-iter-no-close.js + dstr/dflt-ary-ptrn-elem-ary-elem-init.js + dstr/dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/dflt-ary-ptrn-elem-ary-elision-init.js + dstr/dflt-ary-ptrn-elem-ary-empty-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/dflt-ary-ptrn-elem-id-init-hole.js + dstr/dflt-ary-ptrn-elem-id-init-skipped.js + dstr/dflt-ary-ptrn-elem-id-init-throws.js + dstr/dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/dflt-ary-ptrn-elem-obj-id.js + dstr/dflt-ary-ptrn-elem-obj-id-init.js + dstr/dflt-ary-ptrn-elem-obj-prop-id.js + dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/dflt-ary-ptrn-elision.js + dstr/dflt-ary-ptrn-elision-step-err.js + dstr/dflt-ary-ptrn-rest-ary-elem.js + dstr/dflt-ary-ptrn-rest-ary-elision.js + dstr/dflt-ary-ptrn-rest-ary-empty.js + dstr/dflt-ary-ptrn-rest-ary-rest.js + dstr/dflt-ary-ptrn-rest-id.js + dstr/dflt-ary-ptrn-rest-id-direct.js + dstr/dflt-ary-ptrn-rest-id-elision.js + dstr/dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/dflt-ary-ptrn-rest-id-exhausted.js + dstr/dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/dflt-ary-ptrn-rest-obj-id.js + dstr/dflt-ary-ptrn-rest-obj-prop-id.js + dstr/dflt-obj-init-null.js + dstr/dflt-obj-init-undefined.js + dstr/dflt-obj-ptrn-id-get-value-err.js + dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/dflt-obj-ptrn-id-init-fn-name-class.js + dstr/dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/dflt-obj-ptrn-id-init-skipped.js + dstr/dflt-obj-ptrn-id-init-throws.js + dstr/dflt-obj-ptrn-list-err.js + dstr/dflt-obj-ptrn-prop-ary.js + dstr/dflt-obj-ptrn-prop-ary-init.js + dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/dflt-obj-ptrn-prop-ary-value-null.js + dstr/dflt-obj-ptrn-prop-eval-err.js + dstr/dflt-obj-ptrn-prop-id-get-value-err.js + dstr/dflt-obj-ptrn-prop-id-init-skipped.js + dstr/dflt-obj-ptrn-prop-id-init-throws.js + dstr/dflt-obj-ptrn-prop-obj.js + dstr/dflt-obj-ptrn-prop-obj-init.js + dstr/dflt-obj-ptrn-prop-obj-value-null.js + dstr/dflt-obj-ptrn-prop-obj-value-undef.js + dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/obj-init-null.js dstr/obj-init-undefined.js dstr/obj-ptrn-id-init-fn-name-arrow.js @@ -4863,17 +4745,13 @@ language/expressions/function 214/264 (81.06%) dstr/obj-ptrn-id-init-fn-name-gen.js dstr/obj-ptrn-id-init-skipped.js dstr/obj-ptrn-id-init-throws.js - dstr/obj-ptrn-id-init-unresolvable.js dstr/obj-ptrn-list-err.js dstr/obj-ptrn-prop-ary.js dstr/obj-ptrn-prop-ary-init.js dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js - dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js - dstr/obj-ptrn-prop-id-init-unresolvable.js dstr/obj-ptrn-prop-obj.js dstr/obj-ptrn-prop-obj-init.js dstr/obj-ptrn-prop-obj-value-null.js @@ -4886,19 +4764,14 @@ language/expressions/function 214/264 (81.06%) arguments-with-arguments-fn.js non-strict arguments-with-arguments-lex.js non-strict array-destructuring-param-strict-body.js - dflt-params-abrupt.js {unsupported: [default-parameters]} - dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - dflt-params-duplicates.js {unsupported: [default-parameters]} - dflt-params-ref-later.js {unsupported: [default-parameters]} - dflt-params-ref-prior.js {unsupported: [default-parameters]} - dflt-params-ref-self.js {unsupported: [default-parameters]} - dflt-params-rest.js {unsupported: [default-parameters]} + dflt-params-duplicates.js non-strict + dflt-params-ref-later.js + dflt-params-ref-self.js + dflt-params-rest.js dflt-params-trailing-comma.js - eval-var-scope-syntax-err.js {unsupported: [default-parameters]} - length-dflt.js {unsupported: [default-parameters]} + eval-var-scope-syntax-err.js non-strict + length-dflt.js name-arguments-strict-body.js non-strict - name-eval-strict-body.js non-strict named-no-strict-reassign-fn-name-in-body.js non-strict named-no-strict-reassign-fn-name-in-body-in-arrow.js non-strict named-no-strict-reassign-fn-name-in-body-in-eval.js non-strict @@ -4906,52 +4779,43 @@ language/expressions/function 214/264 (81.06%) named-strict-error-reassign-fn-name-in-body-in-arrow.js strict named-strict-error-reassign-fn-name-in-body-in-eval.js strict object-destructuring-param-strict-body.js - param-dflt-yield-non-strict.js {unsupported: [default-parameters]} - param-dflt-yield-strict.js {unsupported: [default-parameters]} + param-dflt-yield-non-strict.js non-strict + param-dflt-yield-strict.js strict param-duplicated-strict-body-1.js non-strict param-duplicated-strict-body-2.js non-strict param-duplicated-strict-body-3.js non-strict param-eval-strict-body.js non-strict - params-dflt-args-unmapped.js {unsupported: [default-parameters]} - params-dflt-ref-arguments.js {unsupported: [default-parameters]} + params-dflt-ref-arguments.js rest-param-strict-body.js scope-body-lex-distinct.js non-strict scope-name-var-open-non-strict.js non-strict scope-name-var-open-strict.js strict - scope-param-elem-var-close.js non-strict - scope-param-elem-var-open.js non-strict scope-param-rest-elem-var-close.js non-strict scope-param-rest-elem-var-open.js non-strict - scope-paramsbody-var-close.js scope-paramsbody-var-open.js static-init-await-binding.js static-init-await-reference.js unscopables-with.js non-strict unscopables-with-in-nested-fn.js non-strict -language/expressions/generators 232/290 (80.0%) +language/expressions/generators 194/290 (66.9%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js dstr/ary-ptrn-elem-ary-val-null.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js @@ -4977,99 +4841,78 @@ language/expressions/generators 232/290 (80.0%) dstr/ary-ptrn-rest-id-iter-val-err.js dstr/ary-ptrn-rest-obj-id.js dstr/ary-ptrn-rest-obj-prop-id.js - dstr/dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/dflt-ary-init-iter-close.js + dstr/dflt-ary-init-iter-get-err.js + dstr/dflt-ary-init-iter-get-err-array-prototype.js + dstr/dflt-ary-init-iter-no-close.js + dstr/dflt-ary-ptrn-elem-ary-elem-init.js + dstr/dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/dflt-ary-ptrn-elem-ary-elision-init.js + dstr/dflt-ary-ptrn-elem-ary-empty-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/dflt-ary-ptrn-elem-ary-val-null.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/dflt-ary-ptrn-elem-id-init-hole.js + dstr/dflt-ary-ptrn-elem-id-init-skipped.js + dstr/dflt-ary-ptrn-elem-id-init-throws.js + dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js + dstr/dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/dflt-ary-ptrn-elem-obj-id.js + dstr/dflt-ary-ptrn-elem-obj-id-init.js + dstr/dflt-ary-ptrn-elem-obj-prop-id.js + dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/dflt-ary-ptrn-elem-obj-val-null.js + dstr/dflt-ary-ptrn-elem-obj-val-undef.js + dstr/dflt-ary-ptrn-elision.js + dstr/dflt-ary-ptrn-elision-step-err.js + dstr/dflt-ary-ptrn-rest-ary-elem.js + dstr/dflt-ary-ptrn-rest-ary-elision.js + dstr/dflt-ary-ptrn-rest-ary-empty.js + dstr/dflt-ary-ptrn-rest-ary-rest.js + dstr/dflt-ary-ptrn-rest-id.js + dstr/dflt-ary-ptrn-rest-id-direct.js + dstr/dflt-ary-ptrn-rest-id-elision.js + dstr/dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/dflt-ary-ptrn-rest-id-exhausted.js + dstr/dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/dflt-ary-ptrn-rest-obj-id.js + dstr/dflt-ary-ptrn-rest-obj-prop-id.js + dstr/dflt-obj-init-null.js + dstr/dflt-obj-init-undefined.js + dstr/dflt-obj-ptrn-id-get-value-err.js + dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/dflt-obj-ptrn-id-init-fn-name-class.js + dstr/dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/dflt-obj-ptrn-id-init-skipped.js + dstr/dflt-obj-ptrn-id-init-throws.js + dstr/dflt-obj-ptrn-id-init-unresolvable.js + dstr/dflt-obj-ptrn-list-err.js + dstr/dflt-obj-ptrn-prop-ary.js + dstr/dflt-obj-ptrn-prop-ary-init.js + dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/dflt-obj-ptrn-prop-ary-value-null.js + dstr/dflt-obj-ptrn-prop-eval-err.js + dstr/dflt-obj-ptrn-prop-id-get-value-err.js + dstr/dflt-obj-ptrn-prop-id-init-skipped.js + dstr/dflt-obj-ptrn-prop-id-init-throws.js + dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js + dstr/dflt-obj-ptrn-prop-obj.js + dstr/dflt-obj-ptrn-prop-obj-init.js + dstr/dflt-obj-ptrn-prop-obj-value-null.js + dstr/dflt-obj-ptrn-prop-obj-value-undef.js + dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/obj-init-null.js dstr/obj-init-undefined.js dstr/obj-ptrn-id-get-value-err.js @@ -5087,7 +4930,6 @@ language/expressions/generators 232/290 (80.0%) dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js dstr/obj-ptrn-prop-id-init-unresolvable.js @@ -5100,25 +4942,20 @@ language/expressions/generators 232/290 (80.0%) dstr/obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} forbidden-ext/b1 2/2 (100.0%) arguments-with-arguments-fn.js non-strict - arguments-with-arguments-lex.js non-strict array-destructuring-param-strict-body.js default-proto.js - dflt-params-abrupt.js {unsupported: [default-parameters]} - dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - dflt-params-duplicates.js {unsupported: [default-parameters]} - dflt-params-ref-later.js {unsupported: [default-parameters]} - dflt-params-ref-prior.js {unsupported: [default-parameters]} - dflt-params-ref-self.js {unsupported: [default-parameters]} - dflt-params-rest.js {unsupported: [default-parameters]} + dflt-params-abrupt.js + dflt-params-duplicates.js non-strict + dflt-params-ref-later.js + dflt-params-ref-self.js + dflt-params-rest.js dflt-params-trailing-comma.js eval-body-proto-realm.js - eval-var-scope-syntax-err.js {unsupported: [default-parameters]} - generator-created-after-decl-inst.js + eval-var-scope-syntax-err.js non-strict has-instance.js implicit-name.js invoke-as-constructor.js - length-dflt.js {unsupported: [default-parameters]} + length-dflt.js named-no-strict-reassign-fn-name-in-body.js non-strict named-no-strict-reassign-fn-name-in-body-in-arrow.js non-strict named-no-strict-reassign-fn-name-in-body-in-eval.js non-strict @@ -5131,9 +4968,6 @@ language/expressions/generators 232/290 (80.0%) named-yield-spread-arr-single.js named-yield-spread-obj.js object-destructuring-param-strict-body.js - param-dflt-yield.js {unsupported: [default-parameters]} - params-dflt-args-unmapped.js {unsupported: [default-parameters]} - params-dflt-ref-arguments.js {unsupported: [default-parameters]} prototype-own-properties.js prototype-relation-to-function.js prototype-value.js @@ -5142,11 +4976,8 @@ language/expressions/generators 232/290 (80.0%) scope-name-var-close.js non-interpreted scope-name-var-open-non-strict.js non-strict scope-name-var-open-strict.js strict - scope-param-elem-var-close.js non-strict - scope-param-elem-var-open.js non-strict scope-param-rest-elem-var-close.js non-strict scope-param-rest-elem-var-open.js non-strict - scope-paramsbody-var-close.js scope-paramsbody-var-open.js static-init-await-binding.js static-init-await-reference.js @@ -5220,7 +5051,7 @@ language/expressions/less-than-or-equal 2/47 (4.26%) language/expressions/logical-and 1/18 (5.56%) tco-right.js {unsupported: [tail-call-optimization]} -language/expressions/logical-assignment 55/78 (70.51%) +language/expressions/logical-assignment 53/78 (67.95%) left-hand-side-private-reference-accessor-property-and.js {unsupported: [class-fields-private]} left-hand-side-private-reference-accessor-property-nullish.js {unsupported: [class-fields-private]} left-hand-side-private-reference-accessor-property-or.js {unsupported: [class-fields-private]} @@ -5251,7 +5082,6 @@ language/expressions/logical-assignment 55/78 (70.51%) lgcl-and-assignment-operator-non-extensible.js strict lgcl-and-assignment-operator-non-simple-lhs.js lgcl-and-assignment-operator-non-writeable.js strict - lgcl-and-eval-strict.js strict lgcl-nullish-assignment-operator.js lgcl-nullish-assignment-operator-bigint.js lgcl-nullish-assignment-operator-lhs-before-rhs.js @@ -5275,7 +5105,6 @@ language/expressions/logical-assignment 55/78 (70.51%) lgcl-or-assignment-operator-no-set-put.js strict lgcl-or-assignment-operator-non-simple-lhs.js lgcl-or-assignment-operator-non-writeable.js strict - lgcl-or-eval-strict.js strict language/expressions/logical-not 0/19 (0.0%) @@ -5337,7 +5166,7 @@ language/expressions/new 41/59 (69.49%) ~language/expressions/new.target -language/expressions/object 863/1169 (73.82%) +language/expressions/object 809/1169 (69.2%) dstr/async-gen-meth-ary-init-iter-close.js {unsupported: [async-iteration, async]} dstr/async-gen-meth-ary-init-iter-get-err.js {unsupported: [async-iteration]} dstr/async-gen-meth-ary-init-iter-get-err-array-prototype.js {unsupported: [async-iteration]} @@ -5578,99 +5407,93 @@ language/expressions/object 863/1169 (73.82%) dstr/gen-meth-ary-ptrn-rest-id-iter-val-err.js dstr/gen-meth-ary-ptrn-rest-obj-id.js dstr/gen-meth-ary-ptrn-rest-obj-prop-id.js - dstr/gen-meth-dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/gen-meth-dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/gen-meth-dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/gen-meth-dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/gen-meth-dflt-ary-init-iter-close.js + dstr/gen-meth-dflt-ary-init-iter-get-err.js + dstr/gen-meth-dflt-ary-init-iter-get-err-array-prototype.js + dstr/gen-meth-dflt-ary-init-iter-no-close.js + dstr/gen-meth-dflt-ary-name-iter-val.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-elem-init.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-elision-init.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-elision-iter.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-empty-init.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-empty-iter.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-rest-init.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/gen-meth-dflt-ary-ptrn-elem-ary-val-null.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-exhausted.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-hole.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-skipped.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-throws.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-undef.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-init-unresolvable.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-complete.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-done.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-val.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/gen-meth-dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/gen-meth-dflt-ary-ptrn-elem-obj-id.js + dstr/gen-meth-dflt-ary-ptrn-elem-obj-id-init.js + dstr/gen-meth-dflt-ary-ptrn-elem-obj-prop-id.js + dstr/gen-meth-dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/gen-meth-dflt-ary-ptrn-elem-obj-val-null.js + dstr/gen-meth-dflt-ary-ptrn-elem-obj-val-undef.js + dstr/gen-meth-dflt-ary-ptrn-elision.js + dstr/gen-meth-dflt-ary-ptrn-elision-exhausted.js + dstr/gen-meth-dflt-ary-ptrn-elision-step-err.js + dstr/gen-meth-dflt-ary-ptrn-empty.js + dstr/gen-meth-dflt-ary-ptrn-rest-ary-elem.js + dstr/gen-meth-dflt-ary-ptrn-rest-ary-elision.js + dstr/gen-meth-dflt-ary-ptrn-rest-ary-empty.js + dstr/gen-meth-dflt-ary-ptrn-rest-ary-rest.js + dstr/gen-meth-dflt-ary-ptrn-rest-id.js + dstr/gen-meth-dflt-ary-ptrn-rest-id-direct.js + dstr/gen-meth-dflt-ary-ptrn-rest-id-elision.js + dstr/gen-meth-dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/gen-meth-dflt-ary-ptrn-rest-id-exhausted.js + dstr/gen-meth-dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/gen-meth-dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/gen-meth-dflt-ary-ptrn-rest-obj-id.js + dstr/gen-meth-dflt-ary-ptrn-rest-obj-prop-id.js + dstr/gen-meth-dflt-obj-init-null.js + dstr/gen-meth-dflt-obj-init-undefined.js + dstr/gen-meth-dflt-obj-ptrn-empty.js + dstr/gen-meth-dflt-obj-ptrn-id-get-value-err.js + dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js + dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/gen-meth-dflt-obj-ptrn-id-init-skipped.js + dstr/gen-meth-dflt-obj-ptrn-id-init-throws.js + dstr/gen-meth-dflt-obj-ptrn-id-init-unresolvable.js + dstr/gen-meth-dflt-obj-ptrn-id-trailing-comma.js + dstr/gen-meth-dflt-obj-ptrn-list-err.js + dstr/gen-meth-dflt-obj-ptrn-prop-ary.js + dstr/gen-meth-dflt-obj-ptrn-prop-ary-init.js + dstr/gen-meth-dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/gen-meth-dflt-obj-ptrn-prop-ary-value-null.js + dstr/gen-meth-dflt-obj-ptrn-prop-eval-err.js + dstr/gen-meth-dflt-obj-ptrn-prop-id.js + dstr/gen-meth-dflt-obj-ptrn-prop-id-get-value-err.js + dstr/gen-meth-dflt-obj-ptrn-prop-id-init.js + dstr/gen-meth-dflt-obj-ptrn-prop-id-init-skipped.js + dstr/gen-meth-dflt-obj-ptrn-prop-id-init-throws.js + dstr/gen-meth-dflt-obj-ptrn-prop-id-init-unresolvable.js + dstr/gen-meth-dflt-obj-ptrn-prop-id-trailing-comma.js + dstr/gen-meth-dflt-obj-ptrn-prop-obj.js + dstr/gen-meth-dflt-obj-ptrn-prop-obj-init.js + dstr/gen-meth-dflt-obj-ptrn-prop-obj-value-null.js + dstr/gen-meth-dflt-obj-ptrn-prop-obj-value-undef.js + dstr/gen-meth-dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/gen-meth-dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/gen-meth-dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/gen-meth-obj-init-null.js dstr/gen-meth-obj-init-undefined.js dstr/gen-meth-obj-ptrn-empty.js @@ -5710,22 +5533,16 @@ language/expressions/object 863/1169 (73.82%) dstr/meth-ary-ptrn-elem-ary-elem-init.js dstr/meth-ary-ptrn-elem-ary-elem-iter.js dstr/meth-ary-ptrn-elem-ary-elision-init.js - dstr/meth-ary-ptrn-elem-ary-elision-iter.js dstr/meth-ary-ptrn-elem-ary-empty-init.js - dstr/meth-ary-ptrn-elem-ary-empty-iter.js dstr/meth-ary-ptrn-elem-ary-rest-init.js dstr/meth-ary-ptrn-elem-ary-rest-iter.js - dstr/meth-ary-ptrn-elem-id-init-exhausted.js dstr/meth-ary-ptrn-elem-id-init-fn-name-arrow.js dstr/meth-ary-ptrn-elem-id-init-fn-name-class.js dstr/meth-ary-ptrn-elem-id-init-fn-name-cover.js dstr/meth-ary-ptrn-elem-id-init-fn-name-fn.js dstr/meth-ary-ptrn-elem-id-init-fn-name-gen.js - dstr/meth-ary-ptrn-elem-id-init-hole.js dstr/meth-ary-ptrn-elem-id-init-skipped.js dstr/meth-ary-ptrn-elem-id-init-throws.js - dstr/meth-ary-ptrn-elem-id-init-undef.js - dstr/meth-ary-ptrn-elem-id-init-unresolvable.js dstr/meth-ary-ptrn-elem-id-iter-step-err.js dstr/meth-ary-ptrn-elem-id-iter-val-array-prototype.js dstr/meth-ary-ptrn-elem-id-iter-val-err.js @@ -5748,99 +5565,72 @@ language/expressions/object 863/1169 (73.82%) dstr/meth-ary-ptrn-rest-id-iter-val-err.js dstr/meth-ary-ptrn-rest-obj-id.js dstr/meth-ary-ptrn-rest-obj-prop-id.js - dstr/meth-dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/meth-dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/meth-dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/meth-dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/meth-dflt-ary-init-iter-close.js + dstr/meth-dflt-ary-init-iter-get-err.js + dstr/meth-dflt-ary-init-iter-get-err-array-prototype.js + dstr/meth-dflt-ary-init-iter-no-close.js + dstr/meth-dflt-ary-ptrn-elem-ary-elem-init.js + dstr/meth-dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/meth-dflt-ary-ptrn-elem-ary-elision-init.js + dstr/meth-dflt-ary-ptrn-elem-ary-empty-init.js + dstr/meth-dflt-ary-ptrn-elem-ary-rest-init.js + dstr/meth-dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/meth-dflt-ary-ptrn-elem-id-init-hole.js + dstr/meth-dflt-ary-ptrn-elem-id-init-skipped.js + dstr/meth-dflt-ary-ptrn-elem-id-init-throws.js + dstr/meth-dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/meth-dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/meth-dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/meth-dflt-ary-ptrn-elem-obj-id.js + dstr/meth-dflt-ary-ptrn-elem-obj-id-init.js + dstr/meth-dflt-ary-ptrn-elem-obj-prop-id.js + dstr/meth-dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/meth-dflt-ary-ptrn-elision.js + dstr/meth-dflt-ary-ptrn-elision-step-err.js + dstr/meth-dflt-ary-ptrn-rest-ary-elem.js + dstr/meth-dflt-ary-ptrn-rest-ary-elision.js + dstr/meth-dflt-ary-ptrn-rest-ary-empty.js + dstr/meth-dflt-ary-ptrn-rest-ary-rest.js + dstr/meth-dflt-ary-ptrn-rest-id.js + dstr/meth-dflt-ary-ptrn-rest-id-direct.js + dstr/meth-dflt-ary-ptrn-rest-id-elision.js + dstr/meth-dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/meth-dflt-ary-ptrn-rest-id-exhausted.js + dstr/meth-dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/meth-dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/meth-dflt-ary-ptrn-rest-obj-id.js + dstr/meth-dflt-ary-ptrn-rest-obj-prop-id.js + dstr/meth-dflt-obj-init-null.js + dstr/meth-dflt-obj-init-undefined.js + dstr/meth-dflt-obj-ptrn-id-get-value-err.js + dstr/meth-dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/meth-dflt-obj-ptrn-id-init-fn-name-class.js + dstr/meth-dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/meth-dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/meth-dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/meth-dflt-obj-ptrn-id-init-skipped.js + dstr/meth-dflt-obj-ptrn-id-init-throws.js + dstr/meth-dflt-obj-ptrn-list-err.js + dstr/meth-dflt-obj-ptrn-prop-ary.js + dstr/meth-dflt-obj-ptrn-prop-ary-init.js + dstr/meth-dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/meth-dflt-obj-ptrn-prop-ary-value-null.js + dstr/meth-dflt-obj-ptrn-prop-eval-err.js + dstr/meth-dflt-obj-ptrn-prop-id-get-value-err.js + dstr/meth-dflt-obj-ptrn-prop-id-init-skipped.js + dstr/meth-dflt-obj-ptrn-prop-id-init-throws.js + dstr/meth-dflt-obj-ptrn-prop-obj.js + dstr/meth-dflt-obj-ptrn-prop-obj-init.js + dstr/meth-dflt-obj-ptrn-prop-obj-value-null.js + dstr/meth-dflt-obj-ptrn-prop-obj-value-undef.js + dstr/meth-dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/meth-dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/meth-dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/meth-obj-init-null.js dstr/meth-obj-init-undefined.js dstr/meth-obj-ptrn-id-init-fn-name-arrow.js @@ -5850,17 +5640,13 @@ language/expressions/object 863/1169 (73.82%) dstr/meth-obj-ptrn-id-init-fn-name-gen.js dstr/meth-obj-ptrn-id-init-skipped.js dstr/meth-obj-ptrn-id-init-throws.js - dstr/meth-obj-ptrn-id-init-unresolvable.js dstr/meth-obj-ptrn-list-err.js dstr/meth-obj-ptrn-prop-ary.js dstr/meth-obj-ptrn-prop-ary-init.js dstr/meth-obj-ptrn-prop-ary-value-null.js dstr/meth-obj-ptrn-prop-eval-err.js - dstr/meth-obj-ptrn-prop-id-get-value-err.js - dstr/meth-obj-ptrn-prop-id-init.js dstr/meth-obj-ptrn-prop-id-init-skipped.js dstr/meth-obj-ptrn-prop-id-init-throws.js - dstr/meth-obj-ptrn-prop-id-init-unresolvable.js dstr/meth-obj-ptrn-prop-obj.js dstr/meth-obj-ptrn-prop-obj-init.js dstr/meth-obj-ptrn-prop-obj-value-null.js @@ -5900,17 +5686,17 @@ language/expressions/object 863/1169 (73.82%) method-definition/async-gen-await-as-label-identifier.js {unsupported: [async-iteration]} method-definition/async-gen-await-as-label-identifier-escaped.js {unsupported: [async-iteration]} method-definition/async-gen-meth-array-destructuring-param-strict-body.js {unsupported: [async-iteration]} - method-definition/async-gen-meth-dflt-params-abrupt.js {unsupported: [default-parameters, async-iteration]} - method-definition/async-gen-meth-dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters, async-iteration, async]} - method-definition/async-gen-meth-dflt-params-arg-val-undefined.js {unsupported: [default-parameters, async-iteration, async]} - method-definition/async-gen-meth-dflt-params-duplicates.js {unsupported: [default-parameters, async-iteration]} - method-definition/async-gen-meth-dflt-params-ref-later.js {unsupported: [default-parameters, async-iteration]} - method-definition/async-gen-meth-dflt-params-ref-prior.js {unsupported: [default-parameters, async-iteration, async]} - method-definition/async-gen-meth-dflt-params-ref-self.js {unsupported: [default-parameters, async-iteration]} - method-definition/async-gen-meth-dflt-params-rest.js {unsupported: [default-parameters, async-iteration]} + method-definition/async-gen-meth-dflt-params-abrupt.js {unsupported: [async-iteration]} + method-definition/async-gen-meth-dflt-params-arg-val-not-undefined.js {unsupported: [async-iteration, async]} + method-definition/async-gen-meth-dflt-params-arg-val-undefined.js {unsupported: [async-iteration, async]} + method-definition/async-gen-meth-dflt-params-duplicates.js {unsupported: [async-iteration]} + method-definition/async-gen-meth-dflt-params-ref-later.js {unsupported: [async-iteration]} + method-definition/async-gen-meth-dflt-params-ref-prior.js {unsupported: [async-iteration, async]} + method-definition/async-gen-meth-dflt-params-ref-self.js {unsupported: [async-iteration]} + method-definition/async-gen-meth-dflt-params-rest.js {unsupported: [async-iteration]} method-definition/async-gen-meth-dflt-params-trailing-comma.js {unsupported: [async-iteration, async]} method-definition/async-gen-meth-escaped-async.js {unsupported: [async-iteration]} - method-definition/async-gen-meth-eval-var-scope-syntax-err.js {unsupported: [default-parameters, async-iteration]} + method-definition/async-gen-meth-eval-var-scope-syntax-err.js {unsupported: [async-iteration]} method-definition/async-gen-meth-object-destructuring-param-strict-body.js {unsupported: [async-iteration]} method-definition/async-gen-meth-params-trailing-comma-multiple.js {unsupported: [async-iteration, async]} method-definition/async-gen-meth-params-trailing-comma-single.js {unsupported: [async-iteration, async]} @@ -5992,17 +5778,17 @@ language/expressions/object 863/1169 (73.82%) method-definition/async-gen-yield-star-sync-return.js {unsupported: [async-iteration, async]} method-definition/async-gen-yield-star-sync-throw.js {unsupported: [async-iteration, async]} method-definition/async-meth-array-destructuring-param-strict-body.js {unsupported: [async-iteration]} - method-definition/async-meth-dflt-params-abrupt.js {unsupported: [default-parameters, async-functions, async]} - method-definition/async-meth-dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters, async-functions, async]} - method-definition/async-meth-dflt-params-arg-val-undefined.js {unsupported: [default-parameters, async-functions, async]} - method-definition/async-meth-dflt-params-duplicates.js {unsupported: [default-parameters, async-iteration]} - method-definition/async-meth-dflt-params-ref-later.js {unsupported: [default-parameters, async-functions, async]} - method-definition/async-meth-dflt-params-ref-prior.js {unsupported: [default-parameters, async-functions, async]} - method-definition/async-meth-dflt-params-ref-self.js {unsupported: [default-parameters, async-functions, async]} - method-definition/async-meth-dflt-params-rest.js {unsupported: [default-parameters, async-iteration]} + method-definition/async-meth-dflt-params-abrupt.js {unsupported: [async-functions, async]} + method-definition/async-meth-dflt-params-arg-val-not-undefined.js {unsupported: [async-functions, async]} + method-definition/async-meth-dflt-params-arg-val-undefined.js {unsupported: [async-functions, async]} + method-definition/async-meth-dflt-params-duplicates.js {unsupported: [async-iteration]} + method-definition/async-meth-dflt-params-ref-later.js {unsupported: [async-functions, async]} + method-definition/async-meth-dflt-params-ref-prior.js {unsupported: [async-functions, async]} + method-definition/async-meth-dflt-params-ref-self.js {unsupported: [async-functions, async]} + method-definition/async-meth-dflt-params-rest.js {unsupported: [async-iteration]} method-definition/async-meth-dflt-params-trailing-comma.js {unsupported: [async-functions, async]} method-definition/async-meth-escaped-async.js {unsupported: [async-functions]} - method-definition/async-meth-eval-var-scope-syntax-err.js {unsupported: [default-parameters, async-functions, async]} + method-definition/async-meth-eval-var-scope-syntax-err.js {unsupported: [async-functions, async]} method-definition/async-meth-object-destructuring-param-strict-body.js {unsupported: [async-iteration]} method-definition/async-meth-params-trailing-comma-multiple.js {unsupported: [async-functions, async]} method-definition/async-meth-params-trailing-comma-single.js {unsupported: [async-functions, async]} @@ -6033,16 +5819,14 @@ language/expressions/object 863/1169 (73.82%) method-definition/escaped-set-t.js method-definition/fn-name-fn.js method-definition/fn-name-gen.js - method-definition/gen-meth-dflt-params-abrupt.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-duplicates.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-ref-later.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-ref-prior.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-ref-self.js {unsupported: [default-parameters]} - method-definition/gen-meth-dflt-params-rest.js {unsupported: [default-parameters]} + method-definition/gen-meth-dflt-params-abrupt.js + method-definition/gen-meth-dflt-params-arg-val-not-undefined.js + method-definition/gen-meth-dflt-params-arg-val-undefined.js + method-definition/gen-meth-dflt-params-ref-later.js + method-definition/gen-meth-dflt-params-ref-prior.js + method-definition/gen-meth-dflt-params-ref-self.js method-definition/gen-meth-dflt-params-trailing-comma.js - method-definition/gen-meth-eval-var-scope-syntax-err.js {unsupported: [default-parameters]} + method-definition/gen-meth-eval-var-scope-syntax-err.js non-strict method-definition/gen-meth-params-trailing-comma-multiple.js method-definition/gen-meth-params-trailing-comma-single.js method-definition/gen-yield-identifier-non-strict.js non-strict @@ -6054,7 +5838,7 @@ language/expressions/object 863/1169 (73.82%) method-definition/generator-invoke-fn-no-strict.js non-strict method-definition/generator-invoke-fn-strict.js non-strict method-definition/generator-length.js - method-definition/generator-length-dflt.js {unsupported: [default-parameters]} + method-definition/generator-length-dflt.js method-definition/generator-name-prop-string.js method-definition/generator-name-prop-symbol.js method-definition/generator-no-yield.js @@ -6067,23 +5851,19 @@ language/expressions/object 863/1169 (73.82%) method-definition/generator-prototype-prop.js method-definition/generator-return.js method-definition/generator-super-prop-body.js - method-definition/generator-super-prop-param.js {unsupported: [super, default-parameters]} + method-definition/generator-super-prop-param.js {unsupported: [super]} method-definition/meth-array-destructuring-param-strict-body.js - method-definition/meth-dflt-params-abrupt.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-duplicates.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-ref-later.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-ref-prior.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-ref-self.js {unsupported: [default-parameters]} - method-definition/meth-dflt-params-rest.js {unsupported: [default-parameters]} + method-definition/meth-dflt-params-duplicates.js non-strict + method-definition/meth-dflt-params-ref-later.js + method-definition/meth-dflt-params-ref-self.js + method-definition/meth-dflt-params-rest.js method-definition/meth-dflt-params-trailing-comma.js - method-definition/meth-eval-var-scope-syntax-err.js {unsupported: [default-parameters]} + method-definition/meth-eval-var-scope-syntax-err.js non-strict method-definition/meth-object-destructuring-param-strict-body.js method-definition/meth-rest-param-strict-body.js method-definition/name-invoke-ctor.js method-definition/name-invoke-fn-strict.js non-strict - method-definition/name-length-dflt.js {unsupported: [default-parameters]} + method-definition/name-length-dflt.js method-definition/name-name-prop-string.js method-definition/name-name-prop-symbol.js method-definition/name-param-id-yield.js non-strict @@ -6095,10 +5875,9 @@ language/expressions/object 863/1169 (73.82%) method-definition/name-super-prop-body.js {unsupported: [super]} method-definition/name-super-prop-param.js {unsupported: [super]} method-definition/object-method-returns-promise.js {unsupported: [async-functions]} - method-definition/params-dflt-gen-meth-args-unmapped.js {unsupported: [default-parameters]} - method-definition/params-dflt-gen-meth-ref-arguments.js {unsupported: [default-parameters]} - method-definition/params-dflt-meth-args-unmapped.js {unsupported: [default-parameters]} - method-definition/params-dflt-meth-ref-arguments.js {unsupported: [default-parameters]} + method-definition/params-dflt-gen-meth-args-unmapped.js + method-definition/params-dflt-gen-meth-ref-arguments.js + method-definition/params-dflt-meth-ref-arguments.js method-definition/private-name-early-error-async-fn.js {unsupported: [async-functions]} method-definition/private-name-early-error-async-fn-inside-class.js {unsupported: [class-fields-public, async-functions, class]} method-definition/private-name-early-error-async-gen.js {unsupported: [async-iteration]} @@ -6153,7 +5932,7 @@ language/expressions/object 863/1169 (73.82%) fn-name-gen.js getter-body-strict-inside.js non-strict getter-body-strict-outside.js strict - getter-param-dflt.js {unsupported: [default-parameters]} + getter-param-dflt.js getter-super-prop.js ident-name-prop-name-literal-await-static-init.js identifier-shorthand-await-strict-mode.js non-strict @@ -6184,18 +5963,14 @@ language/expressions/object 863/1169 (73.82%) scope-gen-meth-paramsbody-var-open.js scope-getter-body-lex-distinc.js non-strict scope-meth-body-lex-distinct.js non-strict - scope-meth-param-elem-var-close.js non-strict - scope-meth-param-elem-var-open.js non-strict scope-meth-param-rest-elem-var-close.js non-strict scope-meth-param-rest-elem-var-open.js non-strict - scope-meth-paramsbody-var-close.js scope-meth-paramsbody-var-open.js scope-setter-body-lex-distinc.js non-strict - scope-setter-paramsbody-var-close.js scope-setter-paramsbody-var-open.js setter-body-strict-inside.js non-strict setter-body-strict-outside.js strict - setter-length-dflt.js {unsupported: [default-parameters]} + setter-length-dflt.js setter-param-arguments-strict-inside.js non-strict setter-param-eval-strict-inside.js non-strict setter-super-prop.js @@ -6675,29 +6450,23 @@ language/statements/break 0/20 (0.0%) ~language/statements/class -language/statements/const 108/136 (79.41%) +language/statements/const 98/136 (72.06%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js - dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js dstr/ary-ptrn-elem-id-iter-val-err.js @@ -6729,17 +6498,13 @@ language/statements/const 108/136 (79.41%) dstr/obj-ptrn-id-init-fn-name-gen.js dstr/obj-ptrn-id-init-skipped.js dstr/obj-ptrn-id-init-throws.js - dstr/obj-ptrn-id-init-unresolvable.js dstr/obj-ptrn-list-err.js dstr/obj-ptrn-prop-ary.js dstr/obj-ptrn-prop-ary-init.js dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js - dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js - dstr/obj-ptrn-prop-id-init-unresolvable.js dstr/obj-ptrn-prop-obj.js dstr/obj-ptrn-prop-obj-init.js dstr/obj-ptrn-prop-obj-value-null.js @@ -6805,7 +6570,7 @@ language/statements/empty 0/2 (0.0%) language/statements/expression 0/3 (0.0%) -language/statements/for 264/385 (68.57%) +language/statements/for 244/385 (63.38%) dstr/const-ary-init-iter-close.js dstr/const-ary-init-iter-get-err.js dstr/const-ary-init-iter-get-err-array-prototype.js @@ -6901,22 +6666,16 @@ language/statements/for 264/385 (68.57%) dstr/let-ary-ptrn-elem-ary-elem-init.js dstr/let-ary-ptrn-elem-ary-elem-iter.js dstr/let-ary-ptrn-elem-ary-elision-init.js - dstr/let-ary-ptrn-elem-ary-elision-iter.js dstr/let-ary-ptrn-elem-ary-empty-init.js - dstr/let-ary-ptrn-elem-ary-empty-iter.js dstr/let-ary-ptrn-elem-ary-rest-init.js dstr/let-ary-ptrn-elem-ary-rest-iter.js - dstr/let-ary-ptrn-elem-id-init-exhausted.js dstr/let-ary-ptrn-elem-id-init-fn-name-arrow.js dstr/let-ary-ptrn-elem-id-init-fn-name-class.js dstr/let-ary-ptrn-elem-id-init-fn-name-cover.js dstr/let-ary-ptrn-elem-id-init-fn-name-fn.js dstr/let-ary-ptrn-elem-id-init-fn-name-gen.js - dstr/let-ary-ptrn-elem-id-init-hole.js dstr/let-ary-ptrn-elem-id-init-skipped.js dstr/let-ary-ptrn-elem-id-init-throws.js - dstr/let-ary-ptrn-elem-id-init-undef.js - dstr/let-ary-ptrn-elem-id-init-unresolvable.js dstr/let-ary-ptrn-elem-id-iter-step-err.js dstr/let-ary-ptrn-elem-id-iter-val-array-prototype.js dstr/let-ary-ptrn-elem-id-iter-val-err.js @@ -6950,18 +6709,14 @@ language/statements/for 264/385 (68.57%) dstr/let-obj-ptrn-id-init-fn-name-gen.js dstr/let-obj-ptrn-id-init-skipped.js dstr/let-obj-ptrn-id-init-throws.js - dstr/let-obj-ptrn-id-init-unresolvable.js dstr/let-obj-ptrn-list-err.js dstr/let-obj-ptrn-prop-ary.js dstr/let-obj-ptrn-prop-ary-init.js dstr/let-obj-ptrn-prop-ary-trailing-comma.js strict dstr/let-obj-ptrn-prop-ary-value-null.js dstr/let-obj-ptrn-prop-eval-err.js - dstr/let-obj-ptrn-prop-id-get-value-err.js - dstr/let-obj-ptrn-prop-id-init.js dstr/let-obj-ptrn-prop-id-init-skipped.js dstr/let-obj-ptrn-prop-id-init-throws.js - dstr/let-obj-ptrn-prop-id-init-unresolvable.js dstr/let-obj-ptrn-prop-obj.js dstr/let-obj-ptrn-prop-obj-init.js dstr/let-obj-ptrn-prop-obj-value-null.js @@ -6975,22 +6730,16 @@ language/statements/for 264/385 (68.57%) dstr/var-ary-ptrn-elem-ary-elem-init.js dstr/var-ary-ptrn-elem-ary-elem-iter.js dstr/var-ary-ptrn-elem-ary-elision-init.js - dstr/var-ary-ptrn-elem-ary-elision-iter.js dstr/var-ary-ptrn-elem-ary-empty-init.js - dstr/var-ary-ptrn-elem-ary-empty-iter.js dstr/var-ary-ptrn-elem-ary-rest-init.js dstr/var-ary-ptrn-elem-ary-rest-iter.js - dstr/var-ary-ptrn-elem-id-init-exhausted.js dstr/var-ary-ptrn-elem-id-init-fn-name-arrow.js dstr/var-ary-ptrn-elem-id-init-fn-name-class.js dstr/var-ary-ptrn-elem-id-init-fn-name-cover.js dstr/var-ary-ptrn-elem-id-init-fn-name-fn.js dstr/var-ary-ptrn-elem-id-init-fn-name-gen.js - dstr/var-ary-ptrn-elem-id-init-hole.js dstr/var-ary-ptrn-elem-id-init-skipped.js dstr/var-ary-ptrn-elem-id-init-throws.js - dstr/var-ary-ptrn-elem-id-init-undef.js - dstr/var-ary-ptrn-elem-id-init-unresolvable.js dstr/var-ary-ptrn-elem-id-iter-step-err.js dstr/var-ary-ptrn-elem-id-iter-val-array-prototype.js dstr/var-ary-ptrn-elem-id-iter-val-err.js @@ -7024,17 +6773,13 @@ language/statements/for 264/385 (68.57%) dstr/var-obj-ptrn-id-init-fn-name-gen.js dstr/var-obj-ptrn-id-init-skipped.js dstr/var-obj-ptrn-id-init-throws.js - dstr/var-obj-ptrn-id-init-unresolvable.js dstr/var-obj-ptrn-list-err.js dstr/var-obj-ptrn-prop-ary.js dstr/var-obj-ptrn-prop-ary-init.js dstr/var-obj-ptrn-prop-ary-value-null.js dstr/var-obj-ptrn-prop-eval-err.js - dstr/var-obj-ptrn-prop-id-get-value-err.js - dstr/var-obj-ptrn-prop-id-init.js dstr/var-obj-ptrn-prop-id-init-skipped.js dstr/var-obj-ptrn-prop-id-init-throws.js - dstr/var-obj-ptrn-prop-id-init-unresolvable.js dstr/var-obj-ptrn-prop-obj.js dstr/var-obj-ptrn-prop-obj-init.js dstr/var-obj-ptrn-prop-obj-value-null.js @@ -7115,8 +6860,7 @@ language/statements/for-in 40/115 (34.78%) scope-head-lex-open.js scope-head-var-none.js non-strict -language/statements/for-of 482/741 (65.05%) - dstr/array-elem-init-assignment.js +language/statements/for-of 453/741 (61.13%) dstr/array-elem-init-evaluation.js dstr/array-elem-init-fn-name-arrow.js dstr/array-elem-init-fn-name-class.js {unsupported: [class]} @@ -7127,7 +6871,6 @@ language/statements/for-of 482/741 (65.05%) dstr/array-elem-init-let.js dstr/array-elem-init-order.js dstr/array-elem-init-simple-no-strict.js non-strict - dstr/array-elem-init-yield-expr.js dstr/array-elem-init-yield-ident-valid.js non-strict dstr/array-elem-iter-get-err.js dstr/array-elem-iter-nrml-close.js @@ -7327,22 +7070,16 @@ language/statements/for-of 482/741 (65.05%) dstr/let-ary-ptrn-elem-ary-elem-init.js dstr/let-ary-ptrn-elem-ary-elem-iter.js dstr/let-ary-ptrn-elem-ary-elision-init.js - dstr/let-ary-ptrn-elem-ary-elision-iter.js dstr/let-ary-ptrn-elem-ary-empty-init.js - dstr/let-ary-ptrn-elem-ary-empty-iter.js dstr/let-ary-ptrn-elem-ary-rest-init.js dstr/let-ary-ptrn-elem-ary-rest-iter.js - dstr/let-ary-ptrn-elem-id-init-exhausted.js dstr/let-ary-ptrn-elem-id-init-fn-name-arrow.js dstr/let-ary-ptrn-elem-id-init-fn-name-class.js dstr/let-ary-ptrn-elem-id-init-fn-name-cover.js dstr/let-ary-ptrn-elem-id-init-fn-name-fn.js dstr/let-ary-ptrn-elem-id-init-fn-name-gen.js - dstr/let-ary-ptrn-elem-id-init-hole.js dstr/let-ary-ptrn-elem-id-init-skipped.js dstr/let-ary-ptrn-elem-id-init-throws.js - dstr/let-ary-ptrn-elem-id-init-undef.js - dstr/let-ary-ptrn-elem-id-init-unresolvable.js dstr/let-ary-ptrn-elem-id-iter-step-err.js dstr/let-ary-ptrn-elem-id-iter-val-array-prototype.js dstr/let-ary-ptrn-elem-id-iter-val-err.js @@ -7376,17 +7113,13 @@ language/statements/for-of 482/741 (65.05%) dstr/let-obj-ptrn-id-init-fn-name-gen.js dstr/let-obj-ptrn-id-init-skipped.js dstr/let-obj-ptrn-id-init-throws.js - dstr/let-obj-ptrn-id-init-unresolvable.js dstr/let-obj-ptrn-list-err.js dstr/let-obj-ptrn-prop-ary.js dstr/let-obj-ptrn-prop-ary-init.js dstr/let-obj-ptrn-prop-ary-value-null.js dstr/let-obj-ptrn-prop-eval-err.js - dstr/let-obj-ptrn-prop-id-get-value-err.js - dstr/let-obj-ptrn-prop-id-init.js dstr/let-obj-ptrn-prop-id-init-skipped.js dstr/let-obj-ptrn-prop-id-init-throws.js - dstr/let-obj-ptrn-prop-id-init-unresolvable.js dstr/let-obj-ptrn-prop-obj.js dstr/let-obj-ptrn-prop-obj-init.js dstr/let-obj-ptrn-prop-obj-value-null.js @@ -7415,11 +7148,6 @@ language/statements/for-of 482/741 (65.05%) dstr/obj-id-init-yield-ident-valid.js non-strict dstr/obj-id-put-const.js non-strict dstr/obj-id-put-let.js - dstr/obj-id-simple-strict.js strict - dstr/obj-prop-elem-init-assignment-missing.js - dstr/obj-prop-elem-init-assignment-null.js - dstr/obj-prop-elem-init-assignment-truthy.js - dstr/obj-prop-elem-init-assignment-undef.js dstr/obj-prop-elem-init-evaluation.js dstr/obj-prop-elem-init-fn-name-arrow.js dstr/obj-prop-elem-init-fn-name-class.js {unsupported: [class]} @@ -7428,14 +7156,12 @@ language/statements/for-of 482/741 (65.05%) dstr/obj-prop-elem-init-fn-name-gen.js dstr/obj-prop-elem-init-in.js dstr/obj-prop-elem-init-let.js - dstr/obj-prop-elem-init-yield-expr.js dstr/obj-prop-elem-init-yield-ident-valid.js non-strict dstr/obj-prop-elem-target-obj-literal-prop-ref-init.js dstr/obj-prop-elem-target-obj-literal-prop-ref-init-active.js dstr/obj-prop-elem-target-yield-ident-valid.js non-strict dstr/obj-prop-name-evaluation.js dstr/obj-prop-name-evaluation-error.js - dstr/obj-prop-nested-array-yield-expr.js dstr/obj-prop-nested-array-yield-ident-valid.js non-strict dstr/obj-prop-nested-obj-yield-expr.js dstr/obj-prop-nested-obj-yield-ident-valid.js non-strict @@ -7472,22 +7198,16 @@ language/statements/for-of 482/741 (65.05%) dstr/var-ary-ptrn-elem-ary-elem-init.js dstr/var-ary-ptrn-elem-ary-elem-iter.js dstr/var-ary-ptrn-elem-ary-elision-init.js - dstr/var-ary-ptrn-elem-ary-elision-iter.js dstr/var-ary-ptrn-elem-ary-empty-init.js - dstr/var-ary-ptrn-elem-ary-empty-iter.js dstr/var-ary-ptrn-elem-ary-rest-init.js dstr/var-ary-ptrn-elem-ary-rest-iter.js - dstr/var-ary-ptrn-elem-id-init-exhausted.js dstr/var-ary-ptrn-elem-id-init-fn-name-arrow.js dstr/var-ary-ptrn-elem-id-init-fn-name-class.js dstr/var-ary-ptrn-elem-id-init-fn-name-cover.js dstr/var-ary-ptrn-elem-id-init-fn-name-fn.js dstr/var-ary-ptrn-elem-id-init-fn-name-gen.js - dstr/var-ary-ptrn-elem-id-init-hole.js dstr/var-ary-ptrn-elem-id-init-skipped.js dstr/var-ary-ptrn-elem-id-init-throws.js - dstr/var-ary-ptrn-elem-id-init-undef.js - dstr/var-ary-ptrn-elem-id-init-unresolvable.js dstr/var-ary-ptrn-elem-id-iter-step-err.js dstr/var-ary-ptrn-elem-id-iter-val-array-prototype.js dstr/var-ary-ptrn-elem-id-iter-val-err.js @@ -7521,17 +7241,13 @@ language/statements/for-of 482/741 (65.05%) dstr/var-obj-ptrn-id-init-fn-name-gen.js dstr/var-obj-ptrn-id-init-skipped.js dstr/var-obj-ptrn-id-init-throws.js - dstr/var-obj-ptrn-id-init-unresolvable.js dstr/var-obj-ptrn-list-err.js dstr/var-obj-ptrn-prop-ary.js dstr/var-obj-ptrn-prop-ary-init.js dstr/var-obj-ptrn-prop-ary-value-null.js dstr/var-obj-ptrn-prop-eval-err.js - dstr/var-obj-ptrn-prop-id-get-value-err.js - dstr/var-obj-ptrn-prop-id-init.js dstr/var-obj-ptrn-prop-id-init-skipped.js dstr/var-obj-ptrn-prop-id-init-throws.js - dstr/var-obj-ptrn-prop-id-init-unresolvable.js dstr/var-obj-ptrn-prop-obj.js dstr/var-obj-ptrn-prop-obj-init.js dstr/var-obj-ptrn-prop-obj-value-null.js @@ -7599,29 +7315,23 @@ language/statements/for-of 482/741 (65.05%) typedarray-backed-by-resizable-buffer-shrink-mid-iteration.js {unsupported: [resizable-arraybuffer]} typedarray-backed-by-resizable-buffer-shrink-to-zero-mid-iteration.js {unsupported: [resizable-arraybuffer]} -language/statements/function 230/451 (51.0%) +language/statements/function 183/451 (40.58%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js - dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js dstr/ary-ptrn-elem-id-iter-val-err.js @@ -7644,99 +7354,72 @@ language/statements/function 230/451 (51.0%) dstr/ary-ptrn-rest-id-iter-val-err.js dstr/ary-ptrn-rest-obj-id.js dstr/ary-ptrn-rest-obj-prop-id.js - dstr/dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/dflt-ary-init-iter-close.js + dstr/dflt-ary-init-iter-get-err.js + dstr/dflt-ary-init-iter-get-err-array-prototype.js + dstr/dflt-ary-init-iter-no-close.js + dstr/dflt-ary-ptrn-elem-ary-elem-init.js + dstr/dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/dflt-ary-ptrn-elem-ary-elision-init.js + dstr/dflt-ary-ptrn-elem-ary-empty-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/dflt-ary-ptrn-elem-id-init-hole.js + dstr/dflt-ary-ptrn-elem-id-init-skipped.js + dstr/dflt-ary-ptrn-elem-id-init-throws.js + dstr/dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/dflt-ary-ptrn-elem-obj-id.js + dstr/dflt-ary-ptrn-elem-obj-id-init.js + dstr/dflt-ary-ptrn-elem-obj-prop-id.js + dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/dflt-ary-ptrn-elision.js + dstr/dflt-ary-ptrn-elision-step-err.js + dstr/dflt-ary-ptrn-rest-ary-elem.js + dstr/dflt-ary-ptrn-rest-ary-elision.js + dstr/dflt-ary-ptrn-rest-ary-empty.js + dstr/dflt-ary-ptrn-rest-ary-rest.js + dstr/dflt-ary-ptrn-rest-id.js + dstr/dflt-ary-ptrn-rest-id-direct.js + dstr/dflt-ary-ptrn-rest-id-elision.js + dstr/dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/dflt-ary-ptrn-rest-id-exhausted.js + dstr/dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/dflt-ary-ptrn-rest-obj-id.js + dstr/dflt-ary-ptrn-rest-obj-prop-id.js + dstr/dflt-obj-init-null.js + dstr/dflt-obj-init-undefined.js + dstr/dflt-obj-ptrn-id-get-value-err.js + dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/dflt-obj-ptrn-id-init-fn-name-class.js + dstr/dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/dflt-obj-ptrn-id-init-skipped.js + dstr/dflt-obj-ptrn-id-init-throws.js + dstr/dflt-obj-ptrn-list-err.js + dstr/dflt-obj-ptrn-prop-ary.js + dstr/dflt-obj-ptrn-prop-ary-init.js + dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/dflt-obj-ptrn-prop-ary-value-null.js + dstr/dflt-obj-ptrn-prop-eval-err.js + dstr/dflt-obj-ptrn-prop-id-get-value-err.js + dstr/dflt-obj-ptrn-prop-id-init-skipped.js + dstr/dflt-obj-ptrn-prop-id-init-throws.js + dstr/dflt-obj-ptrn-prop-obj.js + dstr/dflt-obj-ptrn-prop-obj-init.js + dstr/dflt-obj-ptrn-prop-obj-value-null.js + dstr/dflt-obj-ptrn-prop-obj-value-undef.js + dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/obj-init-null.js dstr/obj-init-undefined.js dstr/obj-ptrn-id-init-fn-name-arrow.js @@ -7746,17 +7429,13 @@ language/statements/function 230/451 (51.0%) dstr/obj-ptrn-id-init-fn-name-gen.js dstr/obj-ptrn-id-init-skipped.js dstr/obj-ptrn-id-init-throws.js - dstr/obj-ptrn-id-init-unresolvable.js dstr/obj-ptrn-list-err.js dstr/obj-ptrn-prop-ary.js dstr/obj-ptrn-prop-ary-init.js dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js - dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js - dstr/obj-ptrn-prop-id-init-unresolvable.js dstr/obj-ptrn-prop-obj.js dstr/obj-ptrn-prop-obj-init.js dstr/obj-ptrn-prop-obj-value-null.js @@ -7791,66 +7470,51 @@ language/statements/function 230/451 (51.0%) arguments-with-arguments-lex.js non-strict array-destructuring-param-strict-body.js cptn-decl.js - dflt-params-abrupt.js {unsupported: [default-parameters]} - dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - dflt-params-duplicates.js {unsupported: [default-parameters]} - dflt-params-ref-later.js {unsupported: [default-parameters]} - dflt-params-ref-prior.js {unsupported: [default-parameters]} - dflt-params-ref-self.js {unsupported: [default-parameters]} - dflt-params-rest.js {unsupported: [default-parameters]} + dflt-params-duplicates.js non-strict + dflt-params-ref-later.js + dflt-params-ref-self.js + dflt-params-rest.js dflt-params-trailing-comma.js - enable-strict-via-body.js non-strict - enable-strict-via-outer-body.js non-strict - eval-var-scope-syntax-err.js {unsupported: [default-parameters]} - length-dflt.js {unsupported: [default-parameters]} + eval-var-scope-syntax-err.js non-strict + length-dflt.js name-arguments-strict-body.js non-strict name-eval-strict-body.js non-strict object-destructuring-param-strict-body.js param-arguments-strict-body.js non-strict - param-dflt-yield-non-strict.js {unsupported: [default-parameters]} - param-dflt-yield-strict.js {unsupported: [default-parameters]} + param-dflt-yield-non-strict.js non-strict + param-dflt-yield-strict.js strict param-duplicated-strict-body-1.js non-strict param-duplicated-strict-body-2.js non-strict param-duplicated-strict-body-3.js non-strict param-eval-strict-body.js non-strict - params-dflt-args-unmapped.js {unsupported: [default-parameters]} - params-dflt-ref-arguments.js {unsupported: [default-parameters]} + params-dflt-ref-arguments.js rest-param-strict-body.js scope-body-lex-distinct.js non-strict - scope-param-elem-var-close.js non-strict - scope-param-elem-var-open.js non-strict scope-param-rest-elem-var-close.js non-strict scope-param-rest-elem-var-open.js non-strict - scope-paramsbody-var-close.js scope-paramsbody-var-open.js static-init-await-binding-valid.js unscopables-with.js non-strict unscopables-with-in-nested-fn.js non-strict -language/statements/generators 217/266 (81.58%) +language/statements/generators 179/266 (67.29%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js dstr/ary-ptrn-elem-ary-val-null.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js @@ -7876,99 +7540,78 @@ language/statements/generators 217/266 (81.58%) dstr/ary-ptrn-rest-id-iter-val-err.js dstr/ary-ptrn-rest-obj-id.js dstr/ary-ptrn-rest-obj-prop-id.js - dstr/dflt-ary-init-iter-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-get-err-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-init-iter-no-close.js {unsupported: [default-parameters]} - dstr/dflt-ary-name-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elem-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-elision-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-empty-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-rest-iter.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-ary-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-hole.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-complete.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-done.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-null.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elem-obj-val-undef.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-elision-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elem.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-empty.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-ary-rest.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-direct.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-elision-next-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-exhausted.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-step-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-id-iter-val-err.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-init-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-ary.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-not-final-obj.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-id.js {unsupported: [default-parameters]} - dstr/dflt-ary-ptrn-rest-obj-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-init-undefined.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-empty.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-class.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-cover.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-fn.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-fn-name-gen.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-list-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-ary-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-eval-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-get-value-err.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-skipped.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-throws.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-id-trailing-comma.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-init.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-null.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-prop-obj-value-undef.js {unsupported: [default-parameters]} - dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [default-parameters, object-rest]} - dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [default-parameters, object-rest]} + dstr/dflt-ary-init-iter-close.js + dstr/dflt-ary-init-iter-get-err.js + dstr/dflt-ary-init-iter-get-err-array-prototype.js + dstr/dflt-ary-init-iter-no-close.js + dstr/dflt-ary-ptrn-elem-ary-elem-init.js + dstr/dflt-ary-ptrn-elem-ary-elem-iter.js + dstr/dflt-ary-ptrn-elem-ary-elision-init.js + dstr/dflt-ary-ptrn-elem-ary-empty-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-init.js + dstr/dflt-ary-ptrn-elem-ary-rest-iter.js + dstr/dflt-ary-ptrn-elem-ary-val-null.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js + dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js + dstr/dflt-ary-ptrn-elem-id-init-hole.js + dstr/dflt-ary-ptrn-elem-id-init-skipped.js + dstr/dflt-ary-ptrn-elem-id-init-throws.js + dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js + dstr/dflt-ary-ptrn-elem-id-iter-step-err.js + dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js + dstr/dflt-ary-ptrn-elem-id-iter-val-err.js + dstr/dflt-ary-ptrn-elem-obj-id.js + dstr/dflt-ary-ptrn-elem-obj-id-init.js + dstr/dflt-ary-ptrn-elem-obj-prop-id.js + dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js + dstr/dflt-ary-ptrn-elem-obj-val-null.js + dstr/dflt-ary-ptrn-elem-obj-val-undef.js + dstr/dflt-ary-ptrn-elision.js + dstr/dflt-ary-ptrn-elision-step-err.js + dstr/dflt-ary-ptrn-rest-ary-elem.js + dstr/dflt-ary-ptrn-rest-ary-elision.js + dstr/dflt-ary-ptrn-rest-ary-empty.js + dstr/dflt-ary-ptrn-rest-ary-rest.js + dstr/dflt-ary-ptrn-rest-id.js + dstr/dflt-ary-ptrn-rest-id-direct.js + dstr/dflt-ary-ptrn-rest-id-elision.js + dstr/dflt-ary-ptrn-rest-id-elision-next-err.js + dstr/dflt-ary-ptrn-rest-id-exhausted.js + dstr/dflt-ary-ptrn-rest-id-iter-step-err.js + dstr/dflt-ary-ptrn-rest-id-iter-val-err.js + dstr/dflt-ary-ptrn-rest-obj-id.js + dstr/dflt-ary-ptrn-rest-obj-prop-id.js + dstr/dflt-obj-init-null.js + dstr/dflt-obj-init-undefined.js + dstr/dflt-obj-ptrn-id-get-value-err.js + dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js + dstr/dflt-obj-ptrn-id-init-fn-name-class.js + dstr/dflt-obj-ptrn-id-init-fn-name-cover.js + dstr/dflt-obj-ptrn-id-init-fn-name-fn.js + dstr/dflt-obj-ptrn-id-init-fn-name-gen.js + dstr/dflt-obj-ptrn-id-init-skipped.js + dstr/dflt-obj-ptrn-id-init-throws.js + dstr/dflt-obj-ptrn-id-init-unresolvable.js + dstr/dflt-obj-ptrn-list-err.js + dstr/dflt-obj-ptrn-prop-ary.js + dstr/dflt-obj-ptrn-prop-ary-init.js + dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js + dstr/dflt-obj-ptrn-prop-ary-value-null.js + dstr/dflt-obj-ptrn-prop-eval-err.js + dstr/dflt-obj-ptrn-prop-id-get-value-err.js + dstr/dflt-obj-ptrn-prop-id-init-skipped.js + dstr/dflt-obj-ptrn-prop-id-init-throws.js + dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js + dstr/dflt-obj-ptrn-prop-obj.js + dstr/dflt-obj-ptrn-prop-obj-init.js + dstr/dflt-obj-ptrn-prop-obj-value-null.js + dstr/dflt-obj-ptrn-prop-obj-value-undef.js + dstr/dflt-obj-ptrn-rest-getter.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js {unsupported: [object-rest]} + dstr/dflt-obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} dstr/obj-init-null.js dstr/obj-init-undefined.js dstr/obj-ptrn-id-get-value-err.js @@ -7986,7 +7629,6 @@ language/statements/generators 217/266 (81.58%) dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js dstr/obj-ptrn-prop-id-init-unresolvable.js @@ -7999,39 +7641,28 @@ language/statements/generators 217/266 (81.58%) dstr/obj-ptrn-rest-val-obj.js {unsupported: [object-rest]} forbidden-ext/b1 2/2 (100.0%) arguments-with-arguments-fn.js non-strict - arguments-with-arguments-lex.js non-strict array-destructuring-param-strict-body.js cptn-decl.js default-proto.js - dflt-params-abrupt.js {unsupported: [default-parameters]} - dflt-params-arg-val-not-undefined.js {unsupported: [default-parameters]} - dflt-params-arg-val-undefined.js {unsupported: [default-parameters]} - dflt-params-duplicates.js {unsupported: [default-parameters]} - dflt-params-ref-later.js {unsupported: [default-parameters]} - dflt-params-ref-prior.js {unsupported: [default-parameters]} - dflt-params-ref-self.js {unsupported: [default-parameters]} - dflt-params-rest.js {unsupported: [default-parameters]} + dflt-params-abrupt.js + dflt-params-duplicates.js non-strict + dflt-params-ref-later.js + dflt-params-ref-self.js + dflt-params-rest.js dflt-params-trailing-comma.js - eval-var-scope-syntax-err.js {unsupported: [default-parameters]} - generator-created-after-decl-inst.js + eval-var-scope-syntax-err.js non-strict has-instance.js invoke-as-constructor.js - length-dflt.js {unsupported: [default-parameters]} + length-dflt.js object-destructuring-param-strict-body.js - param-dflt-yield.js {unsupported: [default-parameters]} - params-dflt-args-unmapped.js {unsupported: [default-parameters]} - params-dflt-ref-arguments.js {unsupported: [default-parameters]} prototype-own-properties.js prototype-relation-to-function.js prototype-value.js rest-param-strict-body.js restricted-properties.js scope-body-lex-distinct.js non-strict - scope-param-elem-var-close.js non-strict - scope-param-elem-var-open.js non-strict scope-param-rest-elem-var-close.js non-strict scope-param-rest-elem-var-open.js non-strict - scope-paramsbody-var-close.js scope-paramsbody-var-open.js unscopables-with.js non-strict unscopables-with-in-nested-fn.js non-strict @@ -8107,29 +7738,23 @@ language/statements/labeled 15/24 (62.5%) value-yield-non-strict.js non-strict value-yield-non-strict-escaped.js non-strict -language/statements/let 101/145 (69.66%) +language/statements/let 91/145 (62.76%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js - dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js dstr/ary-ptrn-elem-id-iter-val-err.js @@ -8161,17 +7786,13 @@ language/statements/let 101/145 (69.66%) dstr/obj-ptrn-id-init-fn-name-gen.js dstr/obj-ptrn-id-init-skipped.js dstr/obj-ptrn-id-init-throws.js - dstr/obj-ptrn-id-init-unresolvable.js dstr/obj-ptrn-list-err.js dstr/obj-ptrn-prop-ary.js dstr/obj-ptrn-prop-ary-init.js dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js - dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js - dstr/obj-ptrn-prop-id-init-unresolvable.js dstr/obj-ptrn-prop-obj.js dstr/obj-ptrn-prop-obj-init.js dstr/obj-ptrn-prop-obj-value-null.js @@ -8394,29 +8015,23 @@ language/statements/try 113/201 (56.22%) tco-catch-finally.js {unsupported: [tail-call-optimization]} tco-finally.js {unsupported: [tail-call-optimization]} -language/statements/variable 95/178 (53.37%) +language/statements/variable 85/178 (47.75%) dstr/ary-init-iter-close.js dstr/ary-init-iter-get-err.js dstr/ary-init-iter-get-err-array-prototype.js dstr/ary-ptrn-elem-ary-elem-init.js dstr/ary-ptrn-elem-ary-elem-iter.js dstr/ary-ptrn-elem-ary-elision-init.js - dstr/ary-ptrn-elem-ary-elision-iter.js dstr/ary-ptrn-elem-ary-empty-init.js - dstr/ary-ptrn-elem-ary-empty-iter.js dstr/ary-ptrn-elem-ary-rest-init.js dstr/ary-ptrn-elem-ary-rest-iter.js - dstr/ary-ptrn-elem-id-init-exhausted.js dstr/ary-ptrn-elem-id-init-fn-name-arrow.js dstr/ary-ptrn-elem-id-init-fn-name-class.js dstr/ary-ptrn-elem-id-init-fn-name-cover.js dstr/ary-ptrn-elem-id-init-fn-name-fn.js dstr/ary-ptrn-elem-id-init-fn-name-gen.js - dstr/ary-ptrn-elem-id-init-hole.js dstr/ary-ptrn-elem-id-init-skipped.js dstr/ary-ptrn-elem-id-init-throws.js - dstr/ary-ptrn-elem-id-init-undef.js - dstr/ary-ptrn-elem-id-init-unresolvable.js dstr/ary-ptrn-elem-id-iter-step-err.js dstr/ary-ptrn-elem-id-iter-val-array-prototype.js dstr/ary-ptrn-elem-id-iter-val-err.js @@ -8450,17 +8065,13 @@ language/statements/variable 95/178 (53.37%) dstr/obj-ptrn-id-init-fn-name-gen.js dstr/obj-ptrn-id-init-skipped.js dstr/obj-ptrn-id-init-throws.js - dstr/obj-ptrn-id-init-unresolvable.js dstr/obj-ptrn-list-err.js dstr/obj-ptrn-prop-ary.js dstr/obj-ptrn-prop-ary-init.js dstr/obj-ptrn-prop-ary-value-null.js dstr/obj-ptrn-prop-eval-err.js - dstr/obj-ptrn-prop-id-get-value-err.js - dstr/obj-ptrn-prop-id-init.js dstr/obj-ptrn-prop-id-init-skipped.js dstr/obj-ptrn-prop-id-init-throws.js - dstr/obj-ptrn-prop-id-init-unresolvable.js dstr/obj-ptrn-prop-obj.js dstr/obj-ptrn-prop-obj-init.js dstr/obj-ptrn-prop-obj-value-null.js