| Index: src/expression-classifier.h
|
| diff --git a/src/expression-classifier.h b/src/expression-classifier.h
|
| index af761fb2bf66d74d0ab4ab031af8e8e32a7f8d37..6edb99e8388427514f662f312c6341935150edac 100644
|
| --- a/src/expression-classifier.h
|
| +++ b/src/expression-classifier.h
|
| @@ -119,222 +119,6 @@ class ExpressionClassifier {
|
| if (!is_valid_expression()) return;
|
| invalid_productions_ |= ExpressionProduction;
|
| expression_error_.location = loc;
|
| - class ExpressionClassifier {
|
| - public:
|
| - struct Error {
|
| - Error()
|
| - : location(Scanner::Location::invalid()),
|
| - message(MessageTemplate::kNone),
|
| - arg(nullptr) {}
|
| -
|
| - Scanner::Location location;
|
| - MessageTemplate::Template message;
|
| - const char* arg;
|
| -
|
| - bool HasError() const { return location.IsValid(); }
|
| - };
|
| -
|
| - ExpressionClassifier() : duplicate_finder_(nullptr) {}
|
| -
|
| - explicit ExpressionClassifier(DuplicateFinder* duplicate_finder)
|
| - : duplicate_finder_(duplicate_finder) {}
|
| -
|
| - DuplicateFinder* duplicate_finder() const { return duplicate_finder_; }
|
| -
|
| - bool is_valid_expression() const { return !expression_error_.HasError(); }
|
| -
|
| - bool is_valid_binding_pattern() const {
|
| - return !binding_pattern_error_.HasError();
|
| - }
|
| -
|
| - bool is_valid_assignment_pattern() const {
|
| - return !assignment_pattern_error_.HasError();
|
| - }
|
| -
|
| - bool is_valid_arrow_formal_parameters() const {
|
| - return !arrow_formal_parameters_error_.HasError();
|
| - }
|
| -
|
| - bool is_valid_formal_parameter_list_without_duplicates() const {
|
| - return !duplicate_formal_parameter_error_.HasError();
|
| - }
|
| -
|
| - // Note: callers should also check
|
| - // is_valid_formal_parameter_list_without_duplicates().
|
| - bool is_valid_strict_mode_formal_parameters() const {
|
| - return !strict_mode_formal_parameter_error_.HasError();
|
| - }
|
| -
|
| - // Note: callers should also check
|
| - // is_valid_strict_mode_formal_parameters()
|
| - // and is_valid_formal_parameter_list_without_duplicates().
|
| - bool is_valid_strong_mode_formal_parameters() const {
|
| - return !strong_mode_formal_parameter_error_.HasError();
|
| - }
|
| -
|
| - const Error& expression_error() const { return expression_error_; }
|
| -
|
| - const Error& binding_pattern_error() const {
|
| - return binding_pattern_error_;
|
| - }
|
| -
|
| - const Error& assignment_pattern_error() const {
|
| - return assignment_pattern_error_;
|
| - }
|
| -
|
| - const Error& arrow_formal_parameters_error() const {
|
| - return arrow_formal_parameters_error_;
|
| - }
|
| -
|
| - const Error& duplicate_formal_parameter_error() const {
|
| - return duplicate_formal_parameter_error_;
|
| - }
|
| -
|
| - const Error& strict_mode_formal_parameter_error() const {
|
| - return strict_mode_formal_parameter_error_;
|
| - }
|
| -
|
| - const Error& strong_mode_formal_parameter_error() const {
|
| - return strong_mode_formal_parameter_error_;
|
| - }
|
| -
|
| - void RecordExpressionError(const Scanner::Location& loc,
|
| - MessageTemplate::Template message,
|
| - const char* arg = nullptr) {
|
| - if (!is_valid_expression()) return;
|
| - expression_error_.location = loc;
|
| - expression_error_.message = message;
|
| - expression_error_.arg = arg;
|
| - }
|
| -
|
| - void RecordBindingPatternError(const Scanner::Location& loc,
|
| - MessageTemplate::Template message,
|
| - const char* arg = nullptr) {
|
| - if (!is_valid_binding_pattern()) return;
|
| - binding_pattern_error_.location = loc;
|
| - binding_pattern_error_.message = message;
|
| - binding_pattern_error_.arg = arg;
|
| - }
|
| -
|
| - void RecordAssignmentPatternError(const Scanner::Location& loc,
|
| - MessageTemplate::Template message,
|
| - const char* arg = nullptr) {
|
| - if (!is_valid_assignment_pattern()) return;
|
| - assignment_pattern_error_.location = loc;
|
| - assignment_pattern_error_.message = message;
|
| - assignment_pattern_error_.arg = arg;
|
| - }
|
| -
|
| - void RecordArrowFormalParametersError(const Scanner::Location& loc,
|
| - MessageTemplate::Template message,
|
| - const char* arg = nullptr) {
|
| - if (!is_valid_arrow_formal_parameters()) return;
|
| - arrow_formal_parameters_error_.location = loc;
|
| - arrow_formal_parameters_error_.message = message;
|
| - arrow_formal_parameters_error_.arg = arg;
|
| - }
|
| -
|
| - void RecordDuplicateFormalParameterError(const Scanner::Location& loc) {
|
| - if (!is_valid_formal_parameter_list_without_duplicates()) return;
|
| - duplicate_formal_parameter_error_.location = loc;
|
| - duplicate_formal_parameter_error_.message =
|
| - MessageTemplate::kStrictParamDupe;
|
| - duplicate_formal_parameter_error_.arg = nullptr;
|
| - }
|
| -
|
| - // Record a binding that would be invalid in strict mode. Confusingly
|
| - // this
|
| - // is not the same as StrictFormalParameterList, which simply forbids
|
| - // duplicate bindings.
|
| - void RecordStrictModeFormalParameterError(
|
| - const Scanner::Location& loc, MessageTemplate::Template message,
|
| - const char* arg = nullptr) {
|
| - if (!is_valid_strict_mode_formal_parameters()) return;
|
| - strict_mode_formal_parameter_error_.location = loc;
|
| - strict_mode_formal_parameter_error_.message = message;
|
| - strict_mode_formal_parameter_error_.arg = arg;
|
| - }
|
| -
|
| - void RecordStrongModeFormalParameterError(
|
| - const Scanner::Location& loc, MessageTemplate::Template message,
|
| - const char* arg = nullptr) {
|
| - if (!is_valid_strong_mode_formal_parameters()) return;
|
| - strong_mode_formal_parameter_error_.location = loc;
|
| - strong_mode_formal_parameter_error_.message = message;
|
| - strong_mode_formal_parameter_error_.arg = arg;
|
| - }
|
| -
|
| - enum TargetProduction {
|
| - ExpressionProduction = 1 << 0,
|
| - BindingPatternProduction = 1 << 1,
|
| - AssignmentPatternProduction = 1 << 2,
|
| - FormalParametersProduction = 1 << 3,
|
| - ArrowFormalParametersProduction = 1 << 4,
|
| - StandardProductions = (ExpressionProduction | BindingPatternProduction |
|
| - AssignmentPatternProduction),
|
| - PatternProductions =
|
| - BindingPatternProduction | AssignmentPatternProduction,
|
| - AllProductions = (StandardProductions | FormalParametersProduction |
|
| - ArrowFormalParametersProduction),
|
| - };
|
| -
|
| - void Accumulate(const ExpressionClassifier& inner,
|
| - unsigned productions = StandardProductions) {
|
| - if (productions & ExpressionProduction && is_valid_expression()) {
|
| - expression_error_ = inner.expression_error_;
|
| - }
|
| - if (productions & BindingPatternProduction &&
|
| - is_valid_binding_pattern()) {
|
| - binding_pattern_error_ = inner.binding_pattern_error_;
|
| - }
|
| - if (productions & AssignmentPatternProduction &&
|
| - is_valid_assignment_pattern()) {
|
| - assignment_pattern_error_ = inner.assignment_pattern_error_;
|
| - }
|
| - if (productions & FormalParametersProduction) {
|
| - if (is_valid_formal_parameter_list_without_duplicates()) {
|
| - duplicate_formal_parameter_error_ =
|
| - inner.duplicate_formal_parameter_error_;
|
| - }
|
| - if (is_valid_strict_mode_formal_parameters()) {
|
| - strict_mode_formal_parameter_error_ =
|
| - inner.strict_mode_formal_parameter_error_;
|
| - }
|
| - if (is_valid_strong_mode_formal_parameters()) {
|
| - strong_mode_formal_parameter_error_ =
|
| - inner.strong_mode_formal_parameter_error_;
|
| - }
|
| - }
|
| - if (productions & ArrowFormalParametersProduction &&
|
| - is_valid_arrow_formal_parameters()) {
|
| - // The result continues to be a valid arrow formal parameters if the
|
| - // inner expression is a valid binding pattern.
|
| - arrow_formal_parameters_error_ = inner.binding_pattern_error_;
|
| - }
|
| - }
|
| -
|
| - void AccumulateReclassifyingAsPattern(const ExpressionClassifier& inner) {
|
| - Accumulate(inner, AllProductions & ~PatternProductions);
|
| - if (!inner.is_valid_expression()) {
|
| - if (is_valid_binding_pattern()) {
|
| - binding_pattern_error_ = inner.expression_error();
|
| - }
|
| - if (is_valid_assignment_pattern()) {
|
| - assignment_pattern_error_ = inner.expression_error();
|
| - }
|
| - }
|
| - }
|
| -
|
| - private:
|
| - Error expression_error_;
|
| - Error binding_pattern_error_;
|
| - Error assignment_pattern_error_;
|
| - Error arrow_formal_parameters_error_;
|
| - Error duplicate_formal_parameter_error_;
|
| - Error strict_mode_formal_parameter_error_;
|
| - Error strong_mode_formal_parameter_error_;
|
| - DuplicateFinder* duplicate_finder_;
|
| - };
|
| expression_error_.message = message;
|
| expression_error_.arg = arg;
|
| }
|
|
|