summaryrefslogtreecommitdiff
path: root/deps/v8/src/parsing/preparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/parsing/preparser.h')
-rw-r--r--deps/v8/src/parsing/preparser.h40
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);