OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 return *result; | 486 return *result; |
487 } | 487 } |
488 | 488 |
489 | 489 |
490 Handle<Object> Object::GetProperty(Handle<Object> object, | 490 Handle<Object> Object::GetProperty(Handle<Object> object, |
491 Handle<Name> name) { | 491 Handle<Name> name) { |
492 // TODO(rossberg): The index test should not be here but in the GetProperty | 492 // TODO(rossberg): The index test should not be here but in the GetProperty |
493 // method (or somewhere else entirely). Needs more global clean-up. | 493 // method (or somewhere else entirely). Needs more global clean-up. |
494 uint32_t index; | 494 uint32_t index; |
495 Isolate* isolate = name->GetIsolate(); | 495 Isolate* isolate = name->GetIsolate(); |
496 if (name->AsArrayIndex(&index)) | 496 if (name->AsArrayIndex(&index)) return GetElement(isolate, object, index); |
497 return GetElement(isolate, object, index); | |
498 CALL_HEAP_FUNCTION(isolate, object->GetProperty(*name), Object); | 497 CALL_HEAP_FUNCTION(isolate, object->GetProperty(*name), Object); |
499 } | 498 } |
500 | 499 |
501 | 500 |
502 Handle<Object> Object::GetElement(Isolate* isolate, | |
503 Handle<Object> object, | |
504 uint32_t index) { | |
505 CALL_HEAP_FUNCTION(isolate, object->GetElement(isolate, index), Object); | |
506 } | |
507 | |
508 | |
509 MaybeObject* JSProxy::GetElementWithHandler(Object* receiver, | 501 MaybeObject* JSProxy::GetElementWithHandler(Object* receiver, |
510 uint32_t index) { | 502 uint32_t index) { |
511 String* name; | 503 String* name; |
512 MaybeObject* maybe = GetHeap()->Uint32ToString(index); | 504 MaybeObject* maybe = GetHeap()->Uint32ToString(index); |
513 if (!maybe->To<String>(&name)) return maybe; | 505 if (!maybe->To<String>(&name)) return maybe; |
514 return GetPropertyWithHandler(receiver, name); | 506 return GetPropertyWithHandler(receiver, name); |
515 } | 507 } |
516 | 508 |
517 | 509 |
518 Handle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy, | 510 Handle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy, |
(...skipping 3550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4069 } else { | 4061 } else { |
4070 return value; | 4062 return value; |
4071 } | 4063 } |
4072 } | 4064 } |
4073 | 4065 |
4074 Handle<Object> old_value = isolate->factory()->the_hole_value(); | 4066 Handle<Object> old_value = isolate->factory()->the_hole_value(); |
4075 bool is_observed = object->map()->is_observed() && | 4067 bool is_observed = object->map()->is_observed() && |
4076 *name != isolate->heap()->hidden_string(); | 4068 *name != isolate->heap()->hidden_string(); |
4077 if (is_observed && lookup->IsDataProperty()) { | 4069 if (is_observed && lookup->IsDataProperty()) { |
4078 old_value = Object::GetProperty(object, name); | 4070 old_value = Object::GetProperty(object, name); |
| 4071 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
4079 } | 4072 } |
4080 | 4073 |
4081 // This is a real property that is not read-only, or it is a | 4074 // This is a real property that is not read-only, or it is a |
4082 // transition or null descriptor and there are no setters in the prototypes. | 4075 // transition or null descriptor and there are no setters in the prototypes. |
4083 Handle<Object> result = value; | 4076 Handle<Object> result = value; |
4084 switch (lookup->type()) { | 4077 switch (lookup->type()) { |
4085 case NORMAL: | 4078 case NORMAL: |
4086 SetNormalizedProperty(handle(lookup->holder()), lookup, value); | 4079 SetNormalizedProperty(handle(lookup->holder()), lookup, value); |
4087 break; | 4080 break; |
4088 case FIELD: | 4081 case FIELD: |
(...skipping 25 matching lines...) Expand all Loading... |
4114 RETURN_IF_EMPTY_HANDLE_VALUE(isolate, result, Handle<Object>()); | 4107 RETURN_IF_EMPTY_HANDLE_VALUE(isolate, result, Handle<Object>()); |
4115 | 4108 |
4116 if (is_observed) { | 4109 if (is_observed) { |
4117 if (lookup->IsTransition()) { | 4110 if (lookup->IsTransition()) { |
4118 EnqueueChangeRecord(object, "add", name, old_value); | 4111 EnqueueChangeRecord(object, "add", name, old_value); |
4119 } else { | 4112 } else { |
4120 LookupResult new_lookup(isolate); | 4113 LookupResult new_lookup(isolate); |
4121 object->LocalLookup(*name, &new_lookup, true); | 4114 object->LocalLookup(*name, &new_lookup, true); |
4122 if (new_lookup.IsDataProperty()) { | 4115 if (new_lookup.IsDataProperty()) { |
4123 Handle<Object> new_value = Object::GetProperty(object, name); | 4116 Handle<Object> new_value = Object::GetProperty(object, name); |
| 4117 CHECK_NOT_EMPTY_HANDLE(isolate, new_value); |
4124 if (!new_value->SameValue(*old_value)) { | 4118 if (!new_value->SameValue(*old_value)) { |
4125 EnqueueChangeRecord(object, "update", name, old_value); | 4119 EnqueueChangeRecord(object, "update", name, old_value); |
4126 } | 4120 } |
4127 } | 4121 } |
4128 } | 4122 } |
4129 } | 4123 } |
4130 | 4124 |
4131 return result; | 4125 return result; |
4132 } | 4126 } |
4133 | 4127 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4190 // Neither properties nor transitions found. | 4184 // Neither properties nor transitions found. |
4191 return AddProperty(object, name, value, attributes, SLOPPY, | 4185 return AddProperty(object, name, value, attributes, SLOPPY, |
4192 MAY_BE_STORE_FROM_KEYED, extensibility_check, value_type, mode, flag); | 4186 MAY_BE_STORE_FROM_KEYED, extensibility_check, value_type, mode, flag); |
4193 } | 4187 } |
4194 | 4188 |
4195 Handle<Object> old_value = isolate->factory()->the_hole_value(); | 4189 Handle<Object> old_value = isolate->factory()->the_hole_value(); |
4196 PropertyAttributes old_attributes = ABSENT; | 4190 PropertyAttributes old_attributes = ABSENT; |
4197 bool is_observed = object->map()->is_observed() && | 4191 bool is_observed = object->map()->is_observed() && |
4198 *name != isolate->heap()->hidden_string(); | 4192 *name != isolate->heap()->hidden_string(); |
4199 if (is_observed && lookup.IsProperty()) { | 4193 if (is_observed && lookup.IsProperty()) { |
4200 if (lookup.IsDataProperty()) old_value = | 4194 if (lookup.IsDataProperty()) { |
4201 Object::GetProperty(object, name); | 4195 old_value = Object::GetProperty(object, name); |
| 4196 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
| 4197 } |
4202 old_attributes = lookup.GetAttributes(); | 4198 old_attributes = lookup.GetAttributes(); |
4203 } | 4199 } |
4204 | 4200 |
4205 // Check of IsReadOnly removed from here in clone. | 4201 // Check of IsReadOnly removed from here in clone. |
4206 switch (lookup.type()) { | 4202 switch (lookup.type()) { |
4207 case NORMAL: | 4203 case NORMAL: |
4208 ReplaceSlowProperty(object, name, value, attributes); | 4204 ReplaceSlowProperty(object, name, value, attributes); |
4209 break; | 4205 break; |
4210 case FIELD: | 4206 case FIELD: |
4211 SetPropertyToFieldWithAttributes(&lookup, name, value, attributes); | 4207 SetPropertyToFieldWithAttributes(&lookup, name, value, attributes); |
(...skipping 24 matching lines...) Expand all Loading... |
4236 if (lookup.IsTransition()) { | 4232 if (lookup.IsTransition()) { |
4237 EnqueueChangeRecord(object, "add", name, old_value); | 4233 EnqueueChangeRecord(object, "add", name, old_value); |
4238 } else if (old_value->IsTheHole()) { | 4234 } else if (old_value->IsTheHole()) { |
4239 EnqueueChangeRecord(object, "reconfigure", name, old_value); | 4235 EnqueueChangeRecord(object, "reconfigure", name, old_value); |
4240 } else { | 4236 } else { |
4241 LookupResult new_lookup(isolate); | 4237 LookupResult new_lookup(isolate); |
4242 object->LocalLookup(*name, &new_lookup, true); | 4238 object->LocalLookup(*name, &new_lookup, true); |
4243 bool value_changed = false; | 4239 bool value_changed = false; |
4244 if (new_lookup.IsDataProperty()) { | 4240 if (new_lookup.IsDataProperty()) { |
4245 Handle<Object> new_value = Object::GetProperty(object, name); | 4241 Handle<Object> new_value = Object::GetProperty(object, name); |
| 4242 CHECK_NOT_EMPTY_HANDLE(isolate, new_value); |
4246 value_changed = !old_value->SameValue(*new_value); | 4243 value_changed = !old_value->SameValue(*new_value); |
4247 } | 4244 } |
4248 if (new_lookup.GetAttributes() != old_attributes) { | 4245 if (new_lookup.GetAttributes() != old_attributes) { |
4249 if (!value_changed) old_value = isolate->factory()->the_hole_value(); | 4246 if (!value_changed) old_value = isolate->factory()->the_hole_value(); |
4250 EnqueueChangeRecord(object, "reconfigure", name, old_value); | 4247 EnqueueChangeRecord(object, "reconfigure", name, old_value); |
4251 } else if (value_changed) { | 4248 } else if (value_changed) { |
4252 EnqueueChangeRecord(object, "update", name, old_value); | 4249 EnqueueChangeRecord(object, "update", name, old_value); |
4253 } | 4250 } |
4254 } | 4251 } |
4255 } | 4252 } |
(...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5190 if (proto->IsNull()) return factory->false_value(); | 5187 if (proto->IsNull()) return factory->false_value(); |
5191 ASSERT(proto->IsJSGlobalObject()); | 5188 ASSERT(proto->IsJSGlobalObject()); |
5192 return DeleteElement(Handle<JSObject>::cast(proto), index, mode); | 5189 return DeleteElement(Handle<JSObject>::cast(proto), index, mode); |
5193 } | 5190 } |
5194 | 5191 |
5195 Handle<Object> old_value; | 5192 Handle<Object> old_value; |
5196 bool should_enqueue_change_record = false; | 5193 bool should_enqueue_change_record = false; |
5197 if (object->map()->is_observed()) { | 5194 if (object->map()->is_observed()) { |
5198 should_enqueue_change_record = HasLocalElement(object, index); | 5195 should_enqueue_change_record = HasLocalElement(object, index); |
5199 if (should_enqueue_change_record) { | 5196 if (should_enqueue_change_record) { |
5200 old_value = object->GetLocalElementAccessorPair(index) != NULL | 5197 if (object->GetLocalElementAccessorPair(index) != NULL) { |
5201 ? Handle<Object>::cast(factory->the_hole_value()) | 5198 old_value = Handle<Object>::cast(factory->the_hole_value()); |
5202 : Object::GetElement(isolate, object, index); | 5199 } else { |
| 5200 old_value = Object::GetElement(isolate, object, index); |
| 5201 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
| 5202 } |
5203 } | 5203 } |
5204 } | 5204 } |
5205 | 5205 |
5206 // Skip interceptor if forcing deletion. | 5206 // Skip interceptor if forcing deletion. |
5207 Handle<Object> result; | 5207 Handle<Object> result; |
5208 if (object->HasIndexedInterceptor() && mode != FORCE_DELETION) { | 5208 if (object->HasIndexedInterceptor() && mode != FORCE_DELETION) { |
5209 result = DeleteElementWithInterceptor(object, index); | 5209 result = DeleteElementWithInterceptor(object, index); |
5210 } else { | 5210 } else { |
5211 result = AccessorDelete(object, index, mode); | 5211 result = AccessorDelete(object, index, mode); |
5212 } | 5212 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5262 return Handle<Object>(); | 5262 return Handle<Object>(); |
5263 } | 5263 } |
5264 return isolate->factory()->false_value(); | 5264 return isolate->factory()->false_value(); |
5265 } | 5265 } |
5266 | 5266 |
5267 Handle<Object> old_value = isolate->factory()->the_hole_value(); | 5267 Handle<Object> old_value = isolate->factory()->the_hole_value(); |
5268 bool is_observed = object->map()->is_observed() && | 5268 bool is_observed = object->map()->is_observed() && |
5269 *name != isolate->heap()->hidden_string(); | 5269 *name != isolate->heap()->hidden_string(); |
5270 if (is_observed && lookup.IsDataProperty()) { | 5270 if (is_observed && lookup.IsDataProperty()) { |
5271 old_value = Object::GetProperty(object, name); | 5271 old_value = Object::GetProperty(object, name); |
| 5272 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
5272 } | 5273 } |
5273 Handle<Object> result; | 5274 Handle<Object> result; |
5274 | 5275 |
5275 // Check for interceptor. | 5276 // Check for interceptor. |
5276 if (lookup.IsInterceptor()) { | 5277 if (lookup.IsInterceptor()) { |
5277 // Skip interceptor if forcing a deletion. | 5278 // Skip interceptor if forcing a deletion. |
5278 if (mode == FORCE_DELETION) { | 5279 if (mode == FORCE_DELETION) { |
5279 result = DeletePropertyPostInterceptor(object, name, mode); | 5280 result = DeletePropertyPostInterceptor(object, name, mode); |
5280 } else { | 5281 } else { |
5281 result = DeletePropertyWithInterceptor(object, name); | 5282 result = DeletePropertyWithInterceptor(object, name); |
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6360 | 6361 |
6361 Handle<Object> old_value = isolate->factory()->the_hole_value(); | 6362 Handle<Object> old_value = isolate->factory()->the_hole_value(); |
6362 bool is_observed = object->map()->is_observed() && | 6363 bool is_observed = object->map()->is_observed() && |
6363 *name != isolate->heap()->hidden_string(); | 6364 *name != isolate->heap()->hidden_string(); |
6364 bool preexists = false; | 6365 bool preexists = false; |
6365 if (is_observed) { | 6366 if (is_observed) { |
6366 if (is_element) { | 6367 if (is_element) { |
6367 preexists = HasLocalElement(object, index); | 6368 preexists = HasLocalElement(object, index); |
6368 if (preexists && object->GetLocalElementAccessorPair(index) == NULL) { | 6369 if (preexists && object->GetLocalElementAccessorPair(index) == NULL) { |
6369 old_value = Object::GetElement(isolate, object, index); | 6370 old_value = Object::GetElement(isolate, object, index); |
| 6371 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
6370 } | 6372 } |
6371 } else { | 6373 } else { |
6372 LookupResult lookup(isolate); | 6374 LookupResult lookup(isolate); |
6373 object->LocalLookup(*name, &lookup, true); | 6375 object->LocalLookup(*name, &lookup, true); |
6374 preexists = lookup.IsProperty(); | 6376 preexists = lookup.IsProperty(); |
6375 if (preexists && lookup.IsDataProperty()) { | 6377 if (preexists && lookup.IsDataProperty()) { |
6376 old_value = Object::GetProperty(object, name); | 6378 old_value = Object::GetProperty(object, name); |
| 6379 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
6377 } | 6380 } |
6378 } | 6381 } |
6379 } | 6382 } |
6380 | 6383 |
6381 if (is_element) { | 6384 if (is_element) { |
6382 DefineElementAccessor( | 6385 DefineElementAccessor( |
6383 object, index, getter, setter, attributes, access_control); | 6386 object, index, getter, setter, attributes, access_control); |
6384 } else { | 6387 } else { |
6385 DefinePropertyAccessor( | 6388 DefinePropertyAccessor( |
6386 object, name, getter, setter, attributes, access_control); | 6389 object, name, getter, setter, attributes, access_control); |
(...skipping 4967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11354 // no further old values need be collected. | 11357 // no further old values need be collected. |
11355 static bool GetOldValue(Isolate* isolate, | 11358 static bool GetOldValue(Isolate* isolate, |
11356 Handle<JSObject> object, | 11359 Handle<JSObject> object, |
11357 uint32_t index, | 11360 uint32_t index, |
11358 List<Handle<Object> >* old_values, | 11361 List<Handle<Object> >* old_values, |
11359 List<uint32_t>* indices) { | 11362 List<uint32_t>* indices) { |
11360 PropertyAttributes attributes = | 11363 PropertyAttributes attributes = |
11361 JSReceiver::GetLocalElementAttribute(object, index); | 11364 JSReceiver::GetLocalElementAttribute(object, index); |
11362 ASSERT(attributes != ABSENT); | 11365 ASSERT(attributes != ABSENT); |
11363 if (attributes == DONT_DELETE) return false; | 11366 if (attributes == DONT_DELETE) return false; |
11364 old_values->Add(object->GetLocalElementAccessorPair(index) == NULL | 11367 Handle<Object> value; |
11365 ? Object::GetElement(isolate, object, index) | 11368 if (object->GetLocalElementAccessorPair(index) != NULL) { |
11366 : Handle<Object>::cast(isolate->factory()->the_hole_value())); | 11369 value = Handle<Object>::cast(isolate->factory()->the_hole_value()); |
| 11370 } else { |
| 11371 value = Object::GetElement(isolate, object, index); |
| 11372 CHECK_NOT_EMPTY_HANDLE(isolate, value); |
| 11373 } |
| 11374 old_values->Add(value); |
11367 indices->Add(index); | 11375 indices->Add(index); |
11368 return true; | 11376 return true; |
11369 } | 11377 } |
11370 | 11378 |
11371 static void EnqueueSpliceRecord(Handle<JSArray> object, | 11379 static void EnqueueSpliceRecord(Handle<JSArray> object, |
11372 uint32_t index, | 11380 uint32_t index, |
11373 Handle<JSArray> deleted, | 11381 Handle<JSArray> deleted, |
11374 uint32_t add_count) { | 11382 uint32_t add_count) { |
11375 Isolate* isolate = object->GetIsolate(); | 11383 Isolate* isolate = object->GetIsolate(); |
11376 HandleScope scope(isolate); | 11384 HandleScope scope(isolate); |
(...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12561 set_mode); | 12569 set_mode); |
12562 } | 12570 } |
12563 | 12571 |
12564 PropertyAttributes old_attributes = | 12572 PropertyAttributes old_attributes = |
12565 JSReceiver::GetLocalElementAttribute(object, index); | 12573 JSReceiver::GetLocalElementAttribute(object, index); |
12566 Handle<Object> old_value = isolate->factory()->the_hole_value(); | 12574 Handle<Object> old_value = isolate->factory()->the_hole_value(); |
12567 Handle<Object> old_length_handle; | 12575 Handle<Object> old_length_handle; |
12568 Handle<Object> new_length_handle; | 12576 Handle<Object> new_length_handle; |
12569 | 12577 |
12570 if (old_attributes != ABSENT) { | 12578 if (old_attributes != ABSENT) { |
12571 if (object->GetLocalElementAccessorPair(index) == NULL) | 12579 if (object->GetLocalElementAccessorPair(index) == NULL) { |
12572 old_value = Object::GetElement(isolate, object, index); | 12580 old_value = Object::GetElement(isolate, object, index); |
| 12581 CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
| 12582 } |
12573 } else if (object->IsJSArray()) { | 12583 } else if (object->IsJSArray()) { |
12574 // Store old array length in case adding an element grows the array. | 12584 // Store old array length in case adding an element grows the array. |
12575 old_length_handle = handle(Handle<JSArray>::cast(object)->length(), | 12585 old_length_handle = handle(Handle<JSArray>::cast(object)->length(), |
12576 isolate); | 12586 isolate); |
12577 } | 12587 } |
12578 | 12588 |
12579 // Check for lookup interceptor | 12589 // Check for lookup interceptor |
12580 Handle<Object> result = object->HasIndexedInterceptor() | 12590 Handle<Object> result = object->HasIndexedInterceptor() |
12581 ? SetElementWithInterceptor(object, index, value, attributes, strict_mode, | 12591 ? SetElementWithInterceptor(object, index, value, attributes, strict_mode, |
12582 check_prototype, | 12592 check_prototype, |
(...skipping 25 matching lines...) Expand all Loading... |
12608 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0); | 12618 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0); |
12609 EnqueueSpliceRecord(Handle<JSArray>::cast(object), old_length, deleted, | 12619 EnqueueSpliceRecord(Handle<JSArray>::cast(object), old_length, deleted, |
12610 new_length - old_length); | 12620 new_length - old_length); |
12611 } else { | 12621 } else { |
12612 EnqueueChangeRecord(object, "add", name, old_value); | 12622 EnqueueChangeRecord(object, "add", name, old_value); |
12613 } | 12623 } |
12614 } else if (old_value->IsTheHole()) { | 12624 } else if (old_value->IsTheHole()) { |
12615 EnqueueChangeRecord(object, "reconfigure", name, old_value); | 12625 EnqueueChangeRecord(object, "reconfigure", name, old_value); |
12616 } else { | 12626 } else { |
12617 Handle<Object> new_value = Object::GetElement(isolate, object, index); | 12627 Handle<Object> new_value = Object::GetElement(isolate, object, index); |
| 12628 CHECK_NOT_EMPTY_HANDLE(isolate, new_value); |
12618 bool value_changed = !old_value->SameValue(*new_value); | 12629 bool value_changed = !old_value->SameValue(*new_value); |
12619 if (old_attributes != new_attributes) { | 12630 if (old_attributes != new_attributes) { |
12620 if (!value_changed) old_value = isolate->factory()->the_hole_value(); | 12631 if (!value_changed) old_value = isolate->factory()->the_hole_value(); |
12621 EnqueueChangeRecord(object, "reconfigure", name, old_value); | 12632 EnqueueChangeRecord(object, "reconfigure", name, old_value); |
12622 } else if (value_changed) { | 12633 } else if (value_changed) { |
12623 EnqueueChangeRecord(object, "update", name, old_value); | 12634 EnqueueChangeRecord(object, "update", name, old_value); |
12624 } | 12635 } |
12625 } | 12636 } |
12626 | 12637 |
12627 return result; | 12638 return result; |
(...skipping 3852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16480 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16491 #define ERROR_MESSAGES_TEXTS(C, T) T, |
16481 static const char* error_messages_[] = { | 16492 static const char* error_messages_[] = { |
16482 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16493 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
16483 }; | 16494 }; |
16484 #undef ERROR_MESSAGES_TEXTS | 16495 #undef ERROR_MESSAGES_TEXTS |
16485 return error_messages_[reason]; | 16496 return error_messages_[reason]; |
16486 } | 16497 } |
16487 | 16498 |
16488 | 16499 |
16489 } } // namespace v8::internal | 16500 } } // namespace v8::internal |
OLD | NEW |