Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(689)

Side by Side Diff: src/messages.cc

Issue 1785403002: [runtime] split up loops with HandleScopes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: making windose happy Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/messages.h" 5 #include "src/messages.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/execution.h" 8 #include "src/execution.h"
9 #include "src/isolate-inl.h" 9 #include "src/isolate-inl.h"
10 #include "src/string-builder.h" 10 #include "src/string-builder.h"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 v8::Local<v8::Value> api_exception_obj = v8::Utils::ToLocal(exception); 109 v8::Local<v8::Value> api_exception_obj = v8::Utils::ToLocal(exception);
110 110
111 v8::NeanderArray global_listeners(isolate->factory()->message_listeners()); 111 v8::NeanderArray global_listeners(isolate->factory()->message_listeners());
112 int global_length = global_listeners.length(); 112 int global_length = global_listeners.length();
113 if (global_length == 0) { 113 if (global_length == 0) {
114 DefaultMessageReport(isolate, loc, message); 114 DefaultMessageReport(isolate, loc, message);
115 if (isolate->has_scheduled_exception()) { 115 if (isolate->has_scheduled_exception()) {
116 isolate->clear_scheduled_exception(); 116 isolate->clear_scheduled_exception();
117 } 117 }
118 } else { 118 } else {
119 for (int i = 0; i < global_length; i++) { 119 FOR_WITH_HANDLE_SCOPE(isolate, int, i = 0, i, i < global_length, i++, {
120 HandleScope scope(isolate);
121 if (global_listeners.get(i)->IsUndefined()) continue; 120 if (global_listeners.get(i)->IsUndefined()) continue;
122 v8::NeanderObject listener(JSObject::cast(global_listeners.get(i))); 121 v8::NeanderObject listener(JSObject::cast(global_listeners.get(i)));
123 Handle<Foreign> callback_obj(Foreign::cast(listener.get(0))); 122 Handle<Foreign> callback_obj(Foreign::cast(listener.get(0)));
124 v8::MessageCallback callback = 123 v8::MessageCallback callback =
125 FUNCTION_CAST<v8::MessageCallback>(callback_obj->foreign_address()); 124 FUNCTION_CAST<v8::MessageCallback>(callback_obj->foreign_address());
126 Handle<Object> callback_data(listener.get(1), isolate); 125 Handle<Object> callback_data(listener.get(1), isolate);
127 { 126 {
128 // Do not allow exceptions to propagate. 127 // Do not allow exceptions to propagate.
129 v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); 128 v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate));
130 callback(api_message_obj, callback_data->IsUndefined() 129 callback(api_message_obj, callback_data->IsUndefined()
131 ? api_exception_obj 130 ? api_exception_obj
132 : v8::Utils::ToLocal(callback_data)); 131 : v8::Utils::ToLocal(callback_data));
133 } 132 }
134 if (isolate->has_scheduled_exception()) { 133 if (isolate->has_scheduled_exception()) {
135 isolate->clear_scheduled_exception(); 134 isolate->clear_scheduled_exception();
136 } 135 }
137 } 136 });
138 } 137 }
139 } 138 }
140 139
141 140
142 Handle<String> MessageHandler::GetMessage(Isolate* isolate, 141 Handle<String> MessageHandler::GetMessage(Isolate* isolate,
143 Handle<Object> data) { 142 Handle<Object> data) {
144 Handle<JSMessageObject> message = Handle<JSMessageObject>::cast(data); 143 Handle<JSMessageObject> message = Handle<JSMessageObject>::cast(data);
145 Handle<Object> arg = Handle<Object>(message->argument(), isolate); 144 Handle<Object> arg = Handle<Object>(message->argument(), isolate);
146 return MessageTemplate::FormatMessage(isolate, message->type(), arg); 145 return MessageTemplate::FormatMessage(isolate, message->type(), arg);
147 } 146 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 HandleScope outer_scope(isolate_); 254 HandleScope outer_scope(isolate_);
256 Handle<Object> result; 255 Handle<Object> result;
257 for (PrototypeIterator iter(isolate_, obj, 256 for (PrototypeIterator iter(isolate_, obj,
258 PrototypeIterator::START_AT_RECEIVER); 257 PrototypeIterator::START_AT_RECEIVER);
259 !iter.IsAtEnd(); iter.Advance()) { 258 !iter.IsAtEnd(); iter.Advance()) {
260 Handle<Object> current = PrototypeIterator::GetCurrent(iter); 259 Handle<Object> current = PrototypeIterator::GetCurrent(iter);
261 if (!current->IsJSObject()) break; 260 if (!current->IsJSObject()) break;
262 Handle<JSObject> current_obj = Handle<JSObject>::cast(current); 261 Handle<JSObject> current_obj = Handle<JSObject>::cast(current);
263 if (current_obj->IsAccessCheckNeeded()) break; 262 if (current_obj->IsAccessCheckNeeded()) break;
264 Handle<FixedArray> keys = JSObject::GetEnumPropertyKeys(current_obj); 263 Handle<FixedArray> keys = JSObject::GetEnumPropertyKeys(current_obj);
265 for (int i = 0; i < keys->length(); i++) { 264 FOR_WITH_HANDLE_SCOPE(isolate_, int, i = 0, i, i < keys->length(), i++, {
266 HandleScope inner_scope(isolate_);
267 if (!keys->get(i)->IsName()) continue; 265 if (!keys->get(i)->IsName()) continue;
268 Handle<Name> name_key(Name::cast(keys->get(i)), isolate_); 266 Handle<Name> name_key(Name::cast(keys->get(i)), isolate_);
269 if (!CheckMethodName(isolate_, current_obj, name_key, fun_, 267 if (!CheckMethodName(isolate_, current_obj, name_key, fun_,
270 LookupIterator::OWN_SKIP_INTERCEPTOR)) 268 LookupIterator::OWN_SKIP_INTERCEPTOR))
271 continue; 269 continue;
272 // Return null in case of duplicates to avoid confusion. 270 // Return null in case of duplicates to avoid confusion.
273 if (!result.is_null()) return isolate_->factory()->null_value(); 271 if (!result.is_null()) return isolate_->factory()->null_value();
274 result = inner_scope.CloseAndEscape(name_key); 272 result = loop_scope.CloseAndEscape(name_key);
275 } 273 });
276 } 274 }
277 275
278 if (!result.is_null()) return outer_scope.CloseAndEscape(result); 276 if (!result.is_null()) return outer_scope.CloseAndEscape(result);
279 return isolate_->factory()->null_value(); 277 return isolate_->factory()->null_value();
280 } 278 }
281 279
282 280
283 int CallSite::GetLineNumber() { 281 int CallSite::GetLineNumber() {
284 if (pos_ >= 0) { 282 if (pos_ >= 0) {
285 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 283 Handle<Object> script_obj(fun_->shared()->script(), isolate_);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 builder.AppendCharacter(*c); 409 builder.AppendCharacter(*c);
412 } 410 }
413 } 411 }
414 412
415 return builder.Finish(); 413 return builder.Finish();
416 } 414 }
417 415
418 416
419 } // namespace internal 417 } // namespace internal
420 } // namespace v8 418 } // namespace v8
OLDNEW
« src/isolate.h ('K') | « src/isolate.cc ('k') | src/runtime/runtime-literals.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698