diff options
Diffstat (limited to 'deps/v8/src/parsing/preparser.h')
-rw-r--r-- | deps/v8/src/parsing/preparser.h | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/deps/v8/src/parsing/preparser.h b/deps/v8/src/parsing/preparser.h index b4d66d726f..adc3d09cac 100644 --- a/deps/v8/src/parsing/preparser.h +++ b/deps/v8/src/parsing/preparser.h @@ -1108,9 +1108,10 @@ class PreParser : public ParserBase<PreParser> { Variable* DeclarePrivateVariableName(const AstRawString* name, ClassScope* scope, VariableMode mode, + IsStaticFlag is_static_flag, bool* was_added) { DCHECK(IsConstVariableMode(mode)); - return scope->DeclarePrivateName(name, mode, was_added); + return scope->DeclarePrivateName(name, mode, is_static_flag, was_added); } Variable* DeclareVariableName(const AstRawString* name, VariableMode mode, @@ -1226,14 +1227,15 @@ class PreParser : public ParserBase<PreParser> { &was_added); return PreParserStatement::Default(); } - V8_INLINE void DeclareClassVariable(const PreParserIdentifier& name, + V8_INLINE void DeclareClassVariable(ClassScope* scope, + const PreParserIdentifier& name, ClassInfo* class_info, int class_token_pos) { - if (!IsNull(name)) { - bool was_added; - DeclareVariableName(name.string_, VariableMode::kConst, scope(), - &was_added); - } + DCHECK_IMPLIES(IsNull(name), class_info->is_anonymous); + // Declare a special class variable for anonymous classes with the dot + // if we need to save it for static private method access. + scope->DeclareClassVariable(ast_value_factory(), name.string_, + class_token_pos); } V8_INLINE void DeclarePublicClassMethod(const PreParserIdentifier& class_name, const PreParserExpression& property, @@ -1258,8 +1260,10 @@ class PreParser : public ParserBase<PreParser> { bool is_static, ClassInfo* class_info) { bool was_added; - DeclarePrivateVariableName(property_name.string_, scope, - GetVariableMode(kind), &was_added); + DeclarePrivateVariableName( + property_name.string_, scope, GetVariableMode(kind), + is_static ? IsStaticFlag::kStatic : IsStaticFlag::kNotStatic, + &was_added); if (!was_added) { Scanner::Location loc(property.position(), property.position() + 1); ReportMessageAt(loc, MessageTemplate::kVarRedeclaration, @@ -1591,12 +1595,12 @@ class PreParser : public ParserBase<PreParser> { return PreParserExpression::StringLiteral(); } - PreParserExpression ExpressionFromPrivateName(ClassScope* class_scope, - const PreParserIdentifier& name, - int start_position) { + PreParserExpression ExpressionFromPrivateName( + PrivateNameScopeIterator* private_name_scope, + const PreParserIdentifier& name, int start_position) { VariableProxy* proxy = factory()->ast_node_factory()->NewVariableProxy( name.string_, NORMAL_VARIABLE, start_position); - class_scope->AddUnresolvedPrivateName(proxy); + private_name_scope->AddUnresolvedPrivateName(proxy); return PreParserExpression::FromIdentifier(name); } @@ -1636,11 +1640,11 @@ class PreParser : public ParserBase<PreParser> { return PreParserStatement::Jump(); } - V8_INLINE void AddFormalParameter( - PreParserFormalParameters* parameters, - PreParserExpression& pattern, // NOLINT(runtime/references) - const PreParserExpression& initializer, int initializer_end_position, - bool is_rest) { + V8_INLINE void AddFormalParameter(PreParserFormalParameters* parameters, + const PreParserExpression& pattern, + const PreParserExpression& initializer, + int initializer_end_position, + bool is_rest) { DeclarationScope* scope = parameters->scope; scope->RecordParameter(is_rest); parameters->UpdateArityAndFunctionLength(!initializer.IsNull(), is_rest); |