OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1946 | 1946 |
1947 v8::Local<Value> v8::TryCatch::StackTrace() const { | 1947 v8::Local<Value> v8::TryCatch::StackTrace() const { |
1948 ASSERT(isolate_ == i::Isolate::Current()); | 1948 ASSERT(isolate_ == i::Isolate::Current()); |
1949 if (HasCaught()) { | 1949 if (HasCaught()) { |
1950 i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); | 1950 i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); |
1951 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); | 1951 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); |
1952 i::HandleScope scope(isolate_); | 1952 i::HandleScope scope(isolate_); |
1953 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); | 1953 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); |
1954 i::Handle<i::String> name = isolate_->factory()->stack_string(); | 1954 i::Handle<i::String> name = isolate_->factory()->stack_string(); |
1955 if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>(); | 1955 if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>(); |
1956 i::Handle<i::Object> value = i::Object::GetProperty(obj, name); | 1956 i::Handle<i::Object> value; |
1957 if (value.is_null()) return v8::Local<Value>(); | 1957 if (!i::Object::GetProperty(obj, name).ToHandle(&value)) { |
| 1958 return v8::Local<Value>(); |
| 1959 } |
1958 return v8::Utils::ToLocal(scope.CloseAndEscape(value)); | 1960 return v8::Utils::ToLocal(scope.CloseAndEscape(value)); |
1959 } else { | 1961 } else { |
1960 return v8::Local<Value>(); | 1962 return v8::Local<Value>(); |
1961 } | 1963 } |
1962 } | 1964 } |
1963 | 1965 |
1964 | 1966 |
1965 v8::Local<v8::Message> v8::TryCatch::Message() const { | 1967 v8::Local<v8::Message> v8::TryCatch::Message() const { |
1966 ASSERT(isolate_ == i::Isolate::Current()); | 1968 ASSERT(isolate_ == i::Isolate::Current()); |
1967 i::Object* message = reinterpret_cast<i::Object*>(message_obj_); | 1969 i::Object* message = reinterpret_cast<i::Object*>(message_obj_); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2042 | 2044 |
2043 static i::Handle<i::Object> CallV8HeapFunction(const char* name, | 2045 static i::Handle<i::Object> CallV8HeapFunction(const char* name, |
2044 i::Handle<i::Object> recv, | 2046 i::Handle<i::Object> recv, |
2045 int argc, | 2047 int argc, |
2046 i::Handle<i::Object> argv[], | 2048 i::Handle<i::Object> argv[], |
2047 bool* has_pending_exception) { | 2049 bool* has_pending_exception) { |
2048 i::Isolate* isolate = i::Isolate::Current(); | 2050 i::Isolate* isolate = i::Isolate::Current(); |
2049 i::Handle<i::String> fmt_str = | 2051 i::Handle<i::String> fmt_str = |
2050 isolate->factory()->InternalizeUtf8String(name); | 2052 isolate->factory()->InternalizeUtf8String(name); |
2051 i::Handle<i::Object> object_fun = | 2053 i::Handle<i::Object> object_fun = |
2052 i::GlobalObject::GetPropertyNoExceptionThrown( | 2054 i::Object::GetProperty( |
2053 isolate->js_builtins_object(), fmt_str); | 2055 isolate->js_builtins_object(), fmt_str).ToHandleChecked(); |
2054 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); | 2056 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); |
2055 i::Handle<i::Object> value = i::Execution::Call( | 2057 i::Handle<i::Object> value = i::Execution::Call( |
2056 isolate, fun, recv, argc, argv, has_pending_exception); | 2058 isolate, fun, recv, argc, argv, has_pending_exception); |
2057 return value; | 2059 return value; |
2058 } | 2060 } |
2059 | 2061 |
2060 | 2062 |
2061 static i::Handle<i::Object> CallV8HeapFunction(const char* name, | 2063 static i::Handle<i::Object> CallV8HeapFunction(const char* name, |
2062 i::Handle<i::Object> data, | 2064 i::Handle<i::Object> data, |
2063 bool* has_pending_exception) { | 2065 bool* has_pending_exception) { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2178 | 2180 |
2179 | 2181 |
2180 // --- S t a c k T r a c e --- | 2182 // --- S t a c k T r a c e --- |
2181 | 2183 |
2182 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { | 2184 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { |
2183 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2185 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2184 ENTER_V8(isolate); | 2186 ENTER_V8(isolate); |
2185 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2187 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2186 i::Handle<i::JSArray> self = Utils::OpenHandle(this); | 2188 i::Handle<i::JSArray> self = Utils::OpenHandle(this); |
2187 i::Handle<i::Object> obj = | 2189 i::Handle<i::Object> obj = |
2188 i::Object::GetElementNoExceptionThrown(isolate, self, index); | 2190 i::Object::GetElement(isolate, self, index).ToHandleChecked(); |
2189 i::Handle<i::JSObject> jsobj = i::Handle<i::JSObject>::cast(obj); | 2191 i::Handle<i::JSObject> jsobj = i::Handle<i::JSObject>::cast(obj); |
2190 return scope.Escape(Utils::StackFrameToLocal(jsobj)); | 2192 return scope.Escape(Utils::StackFrameToLocal(jsobj)); |
2191 } | 2193 } |
2192 | 2194 |
2193 | 2195 |
2194 int StackTrace::GetFrameCount() const { | 2196 int StackTrace::GetFrameCount() const { |
2195 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2197 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2196 ENTER_V8(isolate); | 2198 ENTER_V8(isolate); |
2197 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); | 2199 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); |
2198 } | 2200 } |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2493 i::Isolate* isolate = i::Isolate::Current(); | 2495 i::Isolate* isolate = i::Isolate::Current(); |
2494 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2496 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2495 return obj->HasSpecificClassOf(isolate->heap()->Number_string()); | 2497 return obj->HasSpecificClassOf(isolate->heap()->Number_string()); |
2496 } | 2498 } |
2497 | 2499 |
2498 | 2500 |
2499 static i::Object* LookupBuiltin(i::Isolate* isolate, | 2501 static i::Object* LookupBuiltin(i::Isolate* isolate, |
2500 const char* builtin_name) { | 2502 const char* builtin_name) { |
2501 i::Handle<i::String> string = | 2503 i::Handle<i::String> string = |
2502 isolate->factory()->InternalizeUtf8String(builtin_name); | 2504 isolate->factory()->InternalizeUtf8String(builtin_name); |
2503 return *i::GlobalObject::GetPropertyNoExceptionThrown( | 2505 return *i::Object::GetProperty( |
2504 isolate->js_builtins_object(), string); | 2506 isolate->js_builtins_object(), string).ToHandleChecked(); |
2505 } | 2507 } |
2506 | 2508 |
2507 | 2509 |
2508 static bool CheckConstructor(i::Isolate* isolate, | 2510 static bool CheckConstructor(i::Isolate* isolate, |
2509 i::Handle<i::JSObject> obj, | 2511 i::Handle<i::JSObject> obj, |
2510 const char* class_name) { | 2512 const char* class_name) { |
2511 i::Object* constr = obj->map()->constructor(); | 2513 i::Object* constr = obj->map()->constructor(); |
2512 if (!constr->IsJSFunction()) return false; | 2514 if (!constr->IsJSFunction()) return false; |
2513 i::JSFunction* func = i::JSFunction::cast(constr); | 2515 i::JSFunction* func = i::JSFunction::cast(constr); |
2514 return func->shared()->native() && | 2516 return func->shared()->native() && |
(...skipping 4479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6994 v8::EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 6996 v8::EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
6995 i::Debug* isolate_debug = isolate->debug(); | 6997 i::Debug* isolate_debug = isolate->debug(); |
6996 EXCEPTION_PREAMBLE(isolate); | 6998 EXCEPTION_PREAMBLE(isolate); |
6997 has_pending_exception = !isolate_debug->Load(); | 6999 has_pending_exception = !isolate_debug->Load(); |
6998 v8::Local<v8::Value> result; | 7000 v8::Local<v8::Value> result; |
6999 if (!has_pending_exception) { | 7001 if (!has_pending_exception) { |
7000 i::Handle<i::JSObject> debug( | 7002 i::Handle<i::JSObject> debug( |
7001 isolate_debug->debug_context()->global_object()); | 7003 isolate_debug->debug_context()->global_object()); |
7002 i::Handle<i::String> name = isolate->factory()->InternalizeOneByteString( | 7004 i::Handle<i::String> name = isolate->factory()->InternalizeOneByteString( |
7003 STATIC_ASCII_VECTOR("MakeMirror")); | 7005 STATIC_ASCII_VECTOR("MakeMirror")); |
7004 i::Handle<i::Object> fun_obj = i::Object::GetProperty(debug, name); | 7006 i::Handle<i::Object> fun_obj = |
7005 ASSERT(!fun_obj.is_null()); | 7007 i::Object::GetProperty(debug, name).ToHandleChecked(); |
7006 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(fun_obj); | 7008 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(fun_obj); |
7007 v8::Handle<v8::Function> v8_fun = Utils::ToLocal(fun); | 7009 v8::Handle<v8::Function> v8_fun = Utils::ToLocal(fun); |
7008 const int kArgc = 1; | 7010 const int kArgc = 1; |
7009 v8::Handle<v8::Value> argv[kArgc] = { obj }; | 7011 v8::Handle<v8::Value> argv[kArgc] = { obj }; |
7010 result = v8_fun->Call(Utils::ToLocal(debug), kArgc, argv); | 7012 result = v8_fun->Call(Utils::ToLocal(debug), kArgc, argv); |
7011 has_pending_exception = result.IsEmpty(); | 7013 has_pending_exception = result.IsEmpty(); |
7012 } | 7014 } |
7013 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); | 7015 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); |
7014 return scope.Escape(result); | 7016 return scope.Escape(result); |
7015 } | 7017 } |
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7691 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7693 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
7692 Address callback_address = | 7694 Address callback_address = |
7693 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7695 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
7694 VMState<EXTERNAL> state(isolate); | 7696 VMState<EXTERNAL> state(isolate); |
7695 ExternalCallbackScope call_scope(isolate, callback_address); | 7697 ExternalCallbackScope call_scope(isolate, callback_address); |
7696 callback(info); | 7698 callback(info); |
7697 } | 7699 } |
7698 | 7700 |
7699 | 7701 |
7700 } } // namespace v8::internal | 7702 } } // namespace v8::internal |
OLD | NEW |