diff --git a/src/com/google/javascript/jscomp/AmbiguateProperties.java b/src/com/google/javascript/jscomp/AmbiguateProperties.java index 783807fc043..cef5ba34f34 100644 --- a/src/com/google/javascript/jscomp/AmbiguateProperties.java +++ b/src/com/google/javascript/jscomp/AmbiguateProperties.java @@ -569,8 +569,10 @@ private void processObjectLitOrPattern(Node objectLit) { } break; + case REST: case ITER_REST: case OBJECT_REST: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: break; // Nothing to do. diff --git a/src/com/google/javascript/jscomp/AnalyzePrototypeProperties.java b/src/com/google/javascript/jscomp/AnalyzePrototypeProperties.java index 06e11239e7c..53f1f299438 100644 --- a/src/com/google/javascript/jscomp/AnalyzePrototypeProperties.java +++ b/src/com/google/javascript/jscomp/AnalyzePrototypeProperties.java @@ -292,8 +292,10 @@ public void visit(NodeTraversal t, Node n, Node parent) { for (Node propNode = n.getFirstChild(); propNode != null; propNode = propNode.getNext()) { switch (propNode.getToken()) { case COMPUTED_PROP: + case REST: case ITER_REST: case OBJECT_REST: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: break; diff --git a/src/com/google/javascript/jscomp/AstAnalyzer.java b/src/com/google/javascript/jscomp/AstAnalyzer.java index 07b8faa372f..b5a4410ee73 100644 --- a/src/com/google/javascript/jscomp/AstAnalyzer.java +++ b/src/com/google/javascript/jscomp/AstAnalyzer.java @@ -261,8 +261,10 @@ private boolean checkForStateChangeHelper(Node n, boolean checkForNewObjects) { } break; + case REST: case ITER_REST: case OBJECT_REST: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: if (parent.isObjectPattern() || parent.isObjectLit()) { @@ -506,8 +508,10 @@ boolean nodeTypeMayHaveSideEffects(Node n) { // A variable definition. // TODO(b/129564961): Consider EXPORT declarations. return n.hasChildren(); + case REST: case ITER_REST: case OBJECT_REST: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: if (n.getParent().isObjectPattern() || n.getParent().isObjectLit()) { diff --git a/src/com/google/javascript/jscomp/AstValidator.java b/src/com/google/javascript/jscomp/AstValidator.java index b14bd297e44..f3059be6a5c 100644 --- a/src/com/google/javascript/jscomp/AstValidator.java +++ b/src/com/google/javascript/jscomp/AstValidator.java @@ -982,6 +982,7 @@ private void validateCall(Node n) { validateMinimumChildCount(n, 1); for (Node c = n.getFirstChild(); c != null; c = c.getNext()) { switch (c.getToken()) { + case SPREAD: case ITER_SPREAD: validateSpread(c); break; @@ -1014,6 +1015,7 @@ private void validateObjectPatternRest(Token contextType, Node n) { */ private void validateRest(Token contextType, Node n) { switch (n.getToken()) { + case REST: case ITER_REST: case OBJECT_REST: break; @@ -1030,6 +1032,7 @@ private void validateRest(Token contextType, Node n) { private void validateSpread(Node n) { switch (n.getToken()) { + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: break; @@ -1064,6 +1067,7 @@ private void validateNew(Node n) { validateMinimumChildCount(n, 1); for (Node c = n.getFirstChild(); c != null; c = c.getNext()) { switch (c.getToken()) { + case SPREAD: case ITER_SPREAD: validateSpread(c); break; @@ -1175,6 +1179,7 @@ private void validateArrayPattern(Token type, Node n) { case DEFAULT_VALUE: validateDefaultValue(type, c); break; + case REST: case ITER_REST: validateArrayPatternRest(type, c); break; @@ -1195,6 +1200,7 @@ private void validateObjectPattern(Token type, Node n) { case STRING_KEY: validateObjectPatternStringKey(type, c); break; + case REST: case OBJECT_REST: validateObjectPatternRest(type, c); break; @@ -1499,6 +1505,7 @@ private void validateArrayLit(Node n) { validateNodeType(Token.ARRAYLIT, n); for (Node c = n.getFirstChild(); c != null; c = c.getNext()) { switch (c.getToken()) { + case SPREAD: case ITER_SPREAD: validateSpread(c); break; @@ -1537,6 +1544,7 @@ private void validateObjectLitKey(Node n) { case COMPUTED_PROP: validateObjectLitComputedPropKey(n); return; + case SPREAD: case OBJECT_SPREAD: validateSpread(n); return; diff --git a/src/com/google/javascript/jscomp/CodeGenerator.java b/src/com/google/javascript/jscomp/CodeGenerator.java index 2192835477f..63070ccea64 100644 --- a/src/com/google/javascript/jscomp/CodeGenerator.java +++ b/src/com/google/javascript/jscomp/CodeGenerator.java @@ -404,6 +404,7 @@ protected void add(Node n, Context context) { } break; } + case REST: case ITER_REST: case OBJECT_REST: add("..."); @@ -411,6 +412,7 @@ protected void add(Node n, Context context) { maybeAddTypeDecl(n); break; + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: add("..."); diff --git a/src/com/google/javascript/jscomp/CollapseProperties.java b/src/com/google/javascript/jscomp/CollapseProperties.java index 532d316b9f8..b029c35d8bb 100644 --- a/src/com/google/javascript/jscomp/CollapseProperties.java +++ b/src/com/google/javascript/jscomp/CollapseProperties.java @@ -806,6 +806,7 @@ private void declareVariablesForObjLitValues( case GETTER_DEF: case SETTER_DEF: case COMPUTED_PROP: + case SPREAD: case OBJECT_SPREAD: continue; case STRING_KEY: diff --git a/src/com/google/javascript/jscomp/CrossChunkReferenceCollector.java b/src/com/google/javascript/jscomp/CrossChunkReferenceCollector.java index d53d93113e6..c7b9e882015 100644 --- a/src/com/google/javascript/jscomp/CrossChunkReferenceCollector.java +++ b/src/com/google/javascript/jscomp/CrossChunkReferenceCollector.java @@ -384,6 +384,7 @@ private boolean canMoveValue(Scope scope, Node valueNode) { break; case STRING_KEY: + case SPREAD: case OBJECT_SPREAD: if (!canMoveValue(scope, child.getOnlyChild())) { return false; diff --git a/src/com/google/javascript/jscomp/DestructuredTarget.java b/src/com/google/javascript/jscomp/DestructuredTarget.java index 9ab7e9e1b73..0d4f3275574 100644 --- a/src/com/google/javascript/jscomp/DestructuredTarget.java +++ b/src/com/google/javascript/jscomp/DestructuredTarget.java @@ -210,6 +210,7 @@ static DestructuredTarget createTarget( builder.setDefaultValue(destructuringChild.getSecondChild()); break; + case REST: case ITER_REST: case OBJECT_REST: // const [...x] = ... diff --git a/src/com/google/javascript/jscomp/DisambiguateProperties.java b/src/com/google/javascript/jscomp/DisambiguateProperties.java index 06ff0db8d69..4face892c4a 100644 --- a/src/com/google/javascript/jscomp/DisambiguateProperties.java +++ b/src/com/google/javascript/jscomp/DisambiguateProperties.java @@ -553,6 +553,7 @@ private void handleObjectLit(Node n) { switch (child.getToken()) { case COMPUTED_PROP: // These won't be renamed due to our assumptions. Ignore them. + case SPREAD: case OBJECT_SPREAD: // Ignore properties added via spread. All properties accessed from object literals are // invalidated regardless, so we don't have to explicitly do that here. Additionally, diff --git a/src/com/google/javascript/jscomp/Es6RewriteRestAndSpread.java b/src/com/google/javascript/jscomp/Es6RewriteRestAndSpread.java index bd4470d3a7d..3c3166a4b39 100644 --- a/src/com/google/javascript/jscomp/Es6RewriteRestAndSpread.java +++ b/src/com/google/javascript/jscomp/Es6RewriteRestAndSpread.java @@ -100,6 +100,7 @@ public void hotSwapScript(Node scriptRoot, Node originalRoot) { @Override public void visit(NodeTraversal traversal, Node current, Node parent) { switch (current.getToken()) { + case REST: case ITER_REST: visitRestParam(traversal, current, parent); break; diff --git a/src/com/google/javascript/jscomp/Es6TypedToEs6Converter.java b/src/com/google/javascript/jscomp/Es6TypedToEs6Converter.java index 4aa349901bf..948fd3757f7 100644 --- a/src/com/google/javascript/jscomp/Es6TypedToEs6Converter.java +++ b/src/com/google/javascript/jscomp/Es6TypedToEs6Converter.java @@ -159,6 +159,7 @@ public void visit(NodeTraversal t, Node n, Node parent) { case NAME: maybeVisitColonType(t, n, n); break; + case REST: case ITER_REST: case OBJECT_REST: maybeVisitColonType(t, n, n.getOnlyChild()); diff --git a/src/com/google/javascript/jscomp/GlobalNamespace.java b/src/com/google/javascript/jscomp/GlobalNamespace.java index d287b5115cd..1ba4951a19d 100644 --- a/src/com/google/javascript/jscomp/GlobalNamespace.java +++ b/src/com/google/javascript/jscomp/GlobalNamespace.java @@ -405,6 +405,7 @@ private void collect(JSModule module, Scope scope, Node n) { case ARRAY_PATTERN: case DEFAULT_VALUE: case COMPUTED_PROP: + case REST: case ITER_REST: case OBJECT_REST: // This may be a set. @@ -413,6 +414,7 @@ private void collect(JSModule module, Scope scope, Node n) { type = Name.Type.OTHER; } break; + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: break; // isSet = false, type = OTHER. @@ -443,6 +445,7 @@ private void collect(JSModule module, Scope scope, Node n) { return; case INC: case DEC: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: break; // isSet = false, type = OTHER. @@ -784,6 +787,7 @@ void handleGet(JSModule module, Scope scope, Node n, Node parent, String name) { break; case OBJECT_PATTERN: // Handle STRING_KEYS in object patterns. + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: default: diff --git a/src/com/google/javascript/jscomp/InlineObjectLiterals.java b/src/com/google/javascript/jscomp/InlineObjectLiterals.java index 70337f6f124..790077f13b4 100644 --- a/src/com/google/javascript/jscomp/InlineObjectLiterals.java +++ b/src/com/google/javascript/jscomp/InlineObjectLiterals.java @@ -237,6 +237,7 @@ private boolean isInlinableObject(List refs) { case COMPUTED_PROP: // Spread can overwrite any preceding prop if there are matching keys. // TODO(b/126567617): Allow inlining props declared after the SPREAD. + case SPREAD: case OBJECT_SPREAD: return false; diff --git a/src/com/google/javascript/jscomp/MethodCompilerPass.java b/src/com/google/javascript/jscomp/MethodCompilerPass.java index 8a198c64fe6..9e477e648a1 100644 --- a/src/com/google/javascript/jscomp/MethodCompilerPass.java +++ b/src/com/google/javascript/jscomp/MethodCompilerPass.java @@ -212,6 +212,7 @@ public void visit(NodeTraversal t, Node n, Node parent) { nonMethodProperties.add(key.getString()); break; case COMPUTED_PROP: // complicated + case SPREAD: case OBJECT_SPREAD: break; default: diff --git a/src/com/google/javascript/jscomp/NodeUtil.java b/src/com/google/javascript/jscomp/NodeUtil.java index 7e52f18abf2..43be81ae19f 100644 --- a/src/com/google/javascript/jscomp/NodeUtil.java +++ b/src/com/google/javascript/jscomp/NodeUtil.java @@ -704,6 +704,7 @@ public static boolean isLiteralValue(Node n, boolean includeFunctions) { } break; + case SPREAD: case OBJECT_SPREAD: if (!isLiteralValue(child.getOnlyChild(), includeFunctions)) { return false; @@ -1044,6 +1045,7 @@ static boolean iteratesImpureIterable(Node node) { final Node iterable; switch (node.getToken()) { + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: switch (parent.getToken()) { @@ -1072,6 +1074,7 @@ static boolean iteratesImpureIterable(Node node) { iterable = node.getSecondChild(); break; + case REST: case ITER_REST: case OBJECT_REST: switch (parent.getToken()) { @@ -1275,8 +1278,10 @@ public static int precedence(Token type) { case OBJECTLIT: case OBJECT_PATTERN: case REGEXP: + case REST: case ITER_REST: case OBJECT_REST: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: case STRING: @@ -2910,6 +2915,7 @@ public static boolean isLValue(Node n) { case VAR: case LET: case CONST: + case REST: case ITER_REST: case OBJECT_REST: case PARAM_LIST: @@ -3198,6 +3204,7 @@ private static boolean isLhsByDestructuringHelper(Node n) { switch (parent.getToken()) { case ARRAY_PATTERN: // `b` in `var [b] = ...` + case REST: case ITER_REST: case OBJECT_REST: // `b` in `var [...b] = ...` return true; @@ -3850,6 +3857,7 @@ private static void getLhsNodesHelper(Node n, List lhsNodes) { case DESTRUCTURING_LHS: case DEFAULT_VALUE: case CATCH: + case REST: case ITER_REST: case OBJECT_REST: case CAST: @@ -4748,6 +4756,7 @@ static boolean evaluatesToLocalValue(Node value) { return true; case CAST: return evaluatesToLocalValue(value.getFirstChild()); + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: // TODO(johnlenz): remove this case. diff --git a/src/com/google/javascript/jscomp/OptimizeArgumentsArray.java b/src/com/google/javascript/jscomp/OptimizeArgumentsArray.java index bfcbbd045f7..66aace0b710 100644 --- a/src/com/google/javascript/jscomp/OptimizeArgumentsArray.java +++ b/src/com/google/javascript/jscomp/OptimizeArgumentsArray.java @@ -285,6 +285,7 @@ private ImmutableSortedMap assembleParamNames(Node paramList, i builder.put(index, param.getString()); break; + case REST: case ITER_REST: return builder.build(); diff --git a/src/com/google/javascript/jscomp/OptimizeCalls.java b/src/com/google/javascript/jscomp/OptimizeCalls.java index 35370e700ee..fd458b4e506 100644 --- a/src/com/google/javascript/jscomp/OptimizeCalls.java +++ b/src/com/google/javascript/jscomp/OptimizeCalls.java @@ -421,7 +421,9 @@ public void visit(NodeTraversal t, Node n, Node unused) { case GETELEM: // Ignore quoted keys. // TODO(johnlenz): support symbols. + case REST: case OBJECT_REST: + case SPREAD: case OBJECT_SPREAD: // Don't worry about invisible accesses using these. To be invoked there would need to be // downstream references that use the actual name. We'd see those. diff --git a/src/com/google/javascript/jscomp/OptimizeParameters.java b/src/com/google/javascript/jscomp/OptimizeParameters.java index 6045726dfae..620154bad0d 100644 --- a/src/com/google/javascript/jscomp/OptimizeParameters.java +++ b/src/com/google/javascript/jscomp/OptimizeParameters.java @@ -796,6 +796,7 @@ private static boolean isMovableValue(Node n, Scope globalScope) { switch (n.getToken()) { case THIS: case SUPER: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: return false; diff --git a/src/com/google/javascript/jscomp/PeepholeFoldConstants.java b/src/com/google/javascript/jscomp/PeepholeFoldConstants.java index 684c2be7919..1d5a6530667 100644 --- a/src/com/google/javascript/jscomp/PeepholeFoldConstants.java +++ b/src/com/google/javascript/jscomp/PeepholeFoldConstants.java @@ -1521,6 +1521,7 @@ private Node tryFoldObjectPropAccess(Node n, Node left, Node right) { Node value = null; for (Node c = left.getFirstChild(); c != null; c = c.getNext()) { switch (c.getToken()) { + case SPREAD: case OBJECT_SPREAD: // Reset the search because spread could overwrite any previous result. key = null; diff --git a/src/com/google/javascript/jscomp/PeepholeRemoveDeadCode.java b/src/com/google/javascript/jscomp/PeepholeRemoveDeadCode.java index 86a5b33a2cf..df5fc06e071 100644 --- a/src/com/google/javascript/jscomp/PeepholeRemoveDeadCode.java +++ b/src/com/google/javascript/jscomp/PeepholeRemoveDeadCode.java @@ -450,6 +450,7 @@ private boolean trySimplifyUnusedResultInternal(Node tree, ArrayDeque side */ private static Node asDetachedExpression(Node expr) { switch (expr.getToken()) { + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: switch (expr.getParent().getToken()) { diff --git a/src/com/google/javascript/jscomp/PureFunctionIdentifier.java b/src/com/google/javascript/jscomp/PureFunctionIdentifier.java index 1af7343c779..3ac8fb54576 100644 --- a/src/com/google/javascript/jscomp/PureFunctionIdentifier.java +++ b/src/com/google/javascript/jscomp/PureFunctionIdentifier.java @@ -804,8 +804,10 @@ private void updateSideEffectsForNode( deprecatedSetSideEffectsForControlLoss(encloserSummary); break; + case REST: case ITER_REST: case OBJECT_REST: + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: if (node.getParent().isObjectPattern() || node.getParent().isObjectLit()) { diff --git a/src/com/google/javascript/jscomp/Reference.java b/src/com/google/javascript/jscomp/Reference.java index d71df5ccd94..c8f303631d5 100644 --- a/src/com/google/javascript/jscomp/Reference.java +++ b/src/com/google/javascript/jscomp/Reference.java @@ -216,6 +216,7 @@ public boolean isLvalue() { case INC: case DEC: case CATCH: + case REST: case ITER_REST: case OBJECT_REST: case PARAM_LIST: diff --git a/src/com/google/javascript/jscomp/RemoveUnusedCode.java b/src/com/google/javascript/jscomp/RemoveUnusedCode.java index 8bb768cafd8..75e3c29e150 100644 --- a/src/com/google/javascript/jscomp/RemoveUnusedCode.java +++ b/src/com/google/javascript/jscomp/RemoveUnusedCode.java @@ -1074,6 +1074,7 @@ private void traverseIndirectAssignmentList(Node list, Scope scope) { traverseIndirectAssignment(elem, elem, scope); break; + case REST: case ITER_REST: case OBJECT_REST: traverseIndirectAssignment(elem, elem.getOnlyChild(), scope); @@ -1480,6 +1481,7 @@ private static Node nameOfParam(Node param) { return param; case DEFAULT_VALUE: return nameOfParam(param.getFirstChild()); + case REST: case ITER_REST: return nameOfParam(param.getOnlyChild()); case ARRAY_PATTERN: diff --git a/src/com/google/javascript/jscomp/RenameProperties.java b/src/com/google/javascript/jscomp/RenameProperties.java index c36c669ae37..95957f3605a 100644 --- a/src/com/google/javascript/jscomp/RenameProperties.java +++ b/src/com/google/javascript/jscomp/RenameProperties.java @@ -351,7 +351,9 @@ public void visit(NodeTraversal t, Node n, Node parent) { for (Node key = n.getFirstChild(); key != null; key = key.getNext()) { switch (key.getToken()) { case COMPUTED_PROP: // We don't want to rename computed properties + case REST: case OBJECT_REST: + case SPREAD: case OBJECT_SPREAD: break; diff --git a/src/com/google/javascript/jscomp/RuntimeTypeCheck.java b/src/com/google/javascript/jscomp/RuntimeTypeCheck.java index a2468cfee97..4c1105d02c9 100644 --- a/src/com/google/javascript/jscomp/RuntimeTypeCheck.java +++ b/src/com/google/javascript/jscomp/RuntimeTypeCheck.java @@ -446,6 +446,7 @@ private static void paramNamesOf(Node node, ImmutableList.Builder names) { names.add(node); break; + case REST: case OBJECT_REST: case ITER_REST: case DEFAULT_VALUE: diff --git a/src/com/google/javascript/jscomp/TypeCheck.java b/src/com/google/javascript/jscomp/TypeCheck.java index d4ce335cac9..dbf84b6a97e 100644 --- a/src/com/google/javascript/jscomp/TypeCheck.java +++ b/src/com/google/javascript/jscomp/TypeCheck.java @@ -920,6 +920,7 @@ public void visit(NodeTraversal t, Node n, Node parent) { case WHILE: case FOR: case TEMPLATELIT_SUB: + case REST: case ITER_REST: case OBJECT_REST: case DESTRUCTURING_LHS: diff --git a/src/com/google/javascript/jscomp/TypeInference.java b/src/com/google/javascript/jscomp/TypeInference.java index 75a732d2672..e98d527381d 100644 --- a/src/com/google/javascript/jscomp/TypeInference.java +++ b/src/com/google/javascript/jscomp/TypeInference.java @@ -725,6 +725,7 @@ private FlowScope traverse(Node n, FlowScope scope) { traverseSuper(n); break; + case SPREAD: case ITER_SPREAD: case OBJECT_SPREAD: // The spread itself has no type, but the expression it contains does and may affect diff --git a/src/com/google/javascript/jscomp/TypedScopeCreator.java b/src/com/google/javascript/jscomp/TypedScopeCreator.java index 18c474ff0fb..02f795dcfb5 100644 --- a/src/com/google/javascript/jscomp/TypedScopeCreator.java +++ b/src/com/google/javascript/jscomp/TypedScopeCreator.java @@ -2179,6 +2179,7 @@ private TypedScope getLValueRootScope(Node n) { case CATCH: return currentScope; + case REST: case ITER_REST: case OBJECT_REST: // TODO(bradfordcsmith): Handle array destructuring REST @@ -3219,6 +3220,7 @@ private void declareNamesInPositionalParameter( declareSingleParameterName(isInferred, astParameter, paramType); break; + case REST: case ITER_REST: // function f(...x) {} // rest parameter is actually an array of the type specified in the JSDoc Node param = astParameter.getFirstChild(); diff --git a/src/com/google/javascript/jscomp/VarCheck.java b/src/com/google/javascript/jscomp/VarCheck.java index f07782091ed..2437b5cbb62 100644 --- a/src/com/google/javascript/jscomp/VarCheck.java +++ b/src/com/google/javascript/jscomp/VarCheck.java @@ -463,6 +463,7 @@ public void visit(NodeTraversal t, Node n, Node parent) { case CLASS: case PARAM_LIST: case DEFAULT_VALUE: + case REST: case ITER_REST: case OBJECT_REST: case ARRAY_PATTERN: diff --git a/src/com/google/javascript/rhino/IR.java b/src/com/google/javascript/rhino/IR.java index 244e2f17fd4..128db8badda 100644 --- a/src/com/google/javascript/rhino/IR.java +++ b/src/com/google/javascript/rhino/IR.java @@ -89,8 +89,17 @@ public static Node arrowFunction(Node name, Node params, Node body) { return func; } + public static Node paramList() { + return new Node(Token.PARAM_LIST); + } + + public static Node paramList(Node param) { + checkState(param.isName() || param.isRest()); + return new Node(Token.PARAM_LIST, param); + } + public static Node paramList(Node... params) { - Node paramList = new Node(Token.PARAM_LIST); + Node paramList = paramList(); for (Node param : params) { checkState(param.isName() || param.isRest()); paramList.addChildToBack(param); @@ -623,6 +632,12 @@ public static Node quotedStringKey(String s, Node value) { return k; } + @Deprecated + public static Node rest(Node target) { + checkState(target.isValidAssignmentTarget(), target); + return new Node(Token.ITER_REST, target); + } + public static Node iterRest(Node target) { checkState(target.isValidAssignmentTarget(), target); return new Node(Token.ITER_REST, target); diff --git a/src/com/google/javascript/rhino/Node.java b/src/com/google/javascript/rhino/Node.java index f620cd9d1fe..f4a9887a402 100644 --- a/src/com/google/javascript/rhino/Node.java +++ b/src/com/google/javascript/rhino/Node.java @@ -3429,7 +3429,14 @@ public final boolean isRegExp() { } public final boolean isRest() { - return this.token == Token.ITER_REST || this.token == Token.OBJECT_REST; + switch (this.token) { + case REST: + case ITER_REST: + case OBJECT_REST: + return true; + default: + return false; + } } public final boolean isReturn() { @@ -3445,7 +3452,14 @@ public final boolean isSetterDef() { } public final boolean isSpread() { - return this.token == Token.ITER_SPREAD || this.token == Token.OBJECT_SPREAD; + switch (this.token) { + case SPREAD: + case ITER_SPREAD: + case OBJECT_SPREAD: + return true; + default: + return false; + } } public final boolean isString() { diff --git a/src/com/google/javascript/rhino/Token.java b/src/com/google/javascript/rhino/Token.java index 4569f12a8c4..fa520911db3 100644 --- a/src/com/google/javascript/rhino/Token.java +++ b/src/com/google/javascript/rhino/Token.java @@ -181,8 +181,10 @@ public enum Token { MODULE_BODY, DYNAMIC_IMPORT, + REST, // TODO(b/128706030): Delete REST. ITER_REST, // Rests that use the iterator protocol. OBJECT_REST, // Rests that get object properties. + SPREAD, // TODO(b/128706030): Delete SPREAD. ITER_SPREAD, // Spreads that use the iterator protocol. OBJECT_SPREAD, // Spreads that get object properties. diff --git a/src/com/google/javascript/rhino/TypeDeclarationsIR.java b/src/com/google/javascript/rhino/TypeDeclarationsIR.java index ac5ea1cf0d2..50465291fdc 100644 --- a/src/com/google/javascript/rhino/TypeDeclarationsIR.java +++ b/src/com/google/javascript/rhino/TypeDeclarationsIR.java @@ -205,7 +205,7 @@ public static TypeDeclarationNode functionType( } if (restName != null) { - Node rest = new Node(Token.ITER_REST, IR.name(restName)); + Node rest = new Node(Token.REST, IR.name(restName)); node.addChildToBack(maybeAddType(rest, restType)); } return node;