OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/arguments.h" | 7 #include "src/arguments.h" |
8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
9 #include "src/debug.h" | 9 #include "src/debug.h" |
10 #include "src/runtime/runtime.h" | 10 #include "src/runtime/runtime.h" |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 | 462 |
463 | 463 |
464 RUNTIME_FUNCTION(Runtime_DisableAccessChecks) { | 464 RUNTIME_FUNCTION(Runtime_DisableAccessChecks) { |
465 HandleScope scope(isolate); | 465 HandleScope scope(isolate); |
466 DCHECK(args.length() == 1); | 466 DCHECK(args.length() == 1); |
467 CONVERT_ARG_HANDLE_CHECKED(HeapObject, object, 0); | 467 CONVERT_ARG_HANDLE_CHECKED(HeapObject, object, 0); |
468 Handle<Map> old_map(object->map()); | 468 Handle<Map> old_map(object->map()); |
469 bool needs_access_checks = old_map->is_access_check_needed(); | 469 bool needs_access_checks = old_map->is_access_check_needed(); |
470 if (needs_access_checks) { | 470 if (needs_access_checks) { |
471 // Copy map so it won't interfere constructor's initial map. | 471 // Copy map so it won't interfere constructor's initial map. |
472 Handle<Map> new_map = Map::Copy(old_map); | 472 Handle<Map> new_map = Map::Copy(old_map, "DisableAccessChecks"); |
473 new_map->set_is_access_check_needed(false); | 473 new_map->set_is_access_check_needed(false); |
474 JSObject::MigrateToMap(Handle<JSObject>::cast(object), new_map); | 474 JSObject::MigrateToMap(Handle<JSObject>::cast(object), new_map); |
475 } | 475 } |
476 return isolate->heap()->ToBoolean(needs_access_checks); | 476 return isolate->heap()->ToBoolean(needs_access_checks); |
477 } | 477 } |
478 | 478 |
479 | 479 |
480 RUNTIME_FUNCTION(Runtime_EnableAccessChecks) { | 480 RUNTIME_FUNCTION(Runtime_EnableAccessChecks) { |
481 HandleScope scope(isolate); | 481 HandleScope scope(isolate); |
482 DCHECK(args.length() == 1); | 482 DCHECK(args.length() == 1); |
483 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 483 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
484 Handle<Map> old_map(object->map()); | 484 Handle<Map> old_map(object->map()); |
485 RUNTIME_ASSERT(!old_map->is_access_check_needed()); | 485 RUNTIME_ASSERT(!old_map->is_access_check_needed()); |
486 // Copy map so it won't interfere constructor's initial map. | 486 // Copy map so it won't interfere constructor's initial map. |
487 Handle<Map> new_map = Map::Copy(old_map); | 487 Handle<Map> new_map = Map::Copy(old_map, "EnableAccessChecks"); |
488 new_map->set_is_access_check_needed(true); | 488 new_map->set_is_access_check_needed(true); |
489 JSObject::MigrateToMap(object, new_map); | 489 JSObject::MigrateToMap(object, new_map); |
490 return isolate->heap()->undefined_value(); | 490 return isolate->heap()->undefined_value(); |
491 } | 491 } |
492 | 492 |
493 | 493 |
494 RUNTIME_FUNCTION(Runtime_OptimizeObjectForAddingMultipleProperties) { | 494 RUNTIME_FUNCTION(Runtime_OptimizeObjectForAddingMultipleProperties) { |
495 HandleScope scope(isolate); | 495 HandleScope scope(isolate); |
496 DCHECK(args.length() == 2); | 496 DCHECK(args.length() == 2); |
497 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 497 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
498 CONVERT_SMI_ARG_CHECKED(properties, 1); | 498 CONVERT_SMI_ARG_CHECKED(properties, 1); |
499 // Conservative upper limit to prevent fuzz tests from going OOM. | 499 // Conservative upper limit to prevent fuzz tests from going OOM. |
500 RUNTIME_ASSERT(properties <= 100000); | 500 RUNTIME_ASSERT(properties <= 100000); |
501 if (object->HasFastProperties() && !object->IsJSGlobalProxy()) { | 501 if (object->HasFastProperties() && !object->IsJSGlobalProxy()) { |
502 JSObject::NormalizeProperties(object, KEEP_INOBJECT_PROPERTIES, properties); | 502 JSObject::NormalizeProperties(object, KEEP_INOBJECT_PROPERTIES, properties, |
| 503 "OptimizeForAdding"); |
503 } | 504 } |
504 return *object; | 505 return *object; |
505 } | 506 } |
506 | 507 |
507 | 508 |
508 RUNTIME_FUNCTION(Runtime_ObjectFreeze) { | 509 RUNTIME_FUNCTION(Runtime_ObjectFreeze) { |
509 HandleScope scope(isolate); | 510 HandleScope scope(isolate); |
510 DCHECK(args.length() == 1); | 511 DCHECK(args.length() == 1); |
511 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 512 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
512 | 513 |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 } | 1146 } |
1146 return *isolate->factory()->NewJSArrayWithElements(copy); | 1147 return *isolate->factory()->NewJSArrayWithElements(copy); |
1147 } | 1148 } |
1148 | 1149 |
1149 | 1150 |
1150 RUNTIME_FUNCTION(Runtime_ToFastProperties) { | 1151 RUNTIME_FUNCTION(Runtime_ToFastProperties) { |
1151 HandleScope scope(isolate); | 1152 HandleScope scope(isolate); |
1152 DCHECK(args.length() == 1); | 1153 DCHECK(args.length() == 1); |
1153 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); | 1154 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); |
1154 if (object->IsJSObject() && !object->IsGlobalObject()) { | 1155 if (object->IsJSObject() && !object->IsGlobalObject()) { |
1155 JSObject::MigrateSlowToFast(Handle<JSObject>::cast(object), 0); | 1156 JSObject::MigrateSlowToFast(Handle<JSObject>::cast(object), 0, |
| 1157 "RuntimeToFastProperties"); |
1156 } | 1158 } |
1157 return *object; | 1159 return *object; |
1158 } | 1160 } |
1159 | 1161 |
1160 | 1162 |
1161 RUNTIME_FUNCTION(Runtime_ToBool) { | 1163 RUNTIME_FUNCTION(Runtime_ToBool) { |
1162 SealHandleScope shs(isolate); | 1164 SealHandleScope shs(isolate); |
1163 DCHECK(args.length() == 1); | 1165 DCHECK(args.length() == 1); |
1164 CONVERT_ARG_CHECKED(Object, object, 0); | 1166 CONVERT_ARG_CHECKED(Object, object, 0); |
1165 | 1167 |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1449 RUNTIME_ASSERT(IsValidAccessor(getter)); | 1451 RUNTIME_ASSERT(IsValidAccessor(getter)); |
1450 CONVERT_ARG_HANDLE_CHECKED(Object, setter, 3); | 1452 CONVERT_ARG_HANDLE_CHECKED(Object, setter, 3); |
1451 RUNTIME_ASSERT(IsValidAccessor(setter)); | 1453 RUNTIME_ASSERT(IsValidAccessor(setter)); |
1452 CONVERT_SMI_ARG_CHECKED(unchecked, 4); | 1454 CONVERT_SMI_ARG_CHECKED(unchecked, 4); |
1453 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); | 1455 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
1454 PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); | 1456 PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); |
1455 | 1457 |
1456 bool fast = obj->HasFastProperties(); | 1458 bool fast = obj->HasFastProperties(); |
1457 RETURN_FAILURE_ON_EXCEPTION( | 1459 RETURN_FAILURE_ON_EXCEPTION( |
1458 isolate, JSObject::DefineAccessor(obj, name, getter, setter, attr)); | 1460 isolate, JSObject::DefineAccessor(obj, name, getter, setter, attr)); |
1459 if (fast) JSObject::MigrateSlowToFast(obj, 0); | 1461 if (fast) JSObject::MigrateSlowToFast(obj, 0, "RuntimeDefineAccessor"); |
1460 return isolate->heap()->undefined_value(); | 1462 return isolate->heap()->undefined_value(); |
1461 } | 1463 } |
1462 | 1464 |
1463 | 1465 |
1464 // Implements part of 8.12.9 DefineOwnProperty. | 1466 // Implements part of 8.12.9 DefineOwnProperty. |
1465 // There are 3 cases that lead here: | 1467 // There are 3 cases that lead here: |
1466 // Step 4a - define a new data property. | 1468 // Step 4a - define a new data property. |
1467 // Steps 9b & 12 - replace an existing accessor property with a data property. | 1469 // Steps 9b & 12 - replace an existing accessor property with a data property. |
1468 // Step 12 - update an existing data property with a data or generic | 1470 // Step 12 - update an existing data property with a data or generic |
1469 // descriptor. | 1471 // descriptor. |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1578 | 1580 |
1579 RUNTIME_FUNCTION(RuntimeReference_ClassOf) { | 1581 RUNTIME_FUNCTION(RuntimeReference_ClassOf) { |
1580 SealHandleScope shs(isolate); | 1582 SealHandleScope shs(isolate); |
1581 DCHECK(args.length() == 1); | 1583 DCHECK(args.length() == 1); |
1582 CONVERT_ARG_CHECKED(Object, obj, 0); | 1584 CONVERT_ARG_CHECKED(Object, obj, 0); |
1583 if (!obj->IsJSReceiver()) return isolate->heap()->null_value(); | 1585 if (!obj->IsJSReceiver()) return isolate->heap()->null_value(); |
1584 return JSReceiver::cast(obj)->class_name(); | 1586 return JSReceiver::cast(obj)->class_name(); |
1585 } | 1587 } |
1586 } | 1588 } |
1587 } // namespace v8::internal | 1589 } // namespace v8::internal |
OLD | NEW |