Revision f230a1cf deps/v8/src/api.cc

View differences:

deps/v8/src/api.cc
77 77
namespace v8 {
78 78

  
79 79
#define ON_BAILOUT(isolate, location, code)                        \
80
  if (IsDeadCheck(isolate, location) ||                            \
81
      IsExecutionTerminatingCheck(isolate)) {                      \
80
  if (IsExecutionTerminatingCheck(isolate)) {                      \
82 81
    code;                                                          \
83 82
    UNREACHABLE();                                                 \
84 83
  }
......
253 252
}
254 253

  
255 254

  
256
static bool ReportV8Dead(const char* location) {
257
  FatalErrorCallback callback = GetFatalErrorHandler();
258
  callback(location, "V8 is no longer usable");
259
  return true;
260
}
261

  
262

  
263 255
static bool ReportEmptyHandle(const char* location) {
264 256
  FatalErrorCallback callback = GetFatalErrorHandler();
265 257
  callback(location, "Reading from empty handle");
......
267 259
}
268 260

  
269 261

  
270
/**
271
 * IsDeadCheck checks that the vm is usable.  If, for instance, the vm has been
272
 * out of memory at some point this check will fail.  It should be called on
273
 * entry to all methods that touch anything in the heap, except destructors
274
 * which you sometimes can't avoid calling after the vm has crashed.  Functions
275
 * that call EnsureInitialized or ON_BAILOUT don't have to also call
276
 * IsDeadCheck.  ON_BAILOUT has the advantage over EnsureInitialized that you
277
 * can arrange to return if the VM is dead.  This is needed to ensure that no VM
278
 * heap allocations are attempted on a dead VM.  EnsureInitialized has the
279
 * advantage over ON_BAILOUT that it actually initializes the VM if this has not
280
 * yet been done.
281
 */
282
static inline bool IsDeadCheck(i::Isolate* isolate, const char* location) {
283
  return !isolate->IsInitialized()
284
      && isolate->IsDead() ? ReportV8Dead(location) : false;
285
}
286

  
287

  
288 262
static inline bool IsExecutionTerminatingCheck(i::Isolate* isolate) {
289 263
  if (!isolate->IsInitialized()) return false;
290 264
  if (isolate->has_scheduled_exception()) {
......
321 295

  
322 296
static inline bool EnsureInitializedForIsolate(i::Isolate* isolate,
323 297
                                               const char* location) {
324
  if (IsDeadCheck(isolate, location)) return false;
325 298
  if (isolate != NULL) {
326 299
    if (isolate->IsInitialized()) return true;
327 300
  }
......
500 473

  
501 474

  
502 475
v8::Handle<Value> ThrowException(v8::Handle<v8::Value> value) {
503
  i::Isolate* isolate = i::Isolate::Current();
504
  if (IsDeadCheck(isolate, "v8::ThrowException()")) {
505
    return v8::Handle<Value>();
506
  }
507
  ENTER_V8(isolate);
508
  // If we're passed an empty handle, we throw an undefined exception
509
  // to deal more gracefully with out of memory situations.
510
  if (value.IsEmpty()) {
511
    isolate->ScheduleThrow(isolate->heap()->undefined_value());
512
  } else {
513
    isolate->ScheduleThrow(*Utils::OpenHandle(*value));
514
  }
515
  return v8::Undefined();
476
  return v8::Isolate::GetCurrent()->ThrowException(value);
516 477
}
517 478

  
518 479

  
......
602 563
  : max_young_space_size_(0),
603 564
    max_old_space_size_(0),
604 565
    max_executable_size_(0),
605
    stack_limit_(NULL),
606
    is_memory_constrained_() { }
566
    stack_limit_(NULL) { }
607 567

  
608 568

  
609 569
bool SetResourceConstraints(ResourceConstraints* constraints) {
......
614 574
  int max_executable_size = constraints->max_executable_size();
615 575
  if (young_space_size != 0 || old_gen_size != 0 || max_executable_size != 0) {
616 576
    // After initialization it's too late to change Heap constraints.
617
    ASSERT(!isolate->IsInitialized());
577
    // TODO(rmcilroy): fix this assert.
578
    // ASSERT(!isolate->IsInitialized());
618 579
    bool result = isolate->heap()->ConfigureHeap(young_space_size / 2,
619 580
                                                 old_gen_size,
620 581
                                                 max_executable_size);
......
624 585
    uintptr_t limit = reinterpret_cast<uintptr_t>(constraints->stack_limit());
625 586
    isolate->stack_guard()->SetStackLimit(limit);
626 587
  }
627
  if (constraints->is_memory_constrained().has_value) {
628
    isolate->set_is_memory_constrained(
629
        constraints->is_memory_constrained().value);
630
  }
631 588
  return true;
632 589
}
633 590

  
634 591

  
635 592
i::Object** V8::GlobalizeReference(i::Isolate* isolate, i::Object** obj) {
636
  if (IsDeadCheck(isolate, "V8::Persistent::New")) return NULL;
637 593
  LOG_API(isolate, "Persistent::New");
638 594
  i::Handle<i::Object> result = isolate->global_handles()->Create(*obj);
639 595
#ifdef DEBUG
......
728 684
}
729 685

  
730 686

  
731
i::Object** HandleScope::CreateHandle(i::Object* value) {
732
  return i::HandleScope::CreateHandle(i::Isolate::Current(), value);
687
i::Object** HandleScope::CreateHandle(i::Isolate* isolate, i::Object* value) {
688
  return i::HandleScope::CreateHandle(isolate, value);
689
}
690

  
691

  
692
i::Object** HandleScope::CreateHandle(i::HeapObject* heap_object,
693
                                      i::Object* value) {
694
  ASSERT(heap_object->IsHeapObject());
695
  return i::HandleScope::CreateHandle(heap_object->GetIsolate(), value);
733 696
}
734 697

  
735 698

  
736
i::Object** HandleScope::CreateHandle(i::Isolate* isolate, i::Object* value) {
737
  ASSERT(isolate == i::Isolate::Current());
738
  return i::HandleScope::CreateHandle(isolate, value);
699
EscapableHandleScope::EscapableHandleScope(Isolate* v8_isolate) {
700
  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
701
  escape_slot_ = CreateHandle(isolate, isolate->heap()->the_hole_value());
702
  Initialize(v8_isolate);
739 703
}
740 704

  
741 705

  
742
i::Object** HandleScope::CreateHandle(i::HeapObject* value) {
743
  ASSERT(value->IsHeapObject());
744
  return reinterpret_cast<i::Object**>(
745
      i::HandleScope::CreateHandle(value->GetIsolate(), value));
706
i::Object** EscapableHandleScope::Escape(i::Object** escape_value) {
707
  ApiCheck(*escape_slot_ == isolate_->heap()->the_hole_value(),
708
           "EscapeableHandleScope::Escape",
709
           "Escape value set twice");
710
  if (escape_value == NULL) {
711
    *escape_slot_ = isolate_->heap()->undefined_value();
712
    return NULL;
713
  }
714
  *escape_slot_ = *escape_value;
715
  return escape_slot_;
746 716
}
747 717

  
748 718

  
749 719
void Context::Enter() {
750 720
  i::Handle<i::Context> env = Utils::OpenHandle(this);
751 721
  i::Isolate* isolate = env->GetIsolate();
752
  if (IsDeadCheck(isolate, "v8::Context::Enter()")) return;
753 722
  ENTER_V8(isolate);
754

  
755 723
  isolate->handle_scope_implementer()->EnterContext(env);
756

  
757 724
  isolate->handle_scope_implementer()->SaveContext(isolate->context());
758 725
  isolate->set_context(*env);
759 726
}
760 727

  
761 728

  
762 729
void Context::Exit() {
763
  // Exit is essentially a static function and doesn't use the
764
  // receiver, so we have to get the current isolate from the thread
765
  // local.
730
  // TODO(dcarney): fix this once chrome is fixed.
766 731
  i::Isolate* isolate = i::Isolate::Current();
767
  if (!isolate->IsInitialized()) return;
768

  
769
  if (!ApiCheck(isolate->handle_scope_implementer()->LeaveLastContext(),
732
  i::Handle<i::Context> context = i::Handle<i::Context>::null();
733
  ENTER_V8(isolate);
734
  if (!ApiCheck(isolate->handle_scope_implementer()->LeaveContext(context),
770 735
                "v8::Context::Exit()",
771 736
                "Cannot exit non-entered context")) {
772 737
    return;
773 738
  }
774

  
775 739
  // Content of 'last_context' could be NULL.
776 740
  i::Context* last_context =
777 741
      isolate->handle_scope_implementer()->RestoreContext();
......
797 761
                                                bool can_grow,
798 762
                                                const char* location) {
799 763
  i::Handle<i::Context> env = Utils::OpenHandle(context);
800
  bool ok = !IsDeadCheck(env->GetIsolate(), location) &&
764
  bool ok =
801 765
      ApiCheck(env->IsNativeContext(), location, "Not a native context") &&
802 766
      ApiCheck(index >= 0, location, "Negative index");
803 767
  if (!ok) return i::Handle<i::FixedArray>();
......
974 938
                   v8::Handle<Data> value,
975 939
                   v8::PropertyAttribute attribute) {
976 940
  i::Isolate* isolate = i::Isolate::Current();
977
  if (IsDeadCheck(isolate, "v8::Template::Set()")) return;
978 941
  ENTER_V8(isolate);
979 942
  i::HandleScope scope(isolate);
980 943
  const int kSize = 3;
......
993 956
    v8::PropertyAttribute attribute,
994 957
    v8::AccessControl access_control) {
995 958
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
996
  if (IsDeadCheck(isolate, "v8::Template::SetAccessor()")) return;
997 959
  ENTER_V8(isolate);
998 960
  ASSERT(!name.IsEmpty());
999 961
  ASSERT(!getter.IsEmpty() || !setter.IsEmpty());
......
1019 981

  
1020 982
Local<ObjectTemplate> FunctionTemplate::PrototypeTemplate() {
1021 983
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1022
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::PrototypeTemplate()")) {
1023
    return Local<ObjectTemplate>();
1024
  }
1025 984
  ENTER_V8(isolate);
1026 985
  i::Handle<i::Object> result(Utils::OpenHandle(this)->prototype_template(),
1027 986
                              isolate);
......
1035 994

  
1036 995
void FunctionTemplate::Inherit(v8::Handle<FunctionTemplate> value) {
1037 996
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1038
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::Inherit()")) return;
1039 997
  ENTER_V8(isolate);
1040 998
  Utils::OpenHandle(this)->set_parent_template(*Utils::OpenHandle(*value));
1041 999
}
......
1061 1019
  }
1062 1020
  obj->set_serial_number(i::Smi::FromInt(next_serial_number));
1063 1021
  if (callback != 0) {
1064
    if (data.IsEmpty()) data = v8::Undefined();
1022
    if (data.IsEmpty()) {
1023
      data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1024
    }
1065 1025
    Utils::ToLocal(obj)->SetCallHandler(callback, data);
1066 1026
  }
1067 1027
  obj->set_length(length);
......
1278 1238
void FunctionTemplate::SetCallHandler(FunctionCallback callback,
1279 1239
                                      v8::Handle<Value> data) {
1280 1240
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1281
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetCallHandler()")) return;
1282 1241
  ENTER_V8(isolate);
1283 1242
  i::HandleScope scope(isolate);
1284 1243
  i::Handle<i::Struct> struct_obj =
......
1286 1245
  i::Handle<i::CallHandlerInfo> obj =
1287 1246
      i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1288 1247
  SET_FIELD_WRAPPED(obj, set_callback, callback);
1289
  if (data.IsEmpty()) data = v8::Undefined();
1248
  if (data.IsEmpty()) {
1249
    data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1250
  }
1290 1251
  obj->set_data(*Utils::OpenHandle(*data));
1291 1252
  Utils::OpenHandle(this)->set_call_code(*obj);
1292 1253
}
......
1324 1285
      isolate->factory()->NewExecutableAccessorInfo();
1325 1286
  SET_FIELD_WRAPPED(obj, set_getter, getter);
1326 1287
  SET_FIELD_WRAPPED(obj, set_setter, setter);
1327
  if (data.IsEmpty()) data = v8::Undefined();
1288
  if (data.IsEmpty()) {
1289
    data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1290
  }
1328 1291
  obj->set_data(*Utils::OpenHandle(*data));
1329 1292
  return SetAccessorInfoProperties(obj, name, settings, attributes, signature);
1330 1293
}
......
1349 1312

  
1350 1313
Local<ObjectTemplate> FunctionTemplate::InstanceTemplate() {
1351 1314
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1352
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::InstanceTemplate()")
1353
      || EmptyCheck("v8::FunctionTemplate::InstanceTemplate()", this))
1315
  if (EmptyCheck("v8::FunctionTemplate::InstanceTemplate()", this))
1354 1316
    return Local<ObjectTemplate>();
1355 1317
  ENTER_V8(isolate);
1356 1318
  i::Handle<i::FunctionTemplateInfo> handle = Utils::OpenHandle(this);
......
1367 1329

  
1368 1330
void FunctionTemplate::SetLength(int length) {
1369 1331
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1370
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetLength()")) return;
1371 1332
  ENTER_V8(isolate);
1372 1333
  Utils::OpenHandle(this)->set_length(length);
1373 1334
}
......
1375 1336

  
1376 1337
void FunctionTemplate::SetClassName(Handle<String> name) {
1377 1338
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1378
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetClassName()")) return;
1379 1339
  ENTER_V8(isolate);
1380 1340
  Utils::OpenHandle(this)->set_class_name(*Utils::OpenHandle(*name));
1381 1341
}
......
1383 1343

  
1384 1344
void FunctionTemplate::SetHiddenPrototype(bool value) {
1385 1345
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1386
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetHiddenPrototype()")) {
1387
    return;
1388
  }
1389 1346
  ENTER_V8(isolate);
1390 1347
  Utils::OpenHandle(this)->set_hidden_prototype(value);
1391 1348
}
......
1393 1350

  
1394 1351
void FunctionTemplate::ReadOnlyPrototype() {
1395 1352
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1396
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::ReadOnlyPrototype()")) {
1397
    return;
1398
  }
1399 1353
  ENTER_V8(isolate);
1400 1354
  Utils::OpenHandle(this)->set_read_only_prototype(true);
1401 1355
}
......
1403 1357

  
1404 1358
void FunctionTemplate::RemovePrototype() {
1405 1359
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1406
  if (IsDeadCheck(isolate, "v8::FunctionTemplate::RemovePrototype()")) {
1407
    return;
1408
  }
1409 1360
  ENTER_V8(isolate);
1410 1361
  Utils::OpenHandle(this)->set_remove_prototype(true);
1411 1362
}
......
1422 1373
Local<ObjectTemplate> ObjectTemplate::New(
1423 1374
      v8::Handle<FunctionTemplate> constructor) {
1424 1375
  i::Isolate* isolate = i::Isolate::Current();
1425
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::New()")) {
1426
    return Local<ObjectTemplate>();
1427
  }
1428 1376
  EnsureInitializedForIsolate(isolate, "v8::ObjectTemplate::New()");
1429 1377
  LOG_API(isolate, "ObjectTemplate::New");
1430 1378
  ENTER_V8(isolate);
......
1495 1443
    PropertyAttribute attribute,
1496 1444
    v8::Local<AccessorSignature> signature) {
1497 1445
  i::Isolate* isolate = Utils::OpenHandle(template_obj)->GetIsolate();
1498
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetAccessor()")) return false;
1499 1446
  ENTER_V8(isolate);
1500 1447
  i::HandleScope scope(isolate);
1501 1448
  i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(
......
1551 1498
    NamedPropertyEnumeratorCallback enumerator,
1552 1499
    Handle<Value> data) {
1553 1500
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1554
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetNamedPropertyHandler()")) {
1555
    return;
1556
  }
1557 1501
  ENTER_V8(isolate);
1558 1502
  i::HandleScope scope(isolate);
1559 1503
  EnsureConstructor(this);
......
1571 1515
  if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1572 1516
  if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1573 1517

  
1574
  if (data.IsEmpty()) data = v8::Undefined();
1518
  if (data.IsEmpty()) {
1519
    data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1520
  }
1575 1521
  obj->set_data(*Utils::OpenHandle(*data));
1576 1522
  cons->set_named_property_handler(*obj);
1577 1523
}
......
1579 1525

  
1580 1526
void ObjectTemplate::MarkAsUndetectable() {
1581 1527
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1582
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::MarkAsUndetectable()")) return;
1583 1528
  ENTER_V8(isolate);
1584 1529
  i::HandleScope scope(isolate);
1585 1530
  EnsureConstructor(this);
......
1596 1541
      Handle<Value> data,
1597 1542
      bool turned_on_by_default) {
1598 1543
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1599
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetAccessCheckCallbacks()")) {
1600
    return;
1601
  }
1602 1544
  ENTER_V8(isolate);
1603 1545
  i::HandleScope scope(isolate);
1604 1546
  EnsureConstructor(this);
......
1611 1553
  SET_FIELD_WRAPPED(info, set_named_callback, named_callback);
1612 1554
  SET_FIELD_WRAPPED(info, set_indexed_callback, indexed_callback);
1613 1555

  
1614
  if (data.IsEmpty()) data = v8::Undefined();
1556
  if (data.IsEmpty()) {
1557
    data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1558
  }
1615 1559
  info->set_data(*Utils::OpenHandle(*data));
1616 1560

  
1617 1561
  i::FunctionTemplateInfo* constructor =
......
1630 1574
      IndexedPropertyEnumeratorCallback enumerator,
1631 1575
      Handle<Value> data) {
1632 1576
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1633
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetIndexedPropertyHandler()")) {
1634
    return;
1635
  }
1636 1577
  ENTER_V8(isolate);
1637 1578
  i::HandleScope scope(isolate);
1638 1579
  EnsureConstructor(this);
......
1650 1591
  if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1651 1592
  if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1652 1593

  
1653
  if (data.IsEmpty()) data = v8::Undefined();
1594
  if (data.IsEmpty()) {
1595
    data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1596
  }
1654 1597
  obj->set_data(*Utils::OpenHandle(*data));
1655 1598
  cons->set_indexed_property_handler(*obj);
1656 1599
}
......
1659 1602
void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback,
1660 1603
                                              Handle<Value> data) {
1661 1604
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1662
  if (IsDeadCheck(isolate,
1663
                  "v8::ObjectTemplate::SetCallAsFunctionHandler()")) {
1664
    return;
1665
  }
1666 1605
  ENTER_V8(isolate);
1667 1606
  i::HandleScope scope(isolate);
1668 1607
  EnsureConstructor(this);
......
1674 1613
  i::Handle<i::CallHandlerInfo> obj =
1675 1614
      i::Handle<i::CallHandlerInfo>::cast(struct_obj);
1676 1615
  SET_FIELD_WRAPPED(obj, set_callback, callback);
1677
  if (data.IsEmpty()) data = v8::Undefined();
1616
  if (data.IsEmpty()) {
1617
    data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1618
  }
1678 1619
  obj->set_data(*Utils::OpenHandle(*data));
1679 1620
  cons->set_instance_call_handler(*obj);
1680 1621
}
1681 1622

  
1682 1623

  
1683 1624
int ObjectTemplate::InternalFieldCount() {
1684
  if (IsDeadCheck(Utils::OpenHandle(this)->GetIsolate(),
1685
                  "v8::ObjectTemplate::InternalFieldCount()")) {
1686
    return 0;
1687
  }
1688 1625
  return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value();
1689 1626
}
1690 1627

  
1691 1628

  
1692 1629
void ObjectTemplate::SetInternalFieldCount(int value) {
1693 1630
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1694
  if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetInternalFieldCount()")) {
1695
    return;
1696
  }
1697 1631
  if (!ApiCheck(i::Smi::IsValid(value),
1698 1632
                "v8::ObjectTemplate::SetInternalFieldCount()",
1699 1633
                "Invalid internal field count")) {
......
1713 1647
// --- S c r i p t D a t a ---
1714 1648

  
1715 1649

  
1716
ScriptData* ScriptData::PreCompile(const char* input, int length) {
1650
ScriptData* ScriptData::PreCompile(v8::Isolate* isolate,
1651
                                   const char* input,
1652
                                   int length) {
1717 1653
  i::Utf8ToUtf16CharacterStream stream(
1718 1654
      reinterpret_cast<const unsigned char*>(input), length);
1719
  return i::PreParserApi::PreParse(i::Isolate::Current(), &stream);
1655
  return i::PreParserApi::PreParse(
1656
      reinterpret_cast<i::Isolate*>(isolate), &stream);
1720 1657
}
1721 1658

  
1722 1659

  
......
1763 1700
                          v8::ScriptOrigin* origin,
1764 1701
                          v8::ScriptData* pre_data,
1765 1702
                          v8::Handle<String> script_data) {
1766
  i::Isolate* isolate = i::Isolate::Current();
1703
  i::Handle<i::String> str = Utils::OpenHandle(*source);
1704
  i::Isolate* isolate = str->GetIsolate();
1767 1705
  ON_BAILOUT(isolate, "v8::Script::New()", return Local<Script>());
1768 1706
  LOG_API(isolate, "Script::New");
1769 1707
  ENTER_V8(isolate);
1770 1708
  i::SharedFunctionInfo* raw_result = NULL;
1771 1709
  { i::HandleScope scope(isolate);
1772
    i::Handle<i::String> str = Utils::OpenHandle(*source);
1773 1710
    i::Handle<i::Object> name_obj;
1774 1711
    int line_offset = 0;
1775 1712
    int column_offset = 0;
......
1786 1723
            static_cast<int>(origin->ResourceColumnOffset()->Value());
1787 1724
      }
1788 1725
      if (!origin->ResourceIsSharedCrossOrigin().IsEmpty()) {
1726
        v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
1789 1727
        is_shared_cross_origin =
1790
            origin->ResourceIsSharedCrossOrigin() == v8::True();
1728
            origin->ResourceIsSharedCrossOrigin() == v8::True(v8_isolate);
1791 1729
      }
1792 1730
    }
1793 1731
    EXCEPTION_PREAMBLE(isolate);
......
1831 1769
                              v8::ScriptOrigin* origin,
1832 1770
                              v8::ScriptData* pre_data,
1833 1771
                              v8::Handle<String> script_data) {
1834
  i::Isolate* isolate = i::Isolate::Current();
1772
  i::Handle<i::String> str = Utils::OpenHandle(*source);
1773
  i::Isolate* isolate = str->GetIsolate();
1835 1774
  ON_BAILOUT(isolate, "v8::Script::Compile()", return Local<Script>());
1836 1775
  LOG_API(isolate, "Script::Compile");
1837 1776
  ENTER_V8(isolate);
......
1858 1797

  
1859 1798

  
1860 1799
Local<Value> Script::Run() {
1861
  i::Isolate* isolate = i::Isolate::Current();
1800
  // If execution is terminating, Compile(script)->Run() requires this check.
1801
  if (this == NULL) return Local<Value>();
1802
  i::Handle<i::HeapObject> obj =
1803
      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this));
1804
  i::Isolate* isolate = obj->GetIsolate();
1862 1805
  ON_BAILOUT(isolate, "v8::Script::Run()", return Local<Value>());
1863 1806
  LOG_API(isolate, "Script::Run");
1864 1807
  ENTER_V8(isolate);
......
1867 1810
  i::Object* raw_result = NULL;
1868 1811
  {
1869 1812
    i::HandleScope scope(isolate);
1870
    i::Handle<i::Object> obj = Utils::OpenHandle(this);
1871 1813
    i::Handle<i::JSFunction> fun;
1872 1814
    if (obj->IsSharedFunctionInfo()) {
1873 1815
      i::Handle<i::SharedFunctionInfo>
......
1905 1847

  
1906 1848

  
1907 1849
Local<Value> Script::Id() {
1908
  i::Isolate* isolate = i::Isolate::Current();
1850
  i::Handle<i::HeapObject> obj =
1851
      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this));
1852
  i::Isolate* isolate = obj->GetIsolate();
1909 1853
  ON_BAILOUT(isolate, "v8::Script::Id()", return Local<Value>());
1910 1854
  LOG_API(isolate, "Script::Id");
1911 1855
  i::Object* raw_id = NULL;
......
1922 1866

  
1923 1867

  
1924 1868
int Script::GetId() {
1925
  i::Isolate* isolate = i::Isolate::Current();
1869
  i::Handle<i::HeapObject> obj =
1870
      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this));
1871
  i::Isolate* isolate = obj->GetIsolate();
1926 1872
  ON_BAILOUT(isolate, "v8::Script::Id()", return -1);
1927 1873
  LOG_API(isolate, "Script::Id");
1928 1874
  {
......
1935 1881

  
1936 1882

  
1937 1883
int Script::GetLineNumber(int code_pos) {
1938
  i::Isolate* isolate = i::Isolate::Current();
1884
  i::Handle<i::HeapObject> obj =
1885
      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this));
1886
  i::Isolate* isolate = obj->GetIsolate();
1939 1887
  ON_BAILOUT(isolate, "v8::Script::GetLineNumber()", return -1);
1940 1888
  LOG_API(isolate, "Script::GetLineNumber");
1941
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
1942 1889
  if (obj->IsScript()) {
1943 1890
    i::Handle<i::Script> script = i::Handle<i::Script>(i::Script::cast(*obj));
1944 1891
    return i::GetScriptLineNumber(script, code_pos);
......
1949 1896

  
1950 1897

  
1951 1898
Handle<Value> Script::GetScriptName() {
1952
  i::Isolate* isolate = i::Isolate::Current();
1899
  i::Handle<i::HeapObject> obj =
1900
      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this));
1901
  i::Isolate* isolate = obj->GetIsolate();
1953 1902
  ON_BAILOUT(isolate, "v8::Script::GetName()", return Handle<String>());
1954 1903
  LOG_API(isolate, "Script::GetName");
1955
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
1956 1904
  if (obj->IsScript()) {
1957 1905
    i::Object* name = i::Script::cast(*obj)->name();
1958 1906
    return Utils::ToLocal(i::Handle<i::Object>(name, isolate));
......
1963 1911

  
1964 1912

  
1965 1913
void Script::SetData(v8::Handle<String> data) {
1966
  i::Isolate* isolate = i::Isolate::Current();
1914
  i::Handle<i::HeapObject> obj =
1915
      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this));
1916
  i::Isolate* isolate = obj->GetIsolate();
1967 1917
  ON_BAILOUT(isolate, "v8::Script::SetData()", return);
1968 1918
  LOG_API(isolate, "Script::SetData");
1969 1919
  {
......
1995 1945
v8::TryCatch::~TryCatch() {
1996 1946
  ASSERT(isolate_ == i::Isolate::Current());
1997 1947
  if (rethrow_) {
1998
    v8::HandleScope scope(reinterpret_cast<Isolate*>(isolate_));
1999
    v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(Exception());
1948
    v8::Isolate* isolate = reinterpret_cast<Isolate*>(isolate_);
1949
    v8::HandleScope scope(isolate);
1950
    v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(isolate, Exception());
2000 1951
    if (HasCaught() && capture_message_) {
2001 1952
      // If an exception was caught and rethrow_ is indicated, the saved
2002 1953
      // message, script, and location need to be restored to Isolate TLS
......
2006 1957
      isolate_->RestorePendingMessageFromTryCatch(this);
2007 1958
    }
2008 1959
    isolate_->UnregisterTryCatchHandler(this);
2009
    v8::ThrowException(exc);
1960
    reinterpret_cast<Isolate*>(isolate_)->ThrowException(exc);
2010 1961
    ASSERT(!isolate_->thread_local_top()->rethrowing_message_);
2011 1962
  } else {
2012 1963
    isolate_->UnregisterTryCatchHandler(this);
......
2032 1983
v8::Handle<v8::Value> v8::TryCatch::ReThrow() {
2033 1984
  if (!HasCaught()) return v8::Local<v8::Value>();
2034 1985
  rethrow_ = true;
2035
  return v8::Undefined();
1986
  return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate_));
2036 1987
}
2037 1988

  
2038 1989

  
......
2056 2007
    i::HandleScope scope(isolate_);
2057 2008
    i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_);
2058 2009
    i::Handle<i::String> name = isolate_->factory()->stack_string();
2059
    if (!obj->HasProperty(*name)) return v8::Local<Value>();
2010
    if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>();
2060 2011
    i::Handle<i::Object> value = i::GetProperty(isolate_, obj, name);
2061 2012
    if (value.is_null()) return v8::Local<Value>();
2062 2013
    return v8::Utils::ToLocal(scope.CloseAndEscape(value));
......
2116 2067

  
2117 2068
v8::Handle<Value> Message::GetScriptResourceName() const {
2118 2069
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2119
  if (IsDeadCheck(isolate, "v8::Message::GetScriptResourceName()")) {
2120
    return Local<String>();
2121
  }
2122 2070
  ENTER_V8(isolate);
2123 2071
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2124 2072
  i::Handle<i::JSMessageObject> message =
......
2135 2083

  
2136 2084
v8::Handle<Value> Message::GetScriptData() const {
2137 2085
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2138
  if (IsDeadCheck(isolate, "v8::Message::GetScriptResourceData()")) {
2139
    return Local<Value>();
2140
  }
2141 2086
  ENTER_V8(isolate);
2142 2087
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2143 2088
  i::Handle<i::JSMessageObject> message =
......
2153 2098

  
2154 2099
v8::Handle<v8::StackTrace> Message::GetStackTrace() const {
2155 2100
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2156
  if (IsDeadCheck(isolate, "v8::Message::GetStackTrace()")) {
2157
    return Local<v8::StackTrace>();
2158
  }
2159 2101
  ENTER_V8(isolate);
2160 2102
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2161 2103
  i::Handle<i::JSMessageObject> message =
......
2215 2157

  
2216 2158
int Message::GetStartPosition() const {
2217 2159
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2218
  if (IsDeadCheck(isolate, "v8::Message::GetStartPosition()")) return 0;
2219 2160
  ENTER_V8(isolate);
2220 2161
  i::HandleScope scope(isolate);
2221 2162
  i::Handle<i::JSMessageObject> message =
......
2226 2167

  
2227 2168
int Message::GetEndPosition() const {
2228 2169
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2229
  if (IsDeadCheck(isolate, "v8::Message::GetEndPosition()")) return 0;
2230 2170
  ENTER_V8(isolate);
2231 2171
  i::HandleScope scope(isolate);
2232 2172
  i::Handle<i::JSMessageObject> message =
......
2237 2177

  
2238 2178
int Message::GetStartColumn() const {
2239 2179
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2240
  if (IsDeadCheck(isolate, "v8::Message::GetStartColumn()")) {
2241
    return kNoColumnInfo;
2242
  }
2243 2180
  ENTER_V8(isolate);
2244 2181
  i::HandleScope scope(isolate);
2245 2182
  i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this);
......
2255 2192

  
2256 2193
int Message::GetEndColumn() const {
2257 2194
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2258
  if (IsDeadCheck(isolate, "v8::Message::GetEndColumn()")) return kNoColumnInfo;
2259 2195
  ENTER_V8(isolate);
2260 2196
  i::HandleScope scope(isolate);
2261 2197
  i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this);
......
2275 2211

  
2276 2212
bool Message::IsSharedCrossOrigin() const {
2277 2213
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2278
  if (IsDeadCheck(isolate, "v8::Message::IsSharedCrossOrigin()")) return 0;
2279 2214
  ENTER_V8(isolate);
2280 2215
  i::HandleScope scope(isolate);
2281 2216
  i::Handle<i::JSMessageObject> message =
......
2307 2242

  
2308 2243
void Message::PrintCurrentStackTrace(FILE* out) {
2309 2244
  i::Isolate* isolate = i::Isolate::Current();
2310
  if (IsDeadCheck(isolate, "v8::Message::PrintCurrentStackTrace()")) return;
2311 2245
  ENTER_V8(isolate);
2312 2246
  isolate->PrintCurrentStackTrace(out);
2313 2247
}
......
2317 2251

  
2318 2252
Local<StackFrame> StackTrace::GetFrame(uint32_t index) const {
2319 2253
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2320
  if (IsDeadCheck(isolate, "v8::StackTrace::GetFrame()")) {
2321
    return Local<StackFrame>();
2322
  }
2323 2254
  ENTER_V8(isolate);
2324 2255
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2325 2256
  i::Handle<i::JSArray> self = Utils::OpenHandle(this);
......
2331 2262

  
2332 2263
int StackTrace::GetFrameCount() const {
2333 2264
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2334
  if (IsDeadCheck(isolate, "v8::StackTrace::GetFrameCount()")) return -1;
2335 2265
  ENTER_V8(isolate);
2336 2266
  return i::Smi::cast(Utils::OpenHandle(this)->length())->value();
2337 2267
}
......
2339 2269

  
2340 2270
Local<Array> StackTrace::AsArray() {
2341 2271
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2342
  if (IsDeadCheck(isolate, "v8::StackTrace::AsArray()")) Local<Array>();
2343 2272
  ENTER_V8(isolate);
2344 2273
  return Utils::ToLocal(Utils::OpenHandle(this));
2345 2274
}
......
2348 2277
Local<StackTrace> StackTrace::CurrentStackTrace(int frame_limit,
2349 2278
    StackTraceOptions options) {
2350 2279
  i::Isolate* isolate = i::Isolate::Current();
2351
  if (IsDeadCheck(isolate, "v8::StackTrace::CurrentStackTrace()")) {
2352
    Local<StackTrace>();
2353
  }
2354 2280
  ENTER_V8(isolate);
2355 2281
  i::Handle<i::JSArray> stackTrace =
2356 2282
      isolate->CaptureCurrentStackTrace(frame_limit, options);
......
2362 2288

  
2363 2289
int StackFrame::GetLineNumber() const {
2364 2290
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2365
  if (IsDeadCheck(isolate, "v8::StackFrame::GetLineNumber()")) {
2366
    return Message::kNoLineNumberInfo;
2367
  }
2368 2291
  ENTER_V8(isolate);
2369 2292
  i::HandleScope scope(isolate);
2370 2293
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2378 2301

  
2379 2302
int StackFrame::GetColumn() const {
2380 2303
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2381
  if (IsDeadCheck(isolate, "v8::StackFrame::GetColumn()")) {
2382
    return Message::kNoColumnInfo;
2383
  }
2384 2304
  ENTER_V8(isolate);
2385 2305
  i::HandleScope scope(isolate);
2386 2306
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2394 2314

  
2395 2315
int StackFrame::GetScriptId() const {
2396 2316
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2397
  if (IsDeadCheck(isolate, "v8::StackFrame::GetScriptId()")) {
2398
    return Message::kNoScriptIdInfo;
2399
  }
2400 2317
  ENTER_V8(isolate);
2401 2318
  i::HandleScope scope(isolate);
2402 2319
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2410 2327

  
2411 2328
Local<String> StackFrame::GetScriptName() const {
2412 2329
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2413
  if (IsDeadCheck(isolate, "v8::StackFrame::GetScriptName()")) {
2414
    return Local<String>();
2415
  }
2416 2330
  ENTER_V8(isolate);
2417 2331
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2418 2332
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2426 2340

  
2427 2341
Local<String> StackFrame::GetScriptNameOrSourceURL() const {
2428 2342
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2429
  if (IsDeadCheck(isolate, "v8::StackFrame::GetScriptNameOrSourceURL()")) {
2430
    return Local<String>();
2431
  }
2432 2343
  ENTER_V8(isolate);
2433 2344
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2434 2345
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2442 2353

  
2443 2354
Local<String> StackFrame::GetFunctionName() const {
2444 2355
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2445
  if (IsDeadCheck(isolate, "v8::StackFrame::GetFunctionName()")) {
2446
    return Local<String>();
2447
  }
2448 2356
  ENTER_V8(isolate);
2449 2357
  HandleScope scope(reinterpret_cast<Isolate*>(isolate));
2450 2358
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2458 2366

  
2459 2367
bool StackFrame::IsEval() const {
2460 2368
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2461
  if (IsDeadCheck(isolate, "v8::StackFrame::IsEval()")) return false;
2462 2369
  ENTER_V8(isolate);
2463 2370
  i::HandleScope scope(isolate);
2464 2371
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2469 2376

  
2470 2377
bool StackFrame::IsConstructor() const {
2471 2378
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2472
  if (IsDeadCheck(isolate, "v8::StackFrame::IsConstructor()")) return false;
2473 2379
  ENTER_V8(isolate);
2474 2380
  i::HandleScope scope(isolate);
2475 2381
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
......
2504 2410
// --- D a t a ---
2505 2411

  
2506 2412
bool Value::FullIsUndefined() const {
2507
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsUndefined()")) {
2508
    return false;
2509
  }
2510 2413
  bool result = Utils::OpenHandle(this)->IsUndefined();
2511 2414
  ASSERT_EQ(result, QuickIsUndefined());
2512 2415
  return result;
......
2514 2417

  
2515 2418

  
2516 2419
bool Value::FullIsNull() const {
2517
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsNull()")) return false;
2518 2420
  bool result = Utils::OpenHandle(this)->IsNull();
2519 2421
  ASSERT_EQ(result, QuickIsNull());
2520 2422
  return result;
......
2522 2424

  
2523 2425

  
2524 2426
bool Value::IsTrue() const {
2525
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsTrue()")) return false;
2526 2427
  return Utils::OpenHandle(this)->IsTrue();
2527 2428
}
2528 2429

  
2529 2430

  
2530 2431
bool Value::IsFalse() const {
2531
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsFalse()")) return false;
2532 2432
  return Utils::OpenHandle(this)->IsFalse();
2533 2433
}
2534 2434

  
2535 2435

  
2536 2436
bool Value::IsFunction() const {
2537
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsFunction()")) {
2538
    return false;
2539
  }
2540 2437
  return Utils::OpenHandle(this)->IsJSFunction();
2541 2438
}
2542 2439

  
2543 2440

  
2544 2441
bool Value::FullIsString() const {
2545
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsString()")) return false;
2546 2442
  bool result = Utils::OpenHandle(this)->IsString();
2547 2443
  ASSERT_EQ(result, QuickIsString());
2548 2444
  return result;
......
2550 2446

  
2551 2447

  
2552 2448
bool Value::IsSymbol() const {
2553
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsSymbol()")) return false;
2554 2449
  return Utils::OpenHandle(this)->IsSymbol();
2555 2450
}
2556 2451

  
2557 2452

  
2558 2453
bool Value::IsArray() const {
2559
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsArray()")) return false;
2560 2454
  return Utils::OpenHandle(this)->IsJSArray();
2561 2455
}
2562 2456

  
2563 2457

  
2564 2458
bool Value::IsArrayBuffer() const {
2565
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsArrayBuffer()"))
2566
    return false;
2567 2459
  return Utils::OpenHandle(this)->IsJSArrayBuffer();
2568 2460
}
2569 2461

  
......
2574 2466

  
2575 2467

  
2576 2468
bool Value::IsTypedArray() const {
2577
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsArrayBuffer()"))
2578
    return false;
2579 2469
  return Utils::OpenHandle(this)->IsJSTypedArray();
2580 2470
}
2581 2471

  
......
2594 2484

  
2595 2485
#define VALUE_IS_TYPED_ARRAY(TypedArray, type_const)                          \
2596 2486
  bool Value::Is##TypedArray() const {                                        \
2597
    if (IsDeadCheck(i::Isolate::Current(), "v8::Value::Is" #TypedArray "()")) \
2598
      return false;                                                           \
2599 2487
    i::Handle<i::Object> obj = Utils::OpenHandle(this);                       \
2600 2488
    if (!obj->IsJSTypedArray()) return false;                                 \
2601 2489
    return i::JSTypedArray::cast(*obj)->type() == type_const;                 \
......
2612 2500

  
2613 2501

  
2614 2502
bool Value::IsObject() const {
2615
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsObject()")) return false;
2616 2503
  return Utils::OpenHandle(this)->IsJSObject();
2617 2504
}
2618 2505

  
2619 2506

  
2620 2507
bool Value::IsNumber() const {
2621
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsNumber()")) return false;
2622 2508
  return Utils::OpenHandle(this)->IsNumber();
2623 2509
}
2624 2510

  
2625 2511

  
2626 2512
bool Value::IsBoolean() const {
2627
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsBoolean()")) {
2628
    return false;
2629
  }
2630 2513
  return Utils::OpenHandle(this)->IsBoolean();
2631 2514
}
2632 2515

  
2633 2516

  
2634 2517
bool Value::IsExternal() const {
2635
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsExternal()")) {
2636
    return false;
2637
  }
2638 2518
  return Utils::OpenHandle(this)->IsExternal();
2639 2519
}
2640 2520

  
2641 2521

  
2642 2522
bool Value::IsInt32() const {
2643
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsInt32()")) return false;
2644 2523
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2645 2524
  if (obj->IsSmi()) return true;
2646 2525
  if (obj->IsNumber()) {
......
2657 2536

  
2658 2537

  
2659 2538
bool Value::IsUint32() const {
2660
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsUint32()")) return false;
2661 2539
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2662 2540
  if (obj->IsSmi()) return i::Smi::cast(*obj)->value() >= 0;
2663 2541
  if (obj->IsNumber()) {
......
2675 2553

  
2676 2554
bool Value::IsDate() const {
2677 2555
  i::Isolate* isolate = i::Isolate::Current();
2678
  if (IsDeadCheck(isolate, "v8::Value::IsDate()")) return false;
2679 2556
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2680 2557
  return obj->HasSpecificClassOf(isolate->heap()->Date_string());
2681 2558
}
......
2683 2560

  
2684 2561
bool Value::IsStringObject() const {
2685 2562
  i::Isolate* isolate = i::Isolate::Current();
2686
  if (IsDeadCheck(isolate, "v8::Value::IsStringObject()")) return false;
2687 2563
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2688 2564
  return obj->HasSpecificClassOf(isolate->heap()->String_string());
2689 2565
}
......
2693 2569
  // TODO(svenpanne): these and other test functions should be written such
2694 2570
  // that they do not use Isolate::Current().
2695 2571
  i::Isolate* isolate = i::Isolate::Current();
2696
  if (IsDeadCheck(isolate, "v8::Value::IsSymbolObject()")) return false;
2697 2572
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2698 2573
  return obj->HasSpecificClassOf(isolate->heap()->Symbol_string());
2699 2574
}
......
2701 2576

  
2702 2577
bool Value::IsNumberObject() const {
2703 2578
  i::Isolate* isolate = i::Isolate::Current();
2704
  if (IsDeadCheck(isolate, "v8::Value::IsNumberObject()")) return false;
2705 2579
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2706 2580
  return obj->HasSpecificClassOf(isolate->heap()->Number_string());
2707 2581
}
......
2729 2603

  
2730 2604
bool Value::IsNativeError() const {
2731 2605
  i::Isolate* isolate = i::Isolate::Current();
2732
  if (IsDeadCheck(isolate, "v8::Value::IsNativeError()")) return false;
2733 2606
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2734 2607
  if (obj->IsJSObject()) {
2735 2608
    i::Handle<i::JSObject> js_obj(i::JSObject::cast(*obj));
......
2748 2621

  
2749 2622
bool Value::IsBooleanObject() const {
2750 2623
  i::Isolate* isolate = i::Isolate::Current();
2751
  if (IsDeadCheck(isolate, "v8::Value::IsBooleanObject()")) return false;
2752 2624
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2753 2625
  return obj->HasSpecificClassOf(isolate->heap()->Boolean_string());
2754 2626
}
2755 2627

  
2756 2628

  
2757 2629
bool Value::IsRegExp() const {
2758
  if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsRegExp()")) return false;
2759 2630
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
2760 2631
  return obj->IsJSRegExp();
2761 2632
}
......
2768 2639
    str = obj;
2769 2640
  } else {
2770 2641
    i::Isolate* isolate = i::Isolate::Current();
2771
    if (IsDeadCheck(isolate, "v8::Value::ToString()")) {
2772
      return Local<String>();
2773
    }
2774 2642
    LOG_API(isolate, "ToString");
2775 2643
    ENTER_V8(isolate);
2776 2644
    EXCEPTION_PREAMBLE(isolate);
......
2788 2656
    str = obj;
2789 2657
  } else {
2790 2658
    i::Isolate* isolate = i::Isolate::Current();
2791
    if (IsDeadCheck(isolate, "v8::Value::ToDetailString()")) {
2792
      return Local<String>();
2793
    }
2794 2659
    LOG_API(isolate, "ToDetailString");
2795 2660
    ENTER_V8(isolate);
2796 2661
    EXCEPTION_PREAMBLE(isolate);
......
2808 2673
    val = obj;
2809 2674
  } else {
2810 2675
    i::Isolate* isolate = i::Isolate::Current();
2811
    if (IsDeadCheck(isolate, "v8::Value::ToObject()")) {
2812
      return Local<v8::Object>();
2813
    }
2814 2676
    LOG_API(isolate, "ToObject");
2815 2677
    ENTER_V8(isolate);
2816 2678
    EXCEPTION_PREAMBLE(isolate);
......
2827 2689
    return ToApiHandle<Boolean>(obj);
2828 2690
  } else {
2829 2691
    i::Isolate* isolate = i::Isolate::Current();
2830
    if (IsDeadCheck(isolate, "v8::Value::ToBoolean()")) {
2831
      return Local<Boolean>();
2832
    }
2833 2692
    LOG_API(isolate, "ToBoolean");
2834 2693
    ENTER_V8(isolate);
2835 2694
    i::Handle<i::Object> val =
......
2846 2705
    num = obj;
2847 2706
  } else {
2848 2707
    i::Isolate* isolate = i::Isolate::Current();
2849
    if (IsDeadCheck(isolate, "v8::Value::ToNumber()")) {
2850
      return Local<Number>();
2851
    }
2852 2708
    LOG_API(isolate, "ToNumber");
2853 2709
    ENTER_V8(isolate);
2854 2710
    EXCEPTION_PREAMBLE(isolate);
......
2866 2722
    num = obj;
2867 2723
  } else {
2868 2724
    i::Isolate* isolate = i::Isolate::Current();
2869
    if (IsDeadCheck(isolate, "v8::Value::ToInteger()")) return Local<Integer>();
2870 2725
    LOG_API(isolate, "ToInteger");
2871 2726
    ENTER_V8(isolate);
2872 2727
    EXCEPTION_PREAMBLE(isolate);
......
2886 2741

  
2887 2742

  
2888 2743
void External::CheckCast(v8::Value* that) {
2889
  if (IsDeadCheck(i::Isolate::Current(), "v8::External::Cast()")) return;
2890 2744
  ApiCheck(Utils::OpenHandle(that)->IsExternal(),
2891 2745
           "v8::External::Cast()",
2892 2746
           "Could not convert to external");
......
2894 2748

  
2895 2749

  
2896 2750
void v8::Object::CheckCast(Value* that) {
2897
  if (IsDeadCheck(i::Isolate::Current(), "v8::Object::Cast()")) return;
2898 2751
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2899 2752
  ApiCheck(obj->IsJSObject(),
2900 2753
           "v8::Object::Cast()",
......
2903 2756

  
2904 2757

  
2905 2758
void v8::Function::CheckCast(Value* that) {
2906
  if (IsDeadCheck(i::Isolate::Current(), "v8::Function::Cast()")) return;
2907 2759
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2908 2760
  ApiCheck(obj->IsJSFunction(),
2909 2761
           "v8::Function::Cast()",
......
2912 2764

  
2913 2765

  
2914 2766
void v8::String::CheckCast(v8::Value* that) {
2915
  if (IsDeadCheck(i::Isolate::Current(), "v8::String::Cast()")) return;
2916 2767
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2917 2768
  ApiCheck(obj->IsString(),
2918 2769
           "v8::String::Cast()",
......
2921 2772

  
2922 2773

  
2923 2774
void v8::Symbol::CheckCast(v8::Value* that) {
2924
  if (IsDeadCheck(i::Isolate::Current(), "v8::Symbol::Cast()")) return;
2925 2775
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2926 2776
  ApiCheck(obj->IsSymbol(),
2927 2777
           "v8::Symbol::Cast()",
......
2930 2780

  
2931 2781

  
2932 2782
void v8::Number::CheckCast(v8::Value* that) {
2933
  if (IsDeadCheck(i::Isolate::Current(), "v8::Number::Cast()")) return;
2934 2783
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2935 2784
  ApiCheck(obj->IsNumber(),
2936 2785
           "v8::Number::Cast()",
......
2939 2788

  
2940 2789

  
2941 2790
void v8::Integer::CheckCast(v8::Value* that) {
2942
  if (IsDeadCheck(i::Isolate::Current(), "v8::Integer::Cast()")) return;
2943 2791
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2944 2792
  ApiCheck(obj->IsNumber(),
2945 2793
           "v8::Integer::Cast()",
......
2948 2796

  
2949 2797

  
2950 2798
void v8::Array::CheckCast(Value* that) {
2951
  if (IsDeadCheck(i::Isolate::Current(), "v8::Array::Cast()")) return;
2952 2799
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2953 2800
  ApiCheck(obj->IsJSArray(),
2954 2801
           "v8::Array::Cast()",
......
2957 2804

  
2958 2805

  
2959 2806
void v8::ArrayBuffer::CheckCast(Value* that) {
2960
  if (IsDeadCheck(i::Isolate::Current(), "v8::ArrayBuffer::Cast()")) return;
2961 2807
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2962 2808
  ApiCheck(obj->IsJSArrayBuffer(),
2963 2809
           "v8::ArrayBuffer::Cast()",
......
2974 2820

  
2975 2821

  
2976 2822
void v8::TypedArray::CheckCast(Value* that) {
2977
  if (IsDeadCheck(i::Isolate::Current(), "v8::TypedArray::Cast()")) return;
2978 2823
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
2979 2824
  ApiCheck(obj->IsJSTypedArray(),
2980 2825
           "v8::TypedArray::Cast()",
......
2984 2829

  
2985 2830
#define CHECK_TYPED_ARRAY_CAST(ApiClass, typeConst)                         \
2986 2831
  void v8::ApiClass::CheckCast(Value* that) {                               \
2987
    if (IsDeadCheck(i::Isolate::Current(), "v8::" #ApiClass "::Cast()"))    \
2988
      return;                                                               \
2989 2832
    i::Handle<i::Object> obj = Utils::OpenHandle(that);                     \
2990 2833
    ApiCheck(obj->IsJSTypedArray() &&                                       \
2991 2834
             i::JSTypedArray::cast(*obj)->type() == typeConst,              \
......
3009 2852

  
3010 2853
void v8::Date::CheckCast(v8::Value* that) {
3011 2854
  i::Isolate* isolate = i::Isolate::Current();
3012
  if (IsDeadCheck(isolate, "v8::Date::Cast()")) return;
3013 2855
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
3014 2856
  ApiCheck(obj->HasSpecificClassOf(isolate->heap()->Date_string()),
3015 2857
           "v8::Date::Cast()",
......
3019 2861

  
3020 2862
void v8::StringObject::CheckCast(v8::Value* that) {
3021 2863
  i::Isolate* isolate = i::Isolate::Current();
3022
  if (IsDeadCheck(isolate, "v8::StringObject::Cast()")) return;
3023 2864
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
3024 2865
  ApiCheck(obj->HasSpecificClassOf(isolate->heap()->String_string()),
3025 2866
           "v8::StringObject::Cast()",
......
3029 2870

  
3030 2871
void v8::SymbolObject::CheckCast(v8::Value* that) {
3031 2872
  i::Isolate* isolate = i::Isolate::Current();
3032
  if (IsDeadCheck(isolate, "v8::SymbolObject::Cast()")) return;
3033 2873
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
3034 2874
  ApiCheck(obj->HasSpecificClassOf(isolate->heap()->Symbol_string()),
3035 2875
           "v8::SymbolObject::Cast()",
......
3039 2879

  
3040 2880
void v8::NumberObject::CheckCast(v8::Value* that) {
3041 2881
  i::Isolate* isolate = i::Isolate::Current();
3042
  if (IsDeadCheck(isolate, "v8::NumberObject::Cast()")) return;
3043 2882
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
3044 2883
  ApiCheck(obj->HasSpecificClassOf(isolate->heap()->Number_string()),
3045 2884
           "v8::NumberObject::Cast()",
......
3049 2888

  
3050 2889
void v8::BooleanObject::CheckCast(v8::Value* that) {
3051 2890
  i::Isolate* isolate = i::Isolate::Current();
3052
  if (IsDeadCheck(isolate, "v8::BooleanObject::Cast()")) return;
3053 2891
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
3054 2892
  ApiCheck(obj->HasSpecificClassOf(isolate->heap()->Boolean_string()),
3055 2893
           "v8::BooleanObject::Cast()",
......
3058 2896

  
3059 2897

  
3060 2898
void v8::RegExp::CheckCast(v8::Value* that) {
3061
  if (IsDeadCheck(i::Isolate::Current(), "v8::RegExp::Cast()")) return;
3062 2899
  i::Handle<i::Object> obj = Utils::OpenHandle(that);
3063 2900
  ApiCheck(obj->IsJSRegExp(),
3064 2901
           "v8::RegExp::Cast()",
......
3078 2915
    num = obj;
3079 2916
  } else {
3080 2917
    i::Isolate* isolate = i::Isolate::Current();
3081
    if (IsDeadCheck(isolate, "v8::Value::NumberValue()")) {
3082
      return i::OS::nan_value();
3083
    }
3084 2918
    LOG_API(isolate, "NumberValue");
3085 2919
    ENTER_V8(isolate);
3086 2920
    EXCEPTION_PREAMBLE(isolate);
......
3098 2932
    num = obj;
3099 2933
  } else {
3100 2934
    i::Isolate* isolate = i::Isolate::Current();
3101
    if (IsDeadCheck(isolate, "v8::Value::IntegerValue()")) return 0;
3102 2935
    LOG_API(isolate, "IntegerValue");
3103 2936
    ENTER_V8(isolate);
3104 2937
    EXCEPTION_PREAMBLE(isolate);
......
3120 2953
    num = obj;
3121 2954
  } else {
3122 2955
    i::Isolate* isolate = i::Isolate::Current();
3123
    if (IsDeadCheck(isolate, "v8::Value::ToInt32()")) return Local<Int32>();
3124 2956
    LOG_API(isolate, "ToInt32");
3125 2957
    ENTER_V8(isolate);
3126 2958
    EXCEPTION_PREAMBLE(isolate);
......
3138 2970
    num = obj;
3139 2971
  } else {
3140 2972
    i::Isolate* isolate = i::Isolate::Current();
3141
    if (IsDeadCheck(isolate, "v8::Value::ToUint32()")) return Local<Uint32>();
3142 2973
    LOG_API(isolate, "ToUInt32");
3143 2974
    ENTER_V8(isolate);
3144 2975
    EXCEPTION_PREAMBLE(isolate);
......
3156 2987
    return Local<Uint32>();
3157 2988
  }
3158 2989
  i::Isolate* isolate = i::Isolate::Current();
3159
  if (IsDeadCheck(isolate, "v8::Value::ToArrayIndex()")) return Local<Uint32>();
3160 2990
  LOG_API(isolate, "ToArrayIndex");
3161 2991
  ENTER_V8(isolate);
3162 2992
  EXCEPTION_PREAMBLE(isolate);
......
3184 3014
    return i::Smi::cast(*obj)->value();
3185 3015
  } else {
3186 3016
    i::Isolate* isolate = i::Isolate::Current();
3187
    if (IsDeadCheck(isolate, "v8::Value::Int32Value()")) return 0;
3188 3017
    LOG_API(isolate, "Int32Value (slow)");
3189 3018
    ENTER_V8(isolate);
3190 3019
    EXCEPTION_PREAMBLE(isolate);
......
3202 3031

  
3203 3032
bool Value::Equals(Handle<Value> that) const {
3204 3033
  i::Isolate* isolate = i::Isolate::Current();
3205
  if (IsDeadCheck(isolate, "v8::Value::Equals()")
3206
      || EmptyCheck("v8::Value::Equals()", this)
3207
      || EmptyCheck("v8::Value::Equals()", that)) {
3034
  if (EmptyCheck("v8::Value::Equals()", this) ||
3035
      EmptyCheck("v8::Value::Equals()", that)) {
3208 3036
    return false;
3209 3037
  }
3210 3038
  LOG_API(isolate, "Equals");
......
3229 3057

  
3230 3058
bool Value::StrictEquals(Handle<Value> that) const {
3231 3059
  i::Isolate* isolate = i::Isolate::Current();
3232
  if (IsDeadCheck(isolate, "v8::Value::StrictEquals()")
3233
      || EmptyCheck("v8::Value::StrictEquals()", this)
3234
      || EmptyCheck("v8::Value::StrictEquals()", that)) {
3060
  if (EmptyCheck("v8::Value::StrictEquals()", this) ||
3061
      EmptyCheck("v8::Value::StrictEquals()", that)) {
3235 3062
    return false;
3236 3063
  }
3237 3064
  LOG_API(isolate, "StrictEquals");
......
3259 3086
}
3260 3087

  
3261 3088

  
3089
bool Value::SameValue(Handle<Value> that) const {
3090
  i::Isolate* isolate = i::Isolate::Current();
3091
  if (EmptyCheck("v8::Value::SameValue()", this) ||
3092
      EmptyCheck("v8::Value::SameValue()", that)) {
3093
    return false;
3094
  }
3095
  LOG_API(isolate, "SameValue");
3096
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
3097
  i::Handle<i::Object> other = Utils::OpenHandle(*that);
3098
  return obj->SameValue(*other);
3099
}
3100

  
3101

  
3262 3102
uint32_t Value::Uint32Value() const {
3263 3103
  i::Handle<i::Object> obj = Utils::OpenHandle(this);
3264 3104
  if (obj->IsSmi()) {
3265 3105
    return i::Smi::cast(*obj)->value();
3266 3106
  } else {
3267 3107
    i::Isolate* isolate = i::Isolate::Current();
3268
    if (IsDeadCheck(isolate, "v8::Value::Uint32Value()")) return 0;
3269 3108
    LOG_API(isolate, "Uint32Value");
3270 3109
    ENTER_V8(isolate);
3271 3110
    EXCEPTION_PREAMBLE(isolate);
......
3625 3464
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3626 3465
  ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false);
3627 3466
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
3628
  return self->HasElement(index);
3467
  return i::JSReceiver::HasElement(self, index);
3629 3468
}
3630 3469

  
3631 3470

  
......
3679 3518
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3680 3519
  ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()",
3681 3520
             return false);
3682
  return Utils::OpenHandle(this)->HasLocalProperty(
3683
      *Utils::OpenHandle(*key));
3521
  return i::JSReceiver::HasLocalProperty(
3522
      Utils::OpenHandle(this), Utils::OpenHandle(*key));
3684 3523
}
3685 3524

  
3686 3525

  
......
3688 3527
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3689 3528
  ON_BAILOUT(isolate, "v8::Object::HasRealNamedProperty()",
3690 3529
             return false);
3691
  return Utils::OpenHandle(this)->HasRealNamedProperty(
3692
      isolate,
3693
      *Utils::OpenHandle(*key));
3530
  return i::JSObject::HasRealNamedProperty(Utils::OpenHandle(this),
3531
                                           Utils::OpenHandle(*key));
3694 3532
}
3695 3533

  
3696 3534

  
......
3698 3536
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3699 3537
  ON_BAILOUT(isolate, "v8::Object::HasRealIndexedProperty()",
3700 3538
             return false);
3701
  return Utils::OpenHandle(this)->HasRealElementProperty(isolate, index);
3539
  return i::JSObject::HasRealElementProperty(Utils::OpenHandle(this), index);
3702 3540
}
3703 3541

  
3704 3542

  
......
3708 3546
             "v8::Object::HasRealNamedCallbackProperty()",
3709 3547
             return false);
3710 3548
  ENTER_V8(isolate);
3711
  return Utils::OpenHandle(this)->HasRealNamedCallbackProperty(
3712
      isolate,
3713
      *Utils::OpenHandle(*key));
3549
  return i::JSObject::HasRealNamedCallbackProperty(Utils::OpenHandle(this),
3550
                                                   Utils::OpenHandle(*key));
3714 3551
}
3715 3552

  
3716 3553

  
......
3813 3650
  ENTER_V8(isolate);
3814 3651
  i::Handle<i::JSObject> self = Utils::OpenHandle(this);
3815 3652
  EXCEPTION_PREAMBLE(isolate);
3816
  i::Handle<i::JSObject> result = i::Copy(self);
3653
  i::Handle<i::JSObject> result = i::JSObject::Copy(self);
3817 3654
  has_pending_exception = result.is_null();
3818 3655
  EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>());
3819 3656
  return Utils::ToLocal(result);
......
4113 3950
}
4114 3951

  
4115 3952

  
4116
Local<v8::Value> Object::CallAsFunction(v8::Handle<v8::Object> recv,
3953
Local<v8::Value> Object::CallAsFunction(v8::Handle<v8::Value> recv,
4117 3954
                                        int argc,
4118 3955
                                        v8::Handle<v8::Value> argv[]) {
4119 3956
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
......
4141 3978
  }
4142 3979
  EXCEPTION_PREAMBLE(isolate);
4143 3980
  i::Handle<i::Object> returned = i::Execution::Call(
4144
      isolate, fun, recv_obj, argc, args, &has_pending_exception);
3981
      isolate, fun, recv_obj, argc, args, &has_pending_exception, true);
4145 3982
  EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>());
4146 3983
  return Utils::ToLocal(scope.CloseAndEscape(returned));
4147 3984
}
......
4225 4062
}
4226 4063

  
4227 4064

  
4228
Local<v8::Value> Function::Call(v8::Handle<v8::Object> recv, int argc,
4065
Local<v8::Value> Function::Call(v8::Handle<v8::Value> recv, int argc,
4229 4066
                                v8::Handle<v8::Value> argv[]) {
4230 4067
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
4231 4068
  ON_BAILOUT(isolate, "v8::Function::Call()", return Local<v8::Value>());
......
4242 4079
    i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv);
4243 4080
    EXCEPTION_PREAMBLE(isolate);
4244 4081
    i::Handle<i::Object> returned = i::Execution::Call(
4245
        isolate, fun, recv_obj, argc, args, &has_pending_exception);
4082
        isolate, fun, recv_obj, argc, args, &has_pending_exception, true);
4246 4083
    EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Object>());
4247 4084
    raw_result = *returned;
4248 4085
  }
......
4274 4111
}
4275 4112

  
4276 4113

  
4114
Handle<Value> Function::GetDisplayName() const {
4115
  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
4116
  ON_BAILOUT(isolate, "v8::Function::GetDisplayName()",
4117
             return ToApiHandle<Primitive>(
4118
                isolate->factory()->undefined_value()));
4119
  ENTER_V8(isolate);
4120
  i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
4121
  i::Handle<i::String> property_name =
4122
      isolate->factory()->InternalizeOneByteString(
4123
          STATIC_ASCII_VECTOR("displayName"));
4124
  i::LookupResult lookup(isolate);
4125
  func->LookupRealNamedProperty(*property_name, &lookup);
4126
  if (lookup.IsFound()) {
4127
    i::Object* value = lookup.GetLazyValue();
4128
    if (value && value->IsString()) {
4129
      i::String* name = i::String::cast(value);
4130
      if (name->length() > 0) return Utils::ToLocal(i::Handle<i::String>(name));
4131
    }
4132
  }
4133
  return ToApiHandle<Primitive>(isolate->factory()->undefined_value());
4134
}
4135

  
4136

  
4277 4137
ScriptOrigin Function::GetScriptOrigin() const {
4278 4138
  i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
4279 4139
  if (func->shared()->script()->IsScript()) {
......
4312 4172
}
4313 4173

  
4314 4174

  
4175
bool Function::IsBuiltin() const {
4176
  i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
4177
  return func->IsBuiltin();
4178
}
4179

  
4180

  
4315 4181
Handle<Value> Function::GetScriptId() const {
4316 4182
  i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
4317
  if (!func->shared()->script()->IsScript())
4318
    return v8::Undefined();
4183
  i::Isolate* isolate = func->GetIsolate();
4184
  if (!func->shared()->script()->IsScript()) {
4185
    return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
4186
  }
4319 4187
  i::Handle<i::Script> script(i::Script::cast(func->shared()->script()));
4320
  return Utils::ToLocal(i::Handle<i::Object>(script->id(), func->GetIsolate()));
4188
  return Utils::ToLocal(i::Handle<i::Object>(script->id(), isolate));
4321 4189
}
4322 4190

  
4323 4191

  
......
4331 4199

  
4332 4200
int String::Length() const {
4333 4201
  i::Handle<i::String> str = Utils::OpenHandle(this);
4334
  if (IsDeadCheck(str->GetIsolate(), "v8::String::Length()")) return 0;
4335 4202
  return str->length();
4336 4203
}
4337 4204

  
4338 4205

  
4339 4206
bool String::IsOneByte() const {
4340 4207
  i::Handle<i::String> str = Utils::OpenHandle(this);
4341
  if (IsDeadCheck(str->GetIsolate(), "v8::String::IsOneByte()")) {
4342
    return false;
4343
  }
4344 4208
  return str->HasOnlyOneByteChars();
4345 4209
}
4346 4210

  
......
4456 4320

  
4457 4321
bool String::ContainsOnlyOneByte() const {
4458 4322
  i::Handle<i::String> str = Utils::OpenHandle(this);
4459
  if (IsDeadCheck(str->GetIsolate(),
4460
                  "v8::String::ContainsOnlyOneByte()")) {
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff