diff options
Diffstat (limited to 'V8Binding/v8/src/api.cc')
-rw-r--r-- | V8Binding/v8/src/api.cc | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/V8Binding/v8/src/api.cc b/V8Binding/v8/src/api.cc index 7b7f290..b9e0cec 100644 --- a/V8Binding/v8/src/api.cc +++ b/V8Binding/v8/src/api.cc @@ -2124,7 +2124,9 @@ int v8::Object::GetIdentityHash() { } else { int attempts = 0; do { - hash_value = random() & i::Smi::kMaxValue; // Limit range to fit a smi. + // Generate a random 32-bit hash value but limit range to fit + // within a smi. + hash_value = i::V8::Random() & i::Smi::kMaxValue; attempts++; } while (hash_value == 0 && attempts < 30); hash_value = hash_value != 0 ? hash_value : 1; // never return 0 @@ -3010,6 +3012,26 @@ uint32_t v8::Array::Length() const { } +Local<Object> Array::CloneElementAt(uint32_t index) { + ON_BAILOUT("v8::Array::CloneElementAt()", return Local<Object>()); + i::Handle<i::JSObject> self = Utils::OpenHandle(this); + if (!self->HasFastElements()) { + return Local<Object>(); + } + i::FixedArray* elms = self->elements(); + i::Object* paragon = elms->get(index); + if (!paragon->IsJSObject()) { + return Local<Object>(); + } + i::Handle<i::JSObject> paragon_handle(i::JSObject::cast(paragon)); + EXCEPTION_PREAMBLE(); + i::Handle<i::JSObject> result = i::Copy(paragon_handle); + has_pending_exception = result.is_null(); + EXCEPTION_BAILOUT_CHECK(Local<Object>()); + return Utils::ToLocal(result); +} + + Local<String> v8::String::NewSymbol(const char* data, int length) { EnsureInitialized("v8::String::NewSymbol()"); LOG_API("String::NewSymbol(char)"); @@ -3382,6 +3404,7 @@ void Debug::SetMessageHandler(v8::Debug::MessageHandler handler, void Debug::SetMessageHandler2(v8::Debug::MessageHandler2 handler) { EnsureInitialized("v8::Debug::SetMessageHandler"); ENTER_V8; + HandleScope scope; i::Debugger::SetMessageHandler(handler); } |