Chromium Code Reviews| 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 3031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3042 bool v8::Object::Set(v8::Handle<Value> key, v8::Handle<Value> value, | 3042 bool v8::Object::Set(v8::Handle<Value> key, v8::Handle<Value> value, |
| 3043 v8::PropertyAttribute attribs) { | 3043 v8::PropertyAttribute attribs) { |
| 3044 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3044 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3045 ON_BAILOUT(isolate, "v8::Object::Set()", return false); | 3045 ON_BAILOUT(isolate, "v8::Object::Set()", return false); |
| 3046 ENTER_V8(isolate); | 3046 ENTER_V8(isolate); |
| 3047 i::HandleScope scope(isolate); | 3047 i::HandleScope scope(isolate); |
| 3048 i::Handle<i::Object> self = Utils::OpenHandle(this); | 3048 i::Handle<i::Object> self = Utils::OpenHandle(this); |
| 3049 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); | 3049 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
| 3050 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); | 3050 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); |
| 3051 EXCEPTION_PREAMBLE(isolate); | 3051 EXCEPTION_PREAMBLE(isolate); |
| 3052 i::Handle<i::Object> obj = i::Runtime::SetObjectProperty( | 3052 has_pending_exception = i::Runtime::SetObjectProperty( |
| 3053 isolate, | 3053 isolate, |
| 3054 self, | 3054 self, |
| 3055 key_obj, | 3055 key_obj, |
| 3056 value_obj, | 3056 value_obj, |
| 3057 static_cast<PropertyAttributes>(attribs), | 3057 static_cast<PropertyAttributes>(attribs), |
| 3058 i::SLOPPY); | 3058 i::SLOPPY).is_null(); |
| 3059 has_pending_exception = obj.is_null(); | |
| 3060 EXCEPTION_BAILOUT_CHECK(isolate, false); | 3059 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3061 return true; | 3060 return true; |
| 3062 } | 3061 } |
| 3063 | 3062 |
| 3064 | 3063 |
| 3065 bool v8::Object::Set(uint32_t index, v8::Handle<Value> value) { | 3064 bool v8::Object::Set(uint32_t index, v8::Handle<Value> value) { |
| 3066 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3065 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3067 ON_BAILOUT(isolate, "v8::Object::Set()", return false); | 3066 ON_BAILOUT(isolate, "v8::Object::Set()", return false); |
| 3068 ENTER_V8(isolate); | 3067 ENTER_V8(isolate); |
| 3069 i::HandleScope scope(isolate); | 3068 i::HandleScope scope(isolate); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 3086 v8::Handle<Value> value, | 3085 v8::Handle<Value> value, |
| 3087 v8::PropertyAttribute attribs) { | 3086 v8::PropertyAttribute attribs) { |
| 3088 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3087 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3089 ON_BAILOUT(isolate, "v8::Object::ForceSet()", return false); | 3088 ON_BAILOUT(isolate, "v8::Object::ForceSet()", return false); |
| 3090 ENTER_V8(isolate); | 3089 ENTER_V8(isolate); |
| 3091 i::HandleScope scope(isolate); | 3090 i::HandleScope scope(isolate); |
| 3092 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3091 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 3093 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); | 3092 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
| 3094 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); | 3093 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); |
| 3095 EXCEPTION_PREAMBLE(isolate); | 3094 EXCEPTION_PREAMBLE(isolate); |
| 3096 i::Handle<i::Object> obj = i::ForceSetProperty( | 3095 has_pending_exception = i::Runtime::ForceSetObjectProperty( |
| 3097 self, | 3096 self, |
| 3098 key_obj, | 3097 key_obj, |
| 3099 value_obj, | 3098 value_obj, |
| 3100 static_cast<PropertyAttributes>(attribs)); | 3099 static_cast<PropertyAttributes>(attribs)).is_null(); |
| 3101 has_pending_exception = obj.is_null(); | |
| 3102 EXCEPTION_BAILOUT_CHECK(isolate, false); | 3100 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3103 return true; | 3101 return true; |
| 3104 } | 3102 } |
| 3105 | 3103 |
| 3106 | 3104 |
| 3107 bool v8::Object::SetPrivate(v8::Handle<Private> key, v8::Handle<Value> value) { | 3105 bool v8::Object::SetPrivate(v8::Handle<Private> key, v8::Handle<Value> value) { |
| 3108 return Set(v8::Handle<Value>(reinterpret_cast<Value*>(*key)), | 3106 return Set(v8::Handle<Value>(reinterpret_cast<Value*>(*key)), |
| 3109 value, DontEnum); | 3107 value, DontEnum); |
| 3110 } | 3108 } |
| 3111 | 3109 |
| (...skipping 3038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6150 i::Handle<i::String> part = i_isolate->factory()->for_string(); | 6148 i::Handle<i::String> part = i_isolate->factory()->for_string(); |
| 6151 i::Handle<i::JSObject> symbols = | 6149 i::Handle<i::JSObject> symbols = |
| 6152 i::Handle<i::JSObject>::cast( | 6150 i::Handle<i::JSObject>::cast( |
| 6153 i::Object::GetPropertyOrElement(registry, part)); | 6151 i::Object::GetPropertyOrElement(registry, part)); |
| 6154 i::Handle<i::Object> symbol = | 6152 i::Handle<i::Object> symbol = |
| 6155 i::Object::GetPropertyOrElement(symbols, i_name); | 6153 i::Object::GetPropertyOrElement(symbols, i_name); |
| 6156 if (!symbol->IsSymbol()) { | 6154 if (!symbol->IsSymbol()) { |
| 6157 ASSERT(symbol->IsUndefined()); | 6155 ASSERT(symbol->IsUndefined()); |
| 6158 symbol = i_isolate->factory()->NewSymbol(); | 6156 symbol = i_isolate->factory()->NewSymbol(); |
| 6159 i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); | 6157 i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| 6160 i::JSObject::SetProperty(symbols, i_name, symbol, NONE, i::STRICT); | 6158 i::JSObject::SetProperty( |
| 6159 symbols, i_name, symbol, NONE, i::STRICT).Assert(); | |
| 6161 } | 6160 } |
| 6162 return Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); | 6161 return Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); |
| 6163 } | 6162 } |
| 6164 | 6163 |
| 6165 | 6164 |
| 6166 Local<Symbol> v8::Symbol::ForApi(Isolate* isolate, Local<String> name) { | 6165 Local<Symbol> v8::Symbol::ForApi(Isolate* isolate, Local<String> name) { |
| 6167 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6166 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6168 i::Handle<i::String> i_name = Utils::OpenHandle(*name); | 6167 i::Handle<i::String> i_name = Utils::OpenHandle(*name); |
| 6169 i::Handle<i::JSObject> registry = i_isolate->GetSymbolRegistry(); | 6168 i::Handle<i::JSObject> registry = i_isolate->GetSymbolRegistry(); |
| 6170 i::Handle<i::String> part = i_isolate->factory()->for_api_string(); | 6169 i::Handle<i::String> part = i_isolate->factory()->for_api_string(); |
| 6171 i::Handle<i::JSObject> symbols = | 6170 i::Handle<i::JSObject> symbols = |
| 6172 i::Handle<i::JSObject>::cast( | 6171 i::Handle<i::JSObject>::cast( |
| 6173 i::Object::GetPropertyOrElement(registry, part)); | 6172 i::Object::GetPropertyOrElement(registry, part)); |
| 6174 i::Handle<i::Object> symbol = | 6173 i::Handle<i::Object> symbol = |
| 6175 i::Object::GetPropertyOrElement(symbols, i_name); | 6174 i::Object::GetPropertyOrElement(symbols, i_name); |
| 6176 if (!symbol->IsSymbol()) { | 6175 if (!symbol->IsSymbol()) { |
| 6177 ASSERT(symbol->IsUndefined()); | 6176 ASSERT(symbol->IsUndefined()); |
| 6178 symbol = i_isolate->factory()->NewSymbol(); | 6177 symbol = i_isolate->factory()->NewSymbol(); |
| 6179 i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); | 6178 i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| 6180 i::JSObject::SetProperty(symbols, i_name, symbol, NONE, i::STRICT); | 6179 i::JSObject::SetProperty( |
| 6180 symbols, i_name, symbol, NONE, i::STRICT).Assert(); | |
| 6181 } | 6181 } |
| 6182 return Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); | 6182 return Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); |
| 6183 } | 6183 } |
| 6184 | 6184 |
| 6185 | 6185 |
| 6186 Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) { | 6186 Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) { |
| 6187 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6187 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6188 EnsureInitializedForIsolate(i_isolate, "v8::Private::New()"); | 6188 EnsureInitializedForIsolate(i_isolate, "v8::Private::New()"); |
| 6189 LOG_API(i_isolate, "Private::New()"); | 6189 LOG_API(i_isolate, "Private::New()"); |
| 6190 ENTER_V8(i_isolate); | 6190 ENTER_V8(i_isolate); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 6202 i::Handle<i::String> part = i_isolate->factory()->private_api_string(); | 6202 i::Handle<i::String> part = i_isolate->factory()->private_api_string(); |
| 6203 i::Handle<i::JSObject> privates = | 6203 i::Handle<i::JSObject> privates = |
| 6204 i::Handle<i::JSObject>::cast( | 6204 i::Handle<i::JSObject>::cast( |
| 6205 i::Object::GetPropertyOrElement(registry, part)); | 6205 i::Object::GetPropertyOrElement(registry, part)); |
| 6206 i::Handle<i::Object> symbol = | 6206 i::Handle<i::Object> symbol = |
| 6207 i::Object::GetPropertyOrElement(privates, i_name); | 6207 i::Object::GetPropertyOrElement(privates, i_name); |
| 6208 if (!symbol->IsSymbol()) { | 6208 if (!symbol->IsSymbol()) { |
| 6209 ASSERT(symbol->IsUndefined()); | 6209 ASSERT(symbol->IsUndefined()); |
| 6210 symbol = i_isolate->factory()->NewPrivateSymbol(); | 6210 symbol = i_isolate->factory()->NewPrivateSymbol(); |
| 6211 i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); | 6211 i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| 6212 i::JSObject::SetProperty(privates, i_name, symbol, NONE, i::STRICT); | 6212 i::JSObject::SetProperty( |
| 6213 privates, i_name, symbol, NONE, i::STRICT).Assert(); | |
| 6213 } | 6214 } |
| 6214 Local<Symbol> result = Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); | 6215 Local<Symbol> result = Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); |
| 6215 return v8::Handle<Private>(reinterpret_cast<Private*>(*result)); | 6216 return v8::Handle<Private>(reinterpret_cast<Private*>(*result)); |
| 6216 } | 6217 } |
| 6217 | 6218 |
| 6218 | 6219 |
| 6219 Local<Number> v8::Number::New(Isolate* isolate, double value) { | 6220 Local<Number> v8::Number::New(Isolate* isolate, double value) { |
| 6220 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6221 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6221 ASSERT(internal_isolate->IsInitialized()); | 6222 ASSERT(internal_isolate->IsInitialized()); |
| 6222 if (std::isnan(value)) { | 6223 if (std::isnan(value)) { |
| (...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6957 } | 6958 } |
| 6958 | 6959 |
| 6959 | 6960 |
| 6960 Local<Value> Debug::GetMirror(v8::Handle<v8::Value> obj) { | 6961 Local<Value> Debug::GetMirror(v8::Handle<v8::Value> obj) { |
| 6961 i::Isolate* isolate = i::Isolate::Current(); | 6962 i::Isolate* isolate = i::Isolate::Current(); |
| 6962 if (!isolate->IsInitialized()) return Local<Value>(); | 6963 if (!isolate->IsInitialized()) return Local<Value>(); |
| 6963 ON_BAILOUT(isolate, "v8::Debug::GetMirror()", return Local<Value>()); | 6964 ON_BAILOUT(isolate, "v8::Debug::GetMirror()", return Local<Value>()); |
| 6964 ENTER_V8(isolate); | 6965 ENTER_V8(isolate); |
| 6965 v8::EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 6966 v8::EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
| 6966 i::Debug* isolate_debug = isolate->debug(); | 6967 i::Debug* isolate_debug = isolate->debug(); |
| 6967 isolate_debug->Load(); | 6968 EXCEPTION_PREAMBLE(isolate); |
| 6969 | |
| 6970 has_pending_exception = !isolate_debug->Load(); | |
| 6971 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); | |
| 6972 | |
| 6968 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); | 6973 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); |
| 6969 i::Handle<i::String> name = isolate->factory()->InternalizeOneByteString( | 6974 i::Handle<i::String> name = isolate->factory()->InternalizeOneByteString( |
| 6970 STATIC_ASCII_VECTOR("MakeMirror")); | 6975 STATIC_ASCII_VECTOR("MakeMirror")); |
| 6971 i::Handle<i::Object> fun_obj = i::Object::GetProperty(debug, name); | 6976 i::Handle<i::Object> fun_obj = i::Object::GetProperty(debug, name); |
| 6972 ASSERT(!fun_obj.is_null()); | 6977 ASSERT(!fun_obj.is_null()); |
| 6973 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(fun_obj); | 6978 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(fun_obj); |
| 6974 v8::Handle<v8::Function> v8_fun = Utils::ToLocal(fun); | 6979 v8::Handle<v8::Function> v8_fun = Utils::ToLocal(fun); |
| 6975 const int kArgc = 1; | 6980 const int kArgc = 1; |
| 6976 v8::Handle<v8::Value> argv[kArgc] = { obj }; | 6981 v8::Handle<v8::Value> argv[kArgc] = { obj }; |
| 6977 EXCEPTION_PREAMBLE(isolate); | |
| 6978 v8::Local<v8::Value> result = | 6982 v8::Local<v8::Value> result = |
| 6979 v8_fun->Call(Utils::ToLocal(debug), kArgc, argv); | 6983 v8_fun->Call(Utils::ToLocal(debug), kArgc, argv); |
| 6980 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); | 6984 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); |
|
Igor Sheludko
2014/04/04 10:58:19
This second EXCEPTION_BAILOUT_CHECK will decrement
Yang
2014/04/04 11:17:41
Good point. I will remove the new EXCEPTION_BAILOU
| |
| 6981 return scope.Escape(result); | 6985 return scope.Escape(result); |
| 6982 } | 6986 } |
| 6983 | 6987 |
| 6984 | 6988 |
| 6985 bool Debug::EnableAgent(const char* name, int port, bool wait_for_connection) { | 6989 bool Debug::EnableAgent(const char* name, int port, bool wait_for_connection) { |
| 6986 return i::Isolate::Current()->debugger()->StartAgent(name, port, | 6990 return i::Isolate::Current()->debugger()->StartAgent(name, port, |
| 6987 wait_for_connection); | 6991 wait_for_connection); |
| 6988 } | 6992 } |
| 6989 | 6993 |
| 6990 | 6994 |
| (...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7658 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7662 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7659 Address callback_address = | 7663 Address callback_address = |
| 7660 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7664 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7661 VMState<EXTERNAL> state(isolate); | 7665 VMState<EXTERNAL> state(isolate); |
| 7662 ExternalCallbackScope call_scope(isolate, callback_address); | 7666 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7663 callback(info); | 7667 callback(info); |
| 7664 } | 7668 } |
| 7665 | 7669 |
| 7666 | 7670 |
| 7667 } } // namespace v8::internal | 7671 } } // namespace v8::internal |
| OLD | NEW |