| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index a253854d6e4a054c55e3f427a3840594f6a1e861..ca8cbb9029c5b0f6f930453efcf6ac0827152aad 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -3899,17 +3899,11 @@ Handle<Object> Parser::GetBoilerplateValue(Expression* expression) {
|
| return isolate()->factory()->undefined_value();
|
| }
|
|
|
| -// Defined in ast.cc
|
| -bool IsEqualString(void* first, void* second);
|
| -bool IsEqualNumber(void* first, void* second);
|
| -
|
| -
|
| // Validation per 11.1.5 Object Initialiser
|
| class ObjectLiteralPropertyChecker {
|
| public:
|
| ObjectLiteralPropertyChecker(Parser* parser, LanguageMode language_mode) :
|
| - props(&IsEqualString),
|
| - elems(&IsEqualNumber),
|
| + props_(Literal::Match),
|
| parser_(parser),
|
| language_mode_(language_mode) {
|
| }
|
| @@ -3938,8 +3932,7 @@ class ObjectLiteralPropertyChecker {
|
| }
|
| }
|
|
|
| - HashMap props;
|
| - HashMap elems;
|
| + HashMap props_;
|
| Parser* parser_;
|
| LanguageMode language_mode_;
|
| };
|
| @@ -3949,44 +3942,9 @@ void ObjectLiteralPropertyChecker::CheckProperty(
|
| ObjectLiteral::Property* property,
|
| Scanner::Location loc,
|
| bool* ok) {
|
| -
|
| ASSERT(property != NULL);
|
| -
|
| - Literal* lit = property->key();
|
| - Handle<Object> handle = lit->handle();
|
| -
|
| - uint32_t hash;
|
| - HashMap* map;
|
| - void* key;
|
| -
|
| - if (handle->IsSymbol()) {
|
| - Handle<String> name(String::cast(*handle));
|
| - if (name->AsArrayIndex(&hash)) {
|
| - Handle<Object> key_handle = FACTORY->NewNumberFromUint(hash);
|
| - key = key_handle.location();
|
| - map = &elems;
|
| - } else {
|
| - key = handle.location();
|
| - hash = name->Hash();
|
| - map = &props;
|
| - }
|
| - } else if (handle->ToArrayIndex(&hash)) {
|
| - key = handle.location();
|
| - map = &elems;
|
| - } else {
|
| - ASSERT(handle->IsNumber());
|
| - double num = handle->Number();
|
| - char arr[100];
|
| - Vector<char> buffer(arr, ARRAY_SIZE(arr));
|
| - const char* str = DoubleToCString(num, buffer);
|
| - Handle<String> name = FACTORY->NewStringFromAscii(CStrVector(str));
|
| - key = name.location();
|
| - hash = name->Hash();
|
| - map = &props;
|
| - }
|
| -
|
| - // Lookup property previously defined, if any.
|
| - HashMap::Entry* entry = map->Lookup(key, hash, true);
|
| + Literal* literal = property->key();
|
| + HashMap::Entry* entry = props_.Lookup(literal, literal->Hash(), true);
|
| intptr_t prev = reinterpret_cast<intptr_t> (entry->value);
|
| intptr_t curr = GetPropertyKind(property);
|
|
|
|
|