Index: src/expression-classifier.h |
diff --git a/src/expression-classifier.h b/src/expression-classifier.h |
index 80f5e66fd4fea08d2f648824b1caee9ff4ae65d6..fb45f41fa169368b998aacf33afdeaf33e44ec51 100644 |
--- a/src/expression-classifier.h |
+++ b/src/expression-classifier.h |
@@ -28,19 +28,22 @@ class ExpressionClassifier { |
enum TargetProduction { |
ExpressionProduction = 1 << 0, |
- BindingPatternProduction = 1 << 1, |
- AssignmentPatternProduction = 1 << 2, |
- DistinctFormalParametersProduction = 1 << 3, |
- StrictModeFormalParametersProduction = 1 << 4, |
- StrongModeFormalParametersProduction = 1 << 5, |
- ArrowFormalParametersProduction = 1 << 6, |
- |
+ FormalParameterInitializerProduction = 1 << 1, |
+ BindingPatternProduction = 1 << 2, |
+ AssignmentPatternProduction = 1 << 3, |
+ DistinctFormalParametersProduction = 1 << 4, |
+ StrictModeFormalParametersProduction = 1 << 5, |
+ StrongModeFormalParametersProduction = 1 << 6, |
+ ArrowFormalParametersProduction = 1 << 7, |
+ |
+ ExpressionProductions = |
+ (ExpressionProduction | FormalParameterInitializerProduction), |
PatternProductions = |
(BindingPatternProduction | AssignmentPatternProduction), |
FormalParametersProductions = (DistinctFormalParametersProduction | |
StrictModeFormalParametersProduction | |
StrongModeFormalParametersProduction), |
- StandardProductions = ExpressionProduction | PatternProductions, |
+ StandardProductions = ExpressionProductions | PatternProductions, |
AllProductions = (StandardProductions | FormalParametersProductions | |
ArrowFormalParametersProduction) |
}; |
@@ -65,6 +68,10 @@ class ExpressionClassifier { |
bool is_valid_expression() const { return is_valid(ExpressionProduction); } |
+ bool is_valid_formal_parameter_initializer() const { |
+ return is_valid(FormalParameterInitializerProduction); |
+ } |
+ |
bool is_valid_binding_pattern() const { |
return is_valid(BindingPatternProduction); |
} |
@@ -95,6 +102,10 @@ class ExpressionClassifier { |
const Error& expression_error() const { return expression_error_; } |
+ const Error& formal_parameter_initializer_error() const { |
+ return formal_parameter_initializer_error_; |
+ } |
+ |
const Error& binding_pattern_error() const { return binding_pattern_error_; } |
const Error& assignment_pattern_error() const { |
@@ -135,6 +146,16 @@ class ExpressionClassifier { |
expression_error_.arg = arg; |
} |
+ void RecordFormalParameterInitializerError(const Scanner::Location& loc, |
+ MessageTemplate::Template message, |
+ const char* arg = nullptr) { |
+ if (!is_valid_formal_parameter_initializer()) return; |
+ invalid_productions_ |= FormalParameterInitializerProduction; |
+ formal_parameter_initializer_error_.location = loc; |
+ formal_parameter_initializer_error_.message = message; |
+ formal_parameter_initializer_error_.arg = arg; |
+ } |
+ |
void RecordBindingPatternError(const Scanner::Location& loc, |
MessageTemplate::Template message, |
const char* arg = nullptr) { |
@@ -212,6 +233,9 @@ class ExpressionClassifier { |
invalid_productions_ |= errors; |
if (errors & ExpressionProduction) |
expression_error_ = inner.expression_error_; |
+ if (errors & FormalParameterInitializerProduction) |
+ formal_parameter_initializer_error_ = |
+ inner.formal_parameter_initializer_error_; |
if (errors & BindingPatternProduction) |
binding_pattern_error_ = inner.binding_pattern_error_; |
if (errors & AssignmentPatternProduction) |
@@ -246,6 +270,7 @@ class ExpressionClassifier { |
unsigned invalid_productions_; |
unsigned function_properties_; |
Error expression_error_; |
+ Error formal_parameter_initializer_error_; |
Error binding_pattern_error_; |
Error assignment_pattern_error_; |
Error arrow_formal_parameters_error_; |