Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index 8a932582586ed15b6b5b886ccecbe6933ee6d7e1..0c07c325d0308daa1bf570148342ac68ea274a49 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -492,60 +492,6 @@ class ParserBase : public Traits { |
ExpressionT expression, |
Scanner::Location location, const char* message, bool* ok); |
- // Used to detect duplicates in object literals. Each of the values |
- // kGetterProperty, kSetterProperty and kValueProperty represents |
- // a type of object literal property. When parsing a property, its |
- // type value is stored in the DuplicateFinder for the property name. |
- // Values are chosen so that having intersection bits means the there is |
- // an incompatibility. |
- // I.e., you can add a getter to a property that already has a setter, since |
- // kGetterProperty and kSetterProperty doesn't intersect, but not if it |
- // already has a getter or a value. Adding the getter to an existing |
- // setter will store the value (kGetterProperty | kSetterProperty), which |
- // is incompatible with adding any further properties. |
- enum PropertyKind { |
- kNone = 0, |
- // Bit patterns representing different object literal property types. |
- kGetterProperty = 1, |
- kSetterProperty = 2, |
- kValueProperty = 7, |
- // Helper constants. |
- kValueFlag = 4 |
- }; |
- |
- // Validation per ECMA 262 - 11.1.5 "Object Initialiser". |
- class ObjectLiteralChecker { |
- public: |
- ObjectLiteralChecker(ParserBase* parser, StrictMode strict_mode) |
- : parser_(parser), |
- finder_(scanner()->unicode_cache()), |
- strict_mode_(strict_mode) { } |
- |
- void CheckProperty(Token::Value property, PropertyKind type, bool* ok); |
- |
- private: |
- ParserBase* parser() const { return parser_; } |
- Scanner* scanner() const { return parser_->scanner(); } |
- |
- // Checks the type of conflict based on values coming from PropertyType. |
- bool HasConflict(PropertyKind type1, PropertyKind type2) { |
- return (type1 & type2) != 0; |
- } |
- bool IsDataDataConflict(PropertyKind type1, PropertyKind type2) { |
- return ((type1 & type2) & kValueFlag) != 0; |
- } |
- bool IsDataAccessorConflict(PropertyKind type1, PropertyKind type2) { |
- return ((type1 ^ type2) & kValueFlag) != 0; |
- } |
- bool IsAccessorAccessorConflict(PropertyKind type1, PropertyKind type2) { |
- return ((type1 | type2) & kValueFlag) == 0; |
- } |
- |
- ParserBase* parser_; |
- DuplicateFinder finder_; |
- StrictMode strict_mode_; |
- }; |
- |
// If true, the next (and immediately following) function literal is |
// preceded by a parenthesis. |
// Heuristically that means that the function will be called immediately, |
@@ -1849,8 +1795,6 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseObjectLiteral( |
int number_of_boilerplate_properties = 0; |
bool has_function = false; |
- ObjectLiteralChecker checker(this, strict_mode()); |
- |
Expect(Token::LBRACE, CHECK_OK); |
while (peek() != Token::RBRACE) { |
@@ -1889,9 +1833,6 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseObjectLiteral( |
*ok = false; |
return this->EmptyLiteral(); |
} |
- // Validate the property. |
- PropertyKind type = is_getter ? kGetterProperty : kSetterProperty; |
- checker.CheckProperty(next, type, CHECK_OK); |
IdentifierT name = this->GetSymbol(scanner_); |
typename Traits::Type::FunctionLiteral value = |
this->ParseFunctionLiteral( |
@@ -1955,9 +1896,6 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseObjectLiteral( |
} |
} |
- // Validate the property |
- checker.CheckProperty(next, kValueProperty, CHECK_OK); |
- |
Expect(Token::COLON, CHECK_OK); |
ExpressionT value = this->ParseAssignmentExpression(true, CHECK_OK); |
@@ -2628,36 +2566,6 @@ ParserBase<Traits>::CheckAndRewriteReferenceExpression( |
#undef CHECK_OK_CUSTOM |
-template <typename Traits> |
-void ParserBase<Traits>::ObjectLiteralChecker::CheckProperty( |
- Token::Value property, |
- PropertyKind type, |
- bool* ok) { |
- int old; |
- if (property == Token::NUMBER) { |
- old = scanner()->FindNumber(&finder_, type); |
- } else { |
- old = scanner()->FindSymbol(&finder_, type); |
- } |
- PropertyKind old_type = static_cast<PropertyKind>(old); |
- if (HasConflict(old_type, type)) { |
- if (IsDataDataConflict(old_type, type)) { |
- // Both are data properties. |
- if (strict_mode_ == SLOPPY) return; |
- parser()->ReportMessage("strict_duplicate_property"); |
- } else if (IsDataAccessorConflict(old_type, type)) { |
- // Both a data and an accessor property with the same name. |
- parser()->ReportMessage("accessor_data_property"); |
- } else { |
- DCHECK(IsAccessorAccessorConflict(old_type, type)); |
- // Both accessors of the same type. |
- parser()->ReportMessage("accessor_get_set"); |
- } |
- *ok = false; |
- } |
-} |
- |
- |
} } // v8::internal |
#endif // V8_PREPARSER_H |