Remove IsInitialized checks from inlined API functions.
R=marja@chromium.org, svenpanne@chromium.org TEST=cctest/test-api Review URL: https://codereview.chromium.org/17068006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15277 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
9d95db6fad
commit
9ef18efff6
22
include/v8.h
22
include/v8.h
@ -5301,7 +5301,6 @@ class Internals {
|
||||
static const int kExternalTwoByteRepresentationTag = 0x02;
|
||||
static const int kExternalAsciiRepresentationTag = 0x06;
|
||||
|
||||
static const int kIsolateStateOffset = 0;
|
||||
static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize;
|
||||
static const int kIsolateRootsOffset = 3 * kApiPointerSize;
|
||||
static const int kUndefinedValueRootIndex = 5;
|
||||
@ -5326,6 +5325,12 @@ class Internals {
|
||||
static const int kUndefinedOddballKind = 5;
|
||||
static const int kNullOddballKind = 3;
|
||||
|
||||
#ifdef V8_ENABLE_CHECKS
|
||||
static void CheckInitialized(v8::Isolate* isolate);
|
||||
#else
|
||||
static void CheckInitialized(v8::Isolate* isolate) { }
|
||||
#endif
|
||||
|
||||
V8_INLINE(static bool HasHeapObjectTag(internal::Object* value)) {
|
||||
return ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) ==
|
||||
kHeapObjectTag);
|
||||
@ -5359,11 +5364,6 @@ class Internals {
|
||||
return representation == kExternalTwoByteRepresentationTag;
|
||||
}
|
||||
|
||||
V8_INLINE(static bool IsInitialized(v8::Isolate* isolate)) {
|
||||
uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + kIsolateStateOffset;
|
||||
return *reinterpret_cast<int*>(addr) == 1;
|
||||
}
|
||||
|
||||
V8_INLINE(static uint8_t GetNodeFlag(internal::Object** obj, int shift)) {
|
||||
uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset;
|
||||
return *addr & (1 << shift);
|
||||
@ -5939,7 +5939,7 @@ String* String::Cast(v8::Value* value) {
|
||||
Local<String> String::Empty(Isolate* isolate) {
|
||||
typedef internal::Object* S;
|
||||
typedef internal::Internals I;
|
||||
if (!I::IsInitialized(isolate)) return Empty();
|
||||
I::CheckInitialized(isolate);
|
||||
S* slot = I::GetRoot(isolate, I::kEmptyStringRootIndex);
|
||||
return Local<String>(reinterpret_cast<String*>(slot));
|
||||
}
|
||||
@ -6292,7 +6292,7 @@ ReturnValue<T> PropertyCallbackInfo<T>::GetReturnValue() const {
|
||||
Handle<Primitive> Undefined(Isolate* isolate) {
|
||||
typedef internal::Object* S;
|
||||
typedef internal::Internals I;
|
||||
if (!I::IsInitialized(isolate)) return Undefined();
|
||||
I::CheckInitialized(isolate);
|
||||
S* slot = I::GetRoot(isolate, I::kUndefinedValueRootIndex);
|
||||
return Handle<Primitive>(reinterpret_cast<Primitive*>(slot));
|
||||
}
|
||||
@ -6301,7 +6301,7 @@ Handle<Primitive> Undefined(Isolate* isolate) {
|
||||
Handle<Primitive> Null(Isolate* isolate) {
|
||||
typedef internal::Object* S;
|
||||
typedef internal::Internals I;
|
||||
if (!I::IsInitialized(isolate)) return Null();
|
||||
I::CheckInitialized(isolate);
|
||||
S* slot = I::GetRoot(isolate, I::kNullValueRootIndex);
|
||||
return Handle<Primitive>(reinterpret_cast<Primitive*>(slot));
|
||||
}
|
||||
@ -6310,7 +6310,7 @@ Handle<Primitive> Null(Isolate* isolate) {
|
||||
Handle<Boolean> True(Isolate* isolate) {
|
||||
typedef internal::Object* S;
|
||||
typedef internal::Internals I;
|
||||
if (!I::IsInitialized(isolate)) return True();
|
||||
I::CheckInitialized(isolate);
|
||||
S* slot = I::GetRoot(isolate, I::kTrueValueRootIndex);
|
||||
return Handle<Boolean>(reinterpret_cast<Boolean*>(slot));
|
||||
}
|
||||
@ -6319,7 +6319,7 @@ Handle<Boolean> True(Isolate* isolate) {
|
||||
Handle<Boolean> False(Isolate* isolate) {
|
||||
typedef internal::Object* S;
|
||||
typedef internal::Internals I;
|
||||
if (!I::IsInitialized(isolate)) return False();
|
||||
I::CheckInitialized(isolate);
|
||||
S* slot = I::GetRoot(isolate, I::kFalseValueRootIndex);
|
||||
return Handle<Boolean>(reinterpret_cast<Boolean*>(slot));
|
||||
}
|
||||
|
10
src/api.cc
10
src/api.cc
@ -2893,6 +2893,16 @@ Local<Integer> Value::ToInteger() const {
|
||||
}
|
||||
|
||||
|
||||
#ifdef V8_ENABLE_CHECKS
|
||||
void i::Internals::CheckInitialized(v8::Isolate* external_isolate) {
|
||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate);
|
||||
ApiCheck(isolate != NULL && isolate->IsInitialized() && !i::V8::IsDead(),
|
||||
"v8::internal::Internals::CheckInitialized()",
|
||||
"Isolate is not initialized or V8 has died");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void External::CheckCast(v8::Value* that) {
|
||||
if (IsDeadCheck(i::Isolate::Current(), "v8::External::Cast()")) return;
|
||||
ApiCheck(Utils::OpenHandle(that)->IsExternal(),
|
||||
|
@ -2216,8 +2216,6 @@ bool Isolate::Init(Deserializer* des) {
|
||||
LOG(this, LogCompiledFunctions());
|
||||
}
|
||||
|
||||
CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, state_)),
|
||||
Internals::kIsolateStateOffset);
|
||||
CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, embedder_data_)),
|
||||
Internals::kIsolateEmbedderDataOffset);
|
||||
CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, heap_.roots_)),
|
||||
|
@ -18796,13 +18796,6 @@ TEST(PrimaryStubCache) {
|
||||
}
|
||||
|
||||
|
||||
static int fatal_error_callback_counter = 0;
|
||||
static void CountingErrorCallback(const char* location, const char* message) {
|
||||
printf("CountingErrorCallback(\"%s\", \"%s\")\n", location, message);
|
||||
fatal_error_callback_counter++;
|
||||
}
|
||||
|
||||
|
||||
TEST(StaticGetters) {
|
||||
LocalContext context;
|
||||
i::Factory* factory = i::Isolate::Current()->factory();
|
||||
@ -18820,31 +18813,6 @@ TEST(StaticGetters) {
|
||||
i::Handle<i::Object> false_value = factory->false_value();
|
||||
CHECK(*v8::Utils::OpenHandle(*v8::False()) == *false_value);
|
||||
CHECK(*v8::Utils::OpenHandle(*v8::False(isolate)) == *false_value);
|
||||
|
||||
// Test after-death behavior.
|
||||
CHECK(i::Internals::IsInitialized(isolate));
|
||||
CHECK_EQ(0, fatal_error_callback_counter);
|
||||
v8::V8::SetFatalErrorHandler(CountingErrorCallback);
|
||||
v8::Utils::ReportApiFailure("StaticGetters()", "Kill V8");
|
||||
i::Isolate::Current()->TearDown();
|
||||
CHECK(!i::Internals::IsInitialized(isolate));
|
||||
CHECK_EQ(1, fatal_error_callback_counter);
|
||||
CHECK(v8::Undefined().IsEmpty());
|
||||
CHECK_EQ(2, fatal_error_callback_counter);
|
||||
CHECK(v8::Undefined(isolate).IsEmpty());
|
||||
CHECK_EQ(3, fatal_error_callback_counter);
|
||||
CHECK(v8::Null().IsEmpty());
|
||||
CHECK_EQ(4, fatal_error_callback_counter);
|
||||
CHECK(v8::Null(isolate).IsEmpty());
|
||||
CHECK_EQ(5, fatal_error_callback_counter);
|
||||
CHECK(v8::True().IsEmpty());
|
||||
CHECK_EQ(6, fatal_error_callback_counter);
|
||||
CHECK(v8::True(isolate).IsEmpty());
|
||||
CHECK_EQ(7, fatal_error_callback_counter);
|
||||
CHECK(v8::False().IsEmpty());
|
||||
CHECK_EQ(8, fatal_error_callback_counter);
|
||||
CHECK(v8::False(isolate).IsEmpty());
|
||||
CHECK_EQ(9, fatal_error_callback_counter);
|
||||
}
|
||||
|
||||
|
||||
@ -18874,19 +18842,6 @@ TEST(StringEmpty) {
|
||||
i::Handle<i::Object> empty_string = factory->empty_string();
|
||||
CHECK(*v8::Utils::OpenHandle(*v8::String::Empty()) == *empty_string);
|
||||
CHECK(*v8::Utils::OpenHandle(*v8::String::Empty(isolate)) == *empty_string);
|
||||
|
||||
// Test after-death behavior.
|
||||
CHECK(i::Internals::IsInitialized(isolate));
|
||||
CHECK_EQ(0, fatal_error_callback_counter);
|
||||
v8::V8::SetFatalErrorHandler(CountingErrorCallback);
|
||||
v8::Utils::ReportApiFailure("StringEmpty()", "Kill V8");
|
||||
i::Isolate::Current()->TearDown();
|
||||
CHECK(!i::Internals::IsInitialized(isolate));
|
||||
CHECK_EQ(1, fatal_error_callback_counter);
|
||||
CHECK(v8::String::Empty().IsEmpty());
|
||||
CHECK_EQ(2, fatal_error_callback_counter);
|
||||
CHECK(v8::String::Empty(isolate).IsEmpty());
|
||||
CHECK_EQ(3, fatal_error_callback_counter);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user