Index: src/parsing/parser-base.h |
diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h |
index b17d664b3abe099d90f65d67a15f7c3e616bbc5a..78a2bc55c2ca18ecc32a96df8f9e47151d3165a5 100644 |
--- a/src/parsing/parser-base.h |
+++ b/src/parsing/parser-base.h |
@@ -2540,6 +2540,8 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseObjectLiteral( |
typename Types::ObjectPropertyList properties = |
impl()->NewObjectPropertyList(4); |
int number_of_boilerplate_properties = 0; |
+ bool has_seen_proto = false; |
+ |
bool has_computed_names = false; |
bool has_rest_property = false; |
ObjectLiteralChecker checker(this); |
@@ -2562,10 +2564,14 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseObjectLiteral( |
has_rest_property = true; |
} |
- // Count CONSTANT or COMPUTED properties to maintain the enumeration order. |
- if (!has_computed_names && impl()->IsBoilerplateProperty(property)) { |
+ if (!impl()->IsBoilerplateProperty(property)) { |
+ has_seen_proto = true; |
+ } else if (!has_computed_names) { |
+ // Count CONSTANT or COMPUTED properties to maintain the enumeration |
+ // order. |
number_of_boilerplate_properties++; |
} |
+ |
properties->Add(property, zone()); |
if (peek() != Token::RBRACE) { |
@@ -2581,8 +2587,8 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseObjectLiteral( |
int literal_index = function_state_->NextMaterializedLiteralIndex(); |
return factory()->NewObjectLiteral(properties, literal_index, |
- number_of_boilerplate_properties, pos, |
- has_rest_property); |
+ number_of_boilerplate_properties, |
+ has_seen_proto, pos, has_rest_property); |
} |
template <typename Impl> |