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

Side by Side Diff: runtime/vm/debugger_api_impl.cc

Issue 1310463005: - Ensure that HandleScope is initialized with a thread. (Remove (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments Created 5 years, 3 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
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/handles.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "include/dart_tools_api.h" 5 #include "include/dart_tools_api.h"
6 6
7 #include "vm/class_finalizer.h" 7 #include "vm/class_finalizer.h"
8 #include "vm/compiler.h" 8 #include "vm/compiler.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_state.h" 10 #include "vm/dart_api_state.h"
11 #include "vm/debugger.h" 11 #include "vm/debugger.h"
12 #include "vm/isolate.h" 12 #include "vm/isolate.h"
13 #include "vm/object_store.h" 13 #include "vm/object_store.h"
14 #include "vm/symbols.h" 14 #include "vm/symbols.h"
15 15
16 namespace dart { 16 namespace dart {
17 17
18 // Facilitate quick access to the current zone once we have the curren thread.
19 #define Z (T->zone())
20
21
18 #define UNWRAP_AND_CHECK_PARAM(type, var, param) \ 22 #define UNWRAP_AND_CHECK_PARAM(type, var, param) \
19 type& var = type::Handle(); \ 23 type& var = type::Handle(); \
20 do { \ 24 do { \
21 const Object& tmp = Object::Handle(Api::UnwrapHandle(param)); \ 25 const Object& tmp = Object::Handle(Api::UnwrapHandle(param)); \
22 if (tmp.IsNull()) { \ 26 if (tmp.IsNull()) { \
23 return Api::NewError("%s expects argument '%s' to be non-null.", \ 27 return Api::NewError("%s expects argument '%s' to be non-null.", \
24 CURRENT_FUNC, #param); \ 28 CURRENT_FUNC, #param); \
25 } else if (tmp.IsApiError()) { \ 29 } else if (tmp.IsApiError()) { \
26 return param; \ 30 return param; \
27 } else if (!tmp.Is##type()) { \ 31 } else if (!tmp.Is##type()) { \
(...skipping 16 matching lines...) Expand all
44 48
45 49
46 #define CHECK_NOT_NULL(param) \ 50 #define CHECK_NOT_NULL(param) \
47 if (param == NULL) { \ 51 if (param == NULL) { \
48 return Api::NewError("%s expects argument '%s' to be non-null.", \ 52 return Api::NewError("%s expects argument '%s' to be non-null.", \
49 CURRENT_FUNC, #param); \ 53 CURRENT_FUNC, #param); \
50 } 54 }
51 55
52 56
53 DART_EXPORT intptr_t Dart_CacheObject(Dart_Handle object_in) { 57 DART_EXPORT intptr_t Dart_CacheObject(Dart_Handle object_in) {
54 Isolate* isolate = Isolate::Current(); 58 DARTSCOPE(Thread::Current());
55 DARTSCOPE(isolate); 59 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object_in));
56 const Object& obj = Object::Handle(Api::UnwrapHandle(object_in));
57 if (obj.IsApiError()) { 60 if (obj.IsApiError()) {
58 return -1; 61 return -1;
59 } 62 }
60 return isolate->debugger()->CacheObject(obj); 63 return I->debugger()->CacheObject(obj);
61 } 64 }
62 65
63 66
64 DART_EXPORT Dart_Handle Dart_GetCachedObject(intptr_t obj_id) { 67 DART_EXPORT Dart_Handle Dart_GetCachedObject(intptr_t obj_id) {
65 Isolate* isolate = Isolate::Current(); 68 DARTSCOPE(Thread::Current());
66 DARTSCOPE(isolate); 69 if (!I->debugger()->IsValidObjectId(obj_id)) {
67 if (!isolate->debugger()->IsValidObjectId(obj_id)) {
68 return Api::NewError("%s: object id %" Pd " is invalid", 70 return Api::NewError("%s: object id %" Pd " is invalid",
69 CURRENT_FUNC, obj_id); 71 CURRENT_FUNC, obj_id);
70 } 72 }
71 return Api::NewHandle(isolate, isolate->debugger()->GetCachedObject(obj_id)); 73 return Api::NewHandle(I, I->debugger()->GetCachedObject(obj_id));
72 } 74 }
73 75
74 76
75 DART_EXPORT Dart_Handle Dart_StackTraceLength( 77 DART_EXPORT Dart_Handle Dart_StackTraceLength(
76 Dart_StackTrace trace, 78 Dart_StackTrace trace,
77 intptr_t* length) { 79 intptr_t* length) {
78 Isolate* isolate = Isolate::Current(); 80 DARTSCOPE(Thread::Current());
79 DARTSCOPE(isolate);
80 CHECK_NOT_NULL(length); 81 CHECK_NOT_NULL(length);
81 CHECK_AND_CAST(DebuggerStackTrace, stack_trace, trace); 82 CHECK_AND_CAST(DebuggerStackTrace, stack_trace, trace);
82 *length = stack_trace->Length(); 83 *length = stack_trace->Length();
83 return Api::Success(); 84 return Api::Success();
84 } 85 }
85 86
86 87
87 DART_EXPORT Dart_Handle Dart_GetActivationFrame( 88 DART_EXPORT Dart_Handle Dart_GetActivationFrame(
88 Dart_StackTrace trace, 89 Dart_StackTrace trace,
89 int frame_index, 90 int frame_index,
90 Dart_ActivationFrame* frame) { 91 Dart_ActivationFrame* frame) {
91 Isolate* isolate = Isolate::Current(); 92 DARTSCOPE(Thread::Current());
92 DARTSCOPE(isolate);
93 CHECK_NOT_NULL(frame); 93 CHECK_NOT_NULL(frame);
94 CHECK_AND_CAST(DebuggerStackTrace, stack_trace, trace); 94 CHECK_AND_CAST(DebuggerStackTrace, stack_trace, trace);
95 if ((frame_index < 0) || (frame_index >= stack_trace->Length())) { 95 if ((frame_index < 0) || (frame_index >= stack_trace->Length())) {
96 return Api::NewError("argument 'frame_index' is out of range for %s", 96 return Api::NewError("argument 'frame_index' is out of range for %s",
97 CURRENT_FUNC); 97 CURRENT_FUNC);
98 } 98 }
99 *frame = reinterpret_cast<Dart_ActivationFrame>( 99 *frame = reinterpret_cast<Dart_ActivationFrame>(
100 stack_trace->FrameAt(frame_index)); 100 stack_trace->FrameAt(frame_index));
101 return Api::Success(); 101 return Api::Success();
102 } 102 }
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 190
191 DART_EXPORT void Dart_SetIsolateEventHandler(Dart_IsolateEventHandler handler) { 191 DART_EXPORT void Dart_SetIsolateEventHandler(Dart_IsolateEventHandler handler) {
192 isolate_event_handler = handler; 192 isolate_event_handler = handler;
193 Debugger::SetEventHandler(DebuggerEventHandler); 193 Debugger::SetEventHandler(DebuggerEventHandler);
194 } 194 }
195 195
196 196
197 DART_EXPORT Dart_Handle Dart_SetExceptionPauseInfo( 197 DART_EXPORT Dart_Handle Dart_SetExceptionPauseInfo(
198 Dart_ExceptionPauseInfo pause_info) { 198 Dart_ExceptionPauseInfo pause_info) {
199 Isolate* isolate = Isolate::Current(); 199 DARTSCOPE(Thread::Current());
200 DARTSCOPE(isolate); 200 I->debugger()->SetExceptionPauseInfo(pause_info);
201 isolate->debugger()->SetExceptionPauseInfo(pause_info);
202 return Api::Success(); 201 return Api::Success();
203 } 202 }
204 203
205 204
206 DART_EXPORT Dart_ExceptionPauseInfo Dart_GetExceptionPauseInfo() { 205 DART_EXPORT Dart_ExceptionPauseInfo Dart_GetExceptionPauseInfo() {
207 Isolate* isolate = Isolate::Current(); 206 DARTSCOPE(Thread::Current());
208 DARTSCOPE(isolate); 207 return I->debugger()->GetExceptionPauseInfo();
209 return isolate->debugger()->GetExceptionPauseInfo();
210 } 208 }
211 209
212 210
213 DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) { 211 DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) {
214 Isolate* isolate = Isolate::Current(); 212 DARTSCOPE(Thread::Current());
215 DARTSCOPE(isolate);
216 CHECK_NOT_NULL(trace); 213 CHECK_NOT_NULL(trace);
217 *trace = reinterpret_cast<Dart_StackTrace>( 214 *trace = reinterpret_cast<Dart_StackTrace>(
218 isolate->debugger()->CurrentStackTrace()); 215 I->debugger()->CurrentStackTrace());
219 return Api::Success(); 216 return Api::Success();
220 } 217 }
221 218
222 219
223 DART_EXPORT Dart_Handle Dart_GetStackTraceFromError(Dart_Handle handle, 220 DART_EXPORT Dart_Handle Dart_GetStackTraceFromError(Dart_Handle handle,
224 Dart_StackTrace* trace) { 221 Dart_StackTrace* trace) {
225 Isolate* isolate = Isolate::Current(); 222 DARTSCOPE(Thread::Current());
226 DARTSCOPE(isolate);
227 CHECK_NOT_NULL(trace); 223 CHECK_NOT_NULL(trace);
228 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(handle)); 224 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle));
229 if (obj.IsUnhandledException()) { 225 if (obj.IsUnhandledException()) {
230 const UnhandledException& error = UnhandledException::Cast(obj); 226 const UnhandledException& error = UnhandledException::Cast(obj);
231 Stacktrace& dart_stacktrace = Stacktrace::Handle(isolate); 227 Stacktrace& dart_stacktrace = Stacktrace::Handle(Z);
232 dart_stacktrace ^= error.stacktrace(); 228 dart_stacktrace ^= error.stacktrace();
233 if (dart_stacktrace.IsNull()) { 229 if (dart_stacktrace.IsNull()) {
234 *trace = NULL; 230 *trace = NULL;
235 } else { 231 } else {
236 *trace = reinterpret_cast<Dart_StackTrace>( 232 *trace = reinterpret_cast<Dart_StackTrace>(
237 isolate->debugger()->StackTraceFrom(dart_stacktrace)); 233 I->debugger()->StackTraceFrom(dart_stacktrace));
238 } 234 }
239 return Api::Success(); 235 return Api::Success();
240 } else { 236 } else {
241 return Api::NewError("Can only get stacktraces from error handles or " 237 return Api::NewError("Can only get stacktraces from error handles or "
242 "instances of Error."); 238 "instances of Error.");
243 } 239 }
244 } 240 }
245 241
246 242
247 DART_EXPORT Dart_Handle Dart_ActivationFrameInfo( 243 DART_EXPORT Dart_Handle Dart_ActivationFrameInfo(
248 Dart_ActivationFrame activation_frame, 244 Dart_ActivationFrame activation_frame,
249 Dart_Handle* function_name, 245 Dart_Handle* function_name,
250 Dart_Handle* script_url, 246 Dart_Handle* script_url,
251 intptr_t* line_number, 247 intptr_t* line_number,
252 intptr_t* column_number) { 248 intptr_t* column_number) {
253 Isolate* isolate = Isolate::Current(); 249 DARTSCOPE(Thread::Current());
254 DARTSCOPE(isolate);
255 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); 250 CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
256 if (function_name != NULL) { 251 if (function_name != NULL) {
257 *function_name = Api::NewHandle(isolate, frame->QualifiedFunctionName()); 252 *function_name = Api::NewHandle(I, frame->QualifiedFunctionName());
258 } 253 }
259 if (script_url != NULL) { 254 if (script_url != NULL) {
260 *script_url = Api::NewHandle(isolate, frame->SourceUrl()); 255 *script_url = Api::NewHandle(I, frame->SourceUrl());
261 } 256 }
262 if (line_number != NULL) { 257 if (line_number != NULL) {
263 *line_number = frame->LineNumber(); 258 *line_number = frame->LineNumber();
264 } 259 }
265 if (column_number != NULL) { 260 if (column_number != NULL) {
266 *column_number = frame->ColumnNumber(); 261 *column_number = frame->ColumnNumber();
267 } 262 }
268 return Api::Success(); 263 return Api::Success();
269 } 264 }
270 265
271 266
272 DART_EXPORT Dart_Handle Dart_ActivationFrameGetLocation( 267 DART_EXPORT Dart_Handle Dart_ActivationFrameGetLocation(
273 Dart_ActivationFrame activation_frame, 268 Dart_ActivationFrame activation_frame,
274 Dart_Handle* function_name, 269 Dart_Handle* function_name,
275 Dart_Handle* function, 270 Dart_Handle* function,
276 Dart_CodeLocation* location) { 271 Dart_CodeLocation* location) {
277 // TODO(hausner): Implement a way to recognize when there 272 // TODO(hausner): Implement a way to recognize when there
278 // is no source code for the code in the frame. 273 // is no source code for the code in the frame.
279 Isolate* isolate = Isolate::Current(); 274 DARTSCOPE(Thread::Current());
280 DARTSCOPE(isolate);
281 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); 275 CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
282 if (function_name != NULL) { 276 if (function_name != NULL) {
283 *function_name = Api::NewHandle(isolate, frame->QualifiedFunctionName()); 277 *function_name = Api::NewHandle(I, frame->QualifiedFunctionName());
284 } 278 }
285 if (function != NULL) { 279 if (function != NULL) {
286 *function = Api::NewHandle(isolate, frame->function().raw()); 280 *function = Api::NewHandle(I, frame->function().raw());
287 } 281 }
288 282
289 if (location != NULL) { 283 if (location != NULL) {
290 location->script_url = Api::NewHandle(isolate, frame->SourceUrl()); 284 location->script_url = Api::NewHandle(I, frame->SourceUrl());
291 const Library& lib = Library::Handle(frame->Library()); 285 const Library& lib = Library::Handle(Z, frame->Library());
292 location->library_id = lib.index(); 286 location->library_id = lib.index();
293 location->token_pos = frame->TokenPos(); 287 location->token_pos = frame->TokenPos();
294 } 288 }
295 return Api::Success(); 289 return Api::Success();
296 } 290 }
297 291
298 DART_EXPORT Dart_Handle Dart_ActivationFrameGetFramePointer( 292 DART_EXPORT Dart_Handle Dart_ActivationFrameGetFramePointer(
299 Dart_ActivationFrame activation_frame, 293 Dart_ActivationFrame activation_frame,
300 uintptr_t* frame_pointer) { 294 uintptr_t* frame_pointer) {
301 Isolate* isolate = Isolate::Current(); 295 DARTSCOPE(Thread::Current());
302 DARTSCOPE(isolate);
303 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); 296 CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
304 297
305 if (frame_pointer != NULL) { 298 if (frame_pointer != NULL) {
306 *frame_pointer = static_cast<uintptr_t>(frame->fp()); 299 *frame_pointer = static_cast<uintptr_t>(frame->fp());
307 } 300 }
308 return Api::Success(); 301 return Api::Success();
309 } 302 }
310 303
311 304
312 DART_EXPORT Dart_Handle Dart_GetFunctionOrigin(Dart_Handle function_in) { 305 DART_EXPORT Dart_Handle Dart_GetFunctionOrigin(Dart_Handle function_in) {
313 Isolate* isolate = Isolate::Current(); 306 DARTSCOPE(Thread::Current());
314 DARTSCOPE(isolate);
315 UNWRAP_AND_CHECK_PARAM(Function, function, function_in); 307 UNWRAP_AND_CHECK_PARAM(Function, function, function_in);
316 308
317 const Class& cls = Class::Handle(function.origin()); 309 const Class& cls = Class::Handle(Z, function.origin());
318 if (!cls.IsTopLevel()) { 310 if (!cls.IsTopLevel()) {
319 return Dart_NewInteger(cls.id()); 311 return Dart_NewInteger(cls.id());
320 } 312 }
321 return Api::Null(); 313 return Api::Null();
322 } 314 }
323 315
324 316
325 DART_EXPORT Dart_Handle Dart_GetLocalVariables( 317 DART_EXPORT Dart_Handle Dart_GetLocalVariables(
326 Dart_ActivationFrame activation_frame) { 318 Dart_ActivationFrame activation_frame) {
327 Isolate* isolate = Isolate::Current(); 319 DARTSCOPE(Thread::Current());
328 DARTSCOPE(isolate);
329 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); 320 CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
330 return Api::NewHandle(isolate, frame->GetLocalVariables()); 321 return Api::NewHandle(I, frame->GetLocalVariables());
331 } 322 }
332 323
333 324
334 DART_EXPORT Dart_Handle Dart_SetBreakpoint( 325 DART_EXPORT Dart_Handle Dart_SetBreakpoint(
335 Dart_Handle script_url_in, 326 Dart_Handle script_url_in,
336 intptr_t line_number) { 327 intptr_t line_number) {
337 Isolate* isolate = Isolate::Current(); 328 DARTSCOPE(Thread::Current());
338 DARTSCOPE(isolate);
339 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); 329 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
340 330
341 Debugger* debugger = isolate->debugger(); 331 Debugger* debugger = I->debugger();
342 Breakpoint* bpt = 332 Breakpoint* bpt =
343 debugger->SetBreakpointAtLine(script_url, line_number); 333 debugger->SetBreakpointAtLine(script_url, line_number);
344 if (bpt == NULL) { 334 if (bpt == NULL) {
345 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'", 335 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'",
346 CURRENT_FUNC, line_number, script_url.ToCString()); 336 CURRENT_FUNC, line_number, script_url.ToCString());
347 } 337 }
348 return Dart_NewInteger(bpt->id()); 338 return Dart_NewInteger(bpt->id());
349 } 339 }
350 340
351 341
352 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) { 342 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) {
353 Isolate* isolate = Isolate::Current(); 343 DARTSCOPE(Thread::Current());
354 DARTSCOPE(isolate); 344 Debugger* debugger = I->debugger();
355 Debugger* debugger = isolate->debugger();
356 345
357 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); 346 Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
358 if (bpt == NULL) { 347 if (bpt == NULL) {
359 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", 348 return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
360 CURRENT_FUNC, bp_id); 349 CURRENT_FUNC, bp_id);
361 } 350 }
362 return Api::NewHandle(isolate, bpt->bpt_location()->url()); 351 return Api::NewHandle(I, bpt->bpt_location()->url());
363 } 352 }
364 353
365 354
366 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) { 355 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) {
367 Isolate* isolate = Isolate::Current(); 356 DARTSCOPE(Thread::Current());
368 DARTSCOPE(isolate); 357 Debugger* debugger = I->debugger();
369 Debugger* debugger = isolate->debugger();
370 358
371 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); 359 Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
372 if (bpt == NULL) { 360 if (bpt == NULL) {
373 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", 361 return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
374 CURRENT_FUNC, bp_id); 362 CURRENT_FUNC, bp_id);
375 } 363 }
376 return Dart_NewInteger(bpt->bpt_location()->LineNumber()); 364 return Dart_NewInteger(bpt->bpt_location()->LineNumber());
377 } 365 }
378 366
379 367
380 DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry( 368 DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry(
381 Dart_Handle library_in, 369 Dart_Handle library_in,
382 Dart_Handle class_name_in, 370 Dart_Handle class_name_in,
383 Dart_Handle function_name_in) { 371 Dart_Handle function_name_in) {
384 Isolate* isolate = Isolate::Current(); 372 DARTSCOPE(Thread::Current());
385 DARTSCOPE(isolate);
386 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); 373 UNWRAP_AND_CHECK_PARAM(Library, library, library_in);
387 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in); 374 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in);
388 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in); 375 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in);
389 376
390 // Ensure that the library is loaded. 377 // Ensure that the library is loaded.
391 if (!library.Loaded()) { 378 if (!library.Loaded()) {
392 return Api::NewError( 379 return Api::NewError(
393 "%s expects library argument 'library_in' to be loaded.", 380 "%s expects library argument 'library_in' to be loaded.",
394 CURRENT_FUNC); 381 CURRENT_FUNC);
395 } 382 }
396 383
397 // Resolve the breakpoint target function. 384 // Resolve the breakpoint target function.
398 Debugger* debugger = isolate->debugger(); 385 Debugger* debugger = I->debugger();
399 const Function& bp_target = Function::Handle( 386 const Function& bp_target = Function::Handle(
400 debugger->ResolveFunction(library, class_name, function_name)); 387 debugger->ResolveFunction(library, class_name, function_name));
401 if (bp_target.IsNull()) { 388 if (bp_target.IsNull()) {
402 const bool toplevel = class_name.Length() == 0; 389 const bool toplevel = class_name.Length() == 0;
403 return Api::NewError("%s: could not find function '%s%s%s'", 390 return Api::NewError("%s: could not find function '%s%s%s'",
404 CURRENT_FUNC, 391 CURRENT_FUNC,
405 toplevel ? "" : class_name.ToCString(), 392 toplevel ? "" : class_name.ToCString(),
406 toplevel ? "" : ".", 393 toplevel ? "" : ".",
407 function_name.ToCString()); 394 function_name.ToCString());
408 } 395 }
409 396
410 Breakpoint* bpt = debugger->SetBreakpointAtEntry(bp_target, false); 397 Breakpoint* bpt = debugger->SetBreakpointAtEntry(bp_target, false);
411 if (bpt == NULL) { 398 if (bpt == NULL) {
412 const char* target_name = Debugger::QualifiedFunctionName(bp_target); 399 const char* target_name = Debugger::QualifiedFunctionName(bp_target);
413 return Api::NewError("%s: no breakpoint location found in '%s'", 400 return Api::NewError("%s: no breakpoint location found in '%s'",
414 CURRENT_FUNC, target_name); 401 CURRENT_FUNC, target_name);
415 } 402 }
416 return Dart_NewInteger(bpt->id()); 403 return Dart_NewInteger(bpt->id());
417 } 404 }
418 405
419 406
420 DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry( 407 DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry(
421 Dart_Handle library_in, 408 Dart_Handle library_in,
422 Dart_Handle class_name_in, 409 Dart_Handle class_name_in,
423 Dart_Handle function_name_in) { 410 Dart_Handle function_name_in) {
424 Isolate* isolate = Isolate::Current(); 411 DARTSCOPE(Thread::Current());
425 DARTSCOPE(isolate);
426 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); 412 UNWRAP_AND_CHECK_PARAM(Library, library, library_in);
427 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in); 413 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in);
428 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in); 414 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in);
429 415
430 // Ensure that the library is loaded. 416 // Ensure that the library is loaded.
431 if (!library.Loaded()) { 417 if (!library.Loaded()) {
432 return Api::NewError( 418 return Api::NewError(
433 "%s expects library argument 'library_in' to be loaded.", 419 "%s expects library argument 'library_in' to be loaded.",
434 CURRENT_FUNC); 420 CURRENT_FUNC);
435 } 421 }
436 422
437 // Resolve the breakpoint target function. 423 // Resolve the breakpoint target function.
438 Debugger* debugger = isolate->debugger(); 424 Debugger* debugger = I->debugger();
439 const Function& bp_target = Function::Handle( 425 const Function& bp_target = Function::Handle(
440 debugger->ResolveFunction(library, class_name, function_name)); 426 debugger->ResolveFunction(library, class_name, function_name));
441 if (bp_target.IsNull()) { 427 if (bp_target.IsNull()) {
442 const bool toplevel = class_name.Length() == 0; 428 const bool toplevel = class_name.Length() == 0;
443 return Api::NewError("%s: could not find function '%s%s%s'", 429 return Api::NewError("%s: could not find function '%s%s%s'",
444 CURRENT_FUNC, 430 CURRENT_FUNC,
445 toplevel ? "" : class_name.ToCString(), 431 toplevel ? "" : class_name.ToCString(),
446 toplevel ? "" : ".", 432 toplevel ? "" : ".",
447 function_name.ToCString()); 433 function_name.ToCString());
448 } 434 }
449 435
450 const Error& error = 436 const Error& error = Error::Handle(Z,
451 Error::Handle(isolate, debugger->OneTimeBreakAtEntry(bp_target)); 437 debugger->OneTimeBreakAtEntry(bp_target));
452 if (!error.IsNull()) { 438 if (!error.IsNull()) {
453 return Api::NewHandle(isolate, error.raw()); 439 return Api::NewHandle(I, error.raw());
454 } 440 }
455 return Api::Success(); 441 return Api::Success();
456 } 442 }
457 443
458 444
459 DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) { 445 DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) {
460 Isolate* isolate = Isolate::Current(); 446 DARTSCOPE(Thread::Current());
461 DARTSCOPE(isolate); 447 I->debugger()->RemoveBreakpoint(bp_id);
462 isolate->debugger()->RemoveBreakpoint(bp_id);
463 return Api::Success(); 448 return Api::Success();
464 } 449 }
465 450
466 451
467 DART_EXPORT Dart_Handle Dart_SetStepOver() { 452 DART_EXPORT Dart_Handle Dart_SetStepOver() {
468 Isolate* isolate = Isolate::Current(); 453 DARTSCOPE(Thread::Current());
469 DARTSCOPE(isolate); 454 I->debugger()->SetStepOver();
470 isolate->debugger()->SetStepOver();
471 return Api::Success(); 455 return Api::Success();
472 } 456 }
473 457
474 458
475 DART_EXPORT Dart_Handle Dart_SetStepInto() { 459 DART_EXPORT Dart_Handle Dart_SetStepInto() {
476 Isolate* isolate = Isolate::Current(); 460 DARTSCOPE(Thread::Current());
477 DARTSCOPE(isolate); 461 I->debugger()->SetSingleStep();
478 isolate->debugger()->SetSingleStep();
479 return Api::Success(); 462 return Api::Success();
480 } 463 }
481 464
482 465
483 DART_EXPORT Dart_Handle Dart_SetStepOut() { 466 DART_EXPORT Dart_Handle Dart_SetStepOut() {
484 Isolate* isolate = Isolate::Current(); 467 DARTSCOPE(Thread::Current());
485 DARTSCOPE(isolate); 468 I->debugger()->SetStepOut();
486 isolate->debugger()->SetStepOut();
487 return Api::Success(); 469 return Api::Success();
488 } 470 }
489 471
490 472
491 DART_EXPORT Dart_Handle Dart_GetInstanceFields(Dart_Handle object_in) { 473 DART_EXPORT Dart_Handle Dart_GetInstanceFields(Dart_Handle object_in) {
492 Isolate* isolate = Isolate::Current(); 474 DARTSCOPE(Thread::Current());
493 DARTSCOPE(isolate);
494 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); 475 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in);
495 return Api::NewHandle(isolate, isolate->debugger()->GetInstanceFields(obj)); 476 return Api::NewHandle(I, I->debugger()->GetInstanceFields(obj));
496 } 477 }
497 478
498 479
499 DART_EXPORT Dart_Handle Dart_GetStaticFields(Dart_Handle target) { 480 DART_EXPORT Dart_Handle Dart_GetStaticFields(Dart_Handle target) {
500 Isolate* isolate = Isolate::Current(); 481 DARTSCOPE(Thread::Current());
501 DARTSCOPE(isolate); 482 const Type& type_obj = Api::UnwrapTypeHandle(I, target);
502 const Type& type_obj = Api::UnwrapTypeHandle(isolate, target);
503 if (type_obj.IsNull()) { 483 if (type_obj.IsNull()) {
504 return Api::NewError("%s expects argument 'target' to be a type", 484 return Api::NewError("%s expects argument 'target' to be a type",
505 CURRENT_FUNC); 485 CURRENT_FUNC);
506 } 486 }
507 const Class& cls = Class::Handle(isolate, type_obj.type_class()); 487 const Class& cls = Class::Handle(Z, type_obj.type_class());
508 return Api::NewHandle(isolate, isolate->debugger()->GetStaticFields(cls)); 488 return Api::NewHandle(I, I->debugger()->GetStaticFields(cls));
509 } 489 }
510 490
511 491
512 DART_EXPORT Dart_Handle Dart_GetLibraryFields(intptr_t library_id) { 492 DART_EXPORT Dart_Handle Dart_GetLibraryFields(intptr_t library_id) {
513 Isolate* isolate = Isolate::Current(); 493 DARTSCOPE(Thread::Current());
514 DARTSCOPE(isolate);
515 const Library& lib = 494 const Library& lib =
516 Library::Handle(isolate, Library::GetLibrary(library_id)); 495 Library::Handle(Z, Library::GetLibrary(library_id));
517 if (lib.IsNull()) { 496 if (lib.IsNull()) {
518 return Api::NewError("%s: %" Pd " is not a valid library id", 497 return Api::NewError("%s: %" Pd " is not a valid library id",
519 CURRENT_FUNC, library_id); 498 CURRENT_FUNC, library_id);
520 } 499 }
521 return Api::NewHandle(isolate, isolate->debugger()->GetLibraryFields(lib)); 500 return Api::NewHandle(I, I->debugger()->GetLibraryFields(lib));
522 } 501 }
523 502
524 503
525 DART_EXPORT Dart_Handle Dart_GetGlobalVariables(intptr_t library_id) { 504 DART_EXPORT Dart_Handle Dart_GetGlobalVariables(intptr_t library_id) {
526 Isolate* isolate = Isolate::Current(); 505 DARTSCOPE(Thread::Current());
527 ASSERT(isolate != NULL); 506
528 DARTSCOPE(isolate); 507 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id));
529 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
530 if (lib.IsNull()) { 508 if (lib.IsNull()) {
531 return Api::NewError("%s: %" Pd " is not a valid library id", 509 return Api::NewError("%s: %" Pd " is not a valid library id",
532 CURRENT_FUNC, library_id); 510 CURRENT_FUNC, library_id);
533 } 511 }
534 return Api::NewHandle(isolate, isolate->debugger()->GetGlobalFields(lib)); 512 return Api::NewHandle(I, I->debugger()->GetGlobalFields(lib));
535 } 513 }
536 514
537 515
538 DART_EXPORT Dart_Handle Dart_ActivationFrameEvaluate( 516 DART_EXPORT Dart_Handle Dart_ActivationFrameEvaluate(
539 Dart_ActivationFrame activation_frame, 517 Dart_ActivationFrame activation_frame,
540 Dart_Handle expr_in) { 518 Dart_Handle expr_in) {
541 Isolate* isolate = Isolate::Current(); 519 DARTSCOPE(Thread::Current());
542 DARTSCOPE(isolate);
543 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); 520 CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
544 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in); 521 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in);
545 return Api::NewHandle(isolate, frame->Evaluate(expr)); 522 return Api::NewHandle(I, frame->Evaluate(expr));
546 } 523 }
547 524
548 525
549 DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in, 526 DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in,
550 Dart_Handle expr_in) { 527 Dart_Handle expr_in) {
551 Isolate* isolate = Isolate::Current(); 528 DARTSCOPE(Thread::Current());
552 DARTSCOPE(isolate);
553 529
554 const Object& target = Object::Handle(isolate, Api::UnwrapHandle(target_in)); 530 const Object& target = Object::Handle(Z, Api::UnwrapHandle(target_in));
555 if (target.IsError()) return target_in; 531 if (target.IsError()) return target_in;
556 if (target.IsNull()) { 532 if (target.IsNull()) {
557 return Api::NewError("%s expects argument 'target' to be non-null", 533 return Api::NewError("%s expects argument 'target' to be non-null",
558 CURRENT_FUNC); 534 CURRENT_FUNC);
559 } 535 }
560 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in); 536 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in);
561 // Type extends Instance, must check first. 537 // Type extends Instance, must check first.
562 if (target.IsType()) { 538 if (target.IsType()) {
563 const Class& cls = Class::Handle(isolate, Type::Cast(target).type_class()); 539 const Class& cls = Class::Handle(Z, Type::Cast(target).type_class());
564 return Api::NewHandle(isolate, cls.Evaluate(expr, 540 return Api::NewHandle(I, cls.Evaluate(expr,
565 Array::empty_array(), 541 Array::empty_array(),
566 Array::empty_array())); 542 Array::empty_array()));
567 } else if (target.IsInstance()) { 543 } else if (target.IsInstance()) {
568 const Instance& inst = Instance::Cast(target); 544 const Instance& inst = Instance::Cast(target);
569 return Api::NewHandle(isolate, inst.Evaluate(expr, 545 return Api::NewHandle(I, inst.Evaluate(expr,
570 Array::empty_array(), 546 Array::empty_array(),
571 Array::empty_array())); 547 Array::empty_array()));
572 } else if (target.IsLibrary()) { 548 } else if (target.IsLibrary()) {
573 const Library& lib = Library::Cast(target); 549 const Library& lib = Library::Cast(target);
574 return Api::NewHandle(isolate, lib.Evaluate(expr, 550 return Api::NewHandle(I, lib.Evaluate(expr,
575 Array::empty_array(), 551 Array::empty_array(),
576 Array::empty_array())); 552 Array::empty_array()));
577 } else if (target.IsClass()) { 553 } else if (target.IsClass()) {
578 const Class& cls = Class::Cast(target); 554 const Class& cls = Class::Cast(target);
579 return Api::NewHandle(isolate, cls.Evaluate(expr, 555 return Api::NewHandle(I, cls.Evaluate(expr,
580 Array::empty_array(), 556 Array::empty_array(),
581 Array::empty_array())); 557 Array::empty_array()));
582 } 558 }
583 return Api::NewError("%s: unsupported target type", CURRENT_FUNC); 559 return Api::NewError("%s: unsupported target type", CURRENT_FUNC);
584 } 560 }
585 561
586 562
587 DART_EXPORT Dart_Handle Dart_GetObjClass(Dart_Handle object_in) { 563 DART_EXPORT Dart_Handle Dart_GetObjClass(Dart_Handle object_in) {
588 Isolate* isolate = Isolate::Current(); 564 DARTSCOPE(Thread::Current());
589 DARTSCOPE(isolate);
590 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); 565 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in);
591 return Api::NewHandle(isolate, obj.GetType()); 566 return Api::NewHandle(I, obj.GetType());
592 } 567 }
593 568
594 569
595 DART_EXPORT Dart_Handle Dart_GetObjClassId(Dart_Handle object_in, 570 DART_EXPORT Dart_Handle Dart_GetObjClassId(Dart_Handle object_in,
596 intptr_t* class_id) { 571 intptr_t* class_id) {
597 Isolate* isolate = Isolate::Current(); 572 DARTSCOPE(Thread::Current());
598 DARTSCOPE(isolate);
599 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); 573 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in);
600 CHECK_NOT_NULL(class_id); 574 CHECK_NOT_NULL(class_id);
601 *class_id = obj.GetClassId(); 575 *class_id = obj.GetClassId();
602 return Api::Success(); 576 return Api::Success();
603 } 577 }
604 578
605 579
606 DART_EXPORT Dart_Handle Dart_GetClassFromId(intptr_t class_id) { 580 DART_EXPORT Dart_Handle Dart_GetClassFromId(intptr_t class_id) {
607 Isolate* isolate = Isolate::Current(); 581 DARTSCOPE(Thread::Current());
608 DARTSCOPE(isolate); 582 if (!I->class_table()->IsValidIndex(class_id)) {
609 if (!isolate->class_table()->IsValidIndex(class_id)) {
610 return Api::NewError("%s: %" Pd " is not a valid class id", 583 return Api::NewError("%s: %" Pd " is not a valid class id",
611 CURRENT_FUNC, class_id); 584 CURRENT_FUNC, class_id);
612 } 585 }
613 return Api::NewHandle(isolate, isolate->class_table()->At(class_id)); 586 return Api::NewHandle(I, I->class_table()->At(class_id));
614 } 587 }
615 588
616 589
617 DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) { 590 DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) {
618 Isolate* isolate = Isolate::Current(); 591 DARTSCOPE(Thread::Current());
619 DARTSCOPE(isolate);
620 592
621 UNWRAP_AND_CHECK_PARAM(Type, type, type_in); 593 UNWRAP_AND_CHECK_PARAM(Type, type, type_in);
622 if (!type.IsFinalized()) { 594 if (!type.IsFinalized()) {
623 return Api::NewError("%s: type in 'type_in' is not a finalized type", 595 return Api::NewError("%s: type in 'type_in' is not a finalized type",
624 CURRENT_FUNC); 596 CURRENT_FUNC);
625 } 597 }
626 if (!type.IsInstantiated()) { 598 if (!type.IsInstantiated()) {
627 return Api::NewError("%s: type in 'type_in' is not an instantiated type", 599 return Api::NewError("%s: type in 'type_in' is not an instantiated type",
628 CURRENT_FUNC); 600 CURRENT_FUNC);
629 } 601 }
630 const Class& cls = Class::Handle(type.type_class()); 602 const Class& cls = Class::Handle(type.type_class());
631 if (cls.NumTypeParameters() == 0) { 603 if (cls.NumTypeParameters() == 0) {
632 // The super type has no type parameters or it is already instantiated 604 // The super type has no type parameters or it is already instantiated
633 // just return it. 605 // just return it.
634 const AbstractType& type = AbstractType::Handle(cls.super_type()); 606 const AbstractType& type = AbstractType::Handle(cls.super_type());
635 if (type.IsNull()) { 607 if (type.IsNull()) {
636 return Dart_Null(); 608 return Dart_Null();
637 } 609 }
638 return Api::NewHandle(isolate, type.Canonicalize()); 610 return Api::NewHandle(I, type.Canonicalize());
639 } 611 }
640 // Set up the type arguments array for the super class type. 612 // Set up the type arguments array for the super class type.
641 const Class& super_cls = Class::Handle(cls.SuperClass()); 613 const Class& super_cls = Class::Handle(cls.SuperClass());
642 intptr_t num_expected_type_arguments = super_cls.NumTypeArguments(); 614 intptr_t num_expected_type_arguments = super_cls.NumTypeArguments();
643 TypeArguments& super_type_args_array = TypeArguments::Handle(); 615 TypeArguments& super_type_args_array = TypeArguments::Handle();
644 const TypeArguments& type_args_array = 616 const TypeArguments& type_args_array =
645 TypeArguments::Handle(type.arguments()); 617 TypeArguments::Handle(type.arguments());
646 if (!type_args_array.IsNull() && (num_expected_type_arguments > 0)) { 618 if (!type_args_array.IsNull() && (num_expected_type_arguments > 0)) {
647 super_type_args_array = TypeArguments::New(num_expected_type_arguments); 619 super_type_args_array = TypeArguments::New(num_expected_type_arguments);
648 AbstractType& type_arg = AbstractType::Handle(); 620 AbstractType& type_arg = AbstractType::Handle();
649 for (intptr_t i = 0; i < num_expected_type_arguments; i++) { 621 for (intptr_t i = 0; i < num_expected_type_arguments; i++) {
650 type_arg ^= type_args_array.TypeAt(i); 622 type_arg ^= type_args_array.TypeAt(i);
651 super_type_args_array.SetTypeAt(i, type_arg); 623 super_type_args_array.SetTypeAt(i, type_arg);
652 } 624 }
653 } 625 }
654 626
655 // Construct the super type object, canonicalize it and return. 627 // Construct the super type object, canonicalize it and return.
656 Type& instantiated_type = Type::Handle( 628 Type& instantiated_type = Type::Handle(
657 Type::New(super_cls, super_type_args_array, Scanner::kNoSourcePos)); 629 Type::New(super_cls, super_type_args_array, Scanner::kNoSourcePos));
658 ASSERT(!instantiated_type.IsNull()); 630 ASSERT(!instantiated_type.IsNull());
659 instantiated_type.SetIsFinalized(); 631 instantiated_type.SetIsFinalized();
660 return Api::NewHandle(isolate, instantiated_type.Canonicalize()); 632 return Api::NewHandle(I, instantiated_type.Canonicalize());
661 } 633 }
662 634
663 635
664 DART_EXPORT Dart_Handle Dart_GetClosureInfo( 636 DART_EXPORT Dart_Handle Dart_GetClosureInfo(
665 Dart_Handle closure, 637 Dart_Handle closure,
666 Dart_Handle* name, 638 Dart_Handle* name,
667 Dart_Handle* signature, 639 Dart_Handle* signature,
668 Dart_CodeLocation* location) { 640 Dart_CodeLocation* location) {
669 Isolate* isolate = Isolate::Current(); 641 DARTSCOPE(Thread::Current());
670 DARTSCOPE(isolate);
671 UNWRAP_AND_CHECK_PARAM(Instance, instance, closure); 642 UNWRAP_AND_CHECK_PARAM(Instance, instance, closure);
672 CHECK_NOT_NULL(location); 643 CHECK_NOT_NULL(location);
673 644
674 if (!instance.IsClosure()) { 645 if (!instance.IsClosure()) {
675 return Api::NewError("%s: parameter 0 is not a closure", CURRENT_FUNC); 646 return Api::NewError("%s: parameter 0 is not a closure", CURRENT_FUNC);
676 } 647 }
677 const Function& func = Function::Handle(Closure::function(instance)); 648 const Function& func = Function::Handle(Closure::function(instance));
678 ASSERT(!func.IsNull()); 649 ASSERT(!func.IsNull());
679 if (name != NULL) { 650 if (name != NULL) {
680 *name = Api::NewHandle(isolate, func.QualifiedUserVisibleName()); 651 *name = Api::NewHandle(I, func.QualifiedUserVisibleName());
681 } 652 }
682 if (signature != NULL) { 653 if (signature != NULL) {
683 *signature = Api::NewHandle(isolate, func.UserVisibleSignature()); 654 *signature = Api::NewHandle(I, func.UserVisibleSignature());
684 } 655 }
685 656
686 if (location != NULL) { 657 if (location != NULL) {
687 if (func.token_pos() >= 0) { 658 if (func.token_pos() >= 0) {
688 const Class& cls = Class::Handle(func.origin()); 659 const Class& cls = Class::Handle(Z, func.origin());
689 ASSERT(!cls.IsNull()); 660 ASSERT(!cls.IsNull());
690 const Library& lib = Library::Handle(isolate, cls.library()); 661 const Library& lib = Library::Handle(Z, cls.library());
691 ASSERT(!lib.IsNull()); 662 ASSERT(!lib.IsNull());
692 // Note func.script() is not the same as cls.script() for eval functions. 663 // Note func.script() is not the same as cls.script() for eval functions.
693 const Script& script = Script::Handle(func.script()); 664 const Script& script = Script::Handle(Z, func.script());
694 ASSERT(!script.IsNull()); 665 ASSERT(!script.IsNull());
695 location->script_url = Api::NewHandle(isolate, script.url()); 666 location->script_url = Api::NewHandle(I, script.url());
696 location->library_id = lib.index(); 667 location->library_id = lib.index();
697 location->token_pos = func.token_pos(); 668 location->token_pos = func.token_pos();
698 } else { 669 } else {
699 location->script_url = Api::NewHandle(isolate, String::null()); 670 location->script_url = Api::NewHandle(I, String::null());
700 location->library_id = -1; 671 location->library_id = -1;
701 location->token_pos = -1; 672 location->token_pos = -1;
702 } 673 }
703 } 674 }
704 return Api::True(); 675 return Api::True();
705 } 676 }
706 677
707 678
708 DART_EXPORT Dart_Handle Dart_GetClassInfo( 679 DART_EXPORT Dart_Handle Dart_GetClassInfo(
709 intptr_t cls_id, 680 intptr_t cls_id,
710 Dart_Handle* class_name, 681 Dart_Handle* class_name,
711 intptr_t* library_id, 682 intptr_t* library_id,
712 intptr_t* super_class_id, 683 intptr_t* super_class_id,
713 Dart_Handle* static_fields) { 684 Dart_Handle* static_fields) {
714 Isolate* isolate = Isolate::Current(); 685 DARTSCOPE(Thread::Current());
715 DARTSCOPE(isolate); 686 if (!I->class_table()->IsValidIndex(cls_id)) {
716 if (!isolate->class_table()->IsValidIndex(cls_id)) {
717 return Api::NewError("%s: %" Pd " is not a valid class id", 687 return Api::NewError("%s: %" Pd " is not a valid class id",
718 CURRENT_FUNC, cls_id); 688 CURRENT_FUNC, cls_id);
719 } 689 }
720 Class& cls = Class::Handle(isolate, isolate->class_table()->At(cls_id)); 690 Class& cls = Class::Handle(Z, I->class_table()->At(cls_id));
721 if (class_name != NULL) { 691 if (class_name != NULL) {
722 *class_name = Api::NewHandle(isolate, cls.Name()); 692 *class_name = Api::NewHandle(I, cls.Name());
723 } 693 }
724 if (library_id != NULL) { 694 if (library_id != NULL) {
725 const Library& lib = Library::Handle(isolate, cls.library()); 695 const Library& lib = Library::Handle(Z, cls.library());
726 *library_id = lib.index(); 696 *library_id = lib.index();
727 } 697 }
728 if (super_class_id != NULL) { 698 if (super_class_id != NULL) {
729 *super_class_id = 0; 699 *super_class_id = 0;
730 Class& super_cls = Class::Handle(isolate, cls.SuperClass()); 700 Class& super_cls = Class::Handle(Z, cls.SuperClass());
731 if (!super_cls.IsNull()) { 701 if (!super_cls.IsNull()) {
732 *super_class_id = super_cls.id(); 702 *super_class_id = super_cls.id();
733 } 703 }
734 } 704 }
735 if (static_fields != NULL) { 705 if (static_fields != NULL) {
736 *static_fields = 706 *static_fields =
737 Api::NewHandle(isolate, isolate->debugger()->GetStaticFields(cls)); 707 Api::NewHandle(I, I->debugger()->GetStaticFields(cls));
738 } 708 }
739 return Api::Success(); 709 return Api::Success();
740 } 710 }
741 711
742 712
743 DART_EXPORT Dart_Handle Dart_ScriptGetSource( 713 DART_EXPORT Dart_Handle Dart_ScriptGetSource(
744 intptr_t library_id, 714 intptr_t library_id,
745 Dart_Handle script_url_in) { 715 Dart_Handle script_url_in) {
746 Isolate* isolate = Isolate::Current(); 716 DARTSCOPE(Thread::Current());
747 DARTSCOPE(isolate);
748 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); 717 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
749 if (lib.IsNull()) { 718 if (lib.IsNull()) {
750 return Api::NewError("%s: %" Pd " is not a valid library id", 719 return Api::NewError("%s: %" Pd " is not a valid library id",
751 CURRENT_FUNC, library_id); 720 CURRENT_FUNC, library_id);
752 } 721 }
753 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); 722 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
754 const Script& script = Script::Handle(lib.LookupScript(script_url)); 723 const Script& script = Script::Handle(lib.LookupScript(script_url));
755 if (script.IsNull()) { 724 if (script.IsNull()) {
756 return Api::NewError("%s: script '%s' not found in library '%s'", 725 return Api::NewError("%s: script '%s' not found in library '%s'",
757 CURRENT_FUNC, script_url.ToCString(), 726 CURRENT_FUNC, script_url.ToCString(),
758 String::Handle(lib.url()).ToCString()); 727 String::Handle(lib.url()).ToCString());
759 } 728 }
760 return Api::NewHandle(isolate, script.Source()); 729 return Api::NewHandle(I, script.Source());
761 } 730 }
762 731
763 732
764 DART_EXPORT Dart_Handle Dart_ScriptGetTokenInfo( 733 DART_EXPORT Dart_Handle Dart_ScriptGetTokenInfo(
765 intptr_t library_id, 734 intptr_t library_id,
766 Dart_Handle script_url_in) { 735 Dart_Handle script_url_in) {
767 Isolate* isolate = Isolate::Current(); 736 DARTSCOPE(Thread::Current());
768 DARTSCOPE(isolate);
769 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); 737 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
770 if (lib.IsNull()) { 738 if (lib.IsNull()) {
771 return Api::NewError("%s: %" Pd " is not a valid library id", 739 return Api::NewError("%s: %" Pd " is not a valid library id",
772 CURRENT_FUNC, library_id); 740 CURRENT_FUNC, library_id);
773 } 741 }
774 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); 742 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
775 const Script& script = Script::Handle(lib.LookupScript(script_url)); 743 const Script& script = Script::Handle(lib.LookupScript(script_url));
776 if (script.IsNull()) { 744 if (script.IsNull()) {
777 return Api::NewError("%s: script '%s' not found in library '%s'", 745 return Api::NewError("%s: script '%s' not found in library '%s'",
778 CURRENT_FUNC, script_url.ToCString(), 746 CURRENT_FUNC, script_url.ToCString(),
779 String::Handle(lib.url()).ToCString()); 747 String::Handle(lib.url()).ToCString());
780 } 748 }
781 749
782 const GrowableObjectArray& info = 750 const GrowableObjectArray& info =
783 GrowableObjectArray::Handle(script.GenerateLineNumberArray()); 751 GrowableObjectArray::Handle(script.GenerateLineNumberArray());
784 return Api::NewHandle(isolate, Array::MakeArray(info)); 752 return Api::NewHandle(I, Array::MakeArray(info));
785 } 753 }
786 754
787 755
788 DART_EXPORT Dart_Handle Dart_GenerateScriptSource(Dart_Handle library_url_in, 756 DART_EXPORT Dart_Handle Dart_GenerateScriptSource(Dart_Handle library_url_in,
789 Dart_Handle script_url_in) { 757 Dart_Handle script_url_in) {
790 Isolate* isolate = Isolate::Current(); 758 DARTSCOPE(Thread::Current());
791 DARTSCOPE(isolate);
792 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in); 759 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in);
793 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); 760 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
794 761
795 const Library& library = Library::Handle(Library::LookupLibrary(library_url)); 762 const Library& library = Library::Handle(Library::LookupLibrary(library_url));
796 if (library.IsNull()) { 763 if (library.IsNull()) {
797 return Api::NewError("%s: library '%s' not found", 764 return Api::NewError("%s: library '%s' not found",
798 CURRENT_FUNC, library_url.ToCString()); 765 CURRENT_FUNC, library_url.ToCString());
799 } 766 }
800 767
801 const Script& script = Script::Handle(library.LookupScript(script_url)); 768 const Script& script = Script::Handle(library.LookupScript(script_url));
802 if (script.IsNull()) { 769 if (script.IsNull()) {
803 return Api::NewError("%s: script '%s' not found in library '%s'", 770 return Api::NewError("%s: script '%s' not found in library '%s'",
804 CURRENT_FUNC, script_url.ToCString(), 771 CURRENT_FUNC, script_url.ToCString(),
805 library_url.ToCString()); 772 library_url.ToCString());
806 } 773 }
807 774
808 return Api::NewHandle(isolate, script.GenerateSource()); 775 return Api::NewHandle(I, script.GenerateSource());
809 } 776 }
810 777
811 778
812 DART_EXPORT Dart_Handle Dart_GetScriptURLs(Dart_Handle library_url_in) { 779 DART_EXPORT Dart_Handle Dart_GetScriptURLs(Dart_Handle library_url_in) {
813 Isolate* isolate = Isolate::Current(); 780 DARTSCOPE(Thread::Current());
814 DARTSCOPE(isolate);
815 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in); 781 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in);
816 782
817 const Library& library = Library::Handle(Library::LookupLibrary(library_url)); 783 const Library& library = Library::Handle(Library::LookupLibrary(library_url));
818 if (library.IsNull()) { 784 if (library.IsNull()) {
819 return Api::NewError("%s: library '%s' not found", 785 return Api::NewError("%s: library '%s' not found",
820 CURRENT_FUNC, library_url.ToCString()); 786 CURRENT_FUNC, library_url.ToCString());
821 } 787 }
822 const Array& loaded_scripts = Array::Handle(library.LoadedScripts()); 788 const Array& loaded_scripts = Array::Handle(library.LoadedScripts());
823 ASSERT(!loaded_scripts.IsNull()); 789 ASSERT(!loaded_scripts.IsNull());
824 intptr_t num_scripts = loaded_scripts.Length(); 790 intptr_t num_scripts = loaded_scripts.Length();
825 const Array& script_list = Array::Handle(Array::New(num_scripts)); 791 const Array& script_list = Array::Handle(Array::New(num_scripts));
826 Script& script = Script::Handle(); 792 Script& script = Script::Handle();
827 String& url = String::Handle(); 793 String& url = String::Handle();
828 for (int i = 0; i < num_scripts; i++) { 794 for (int i = 0; i < num_scripts; i++) {
829 script ^= loaded_scripts.At(i); 795 script ^= loaded_scripts.At(i);
830 url = script.url(); 796 url = script.url();
831 script_list.SetAt(i, url); 797 script_list.SetAt(i, url);
832 } 798 }
833 return Api::NewHandle(isolate, script_list.raw()); 799 return Api::NewHandle(I, script_list.raw());
834 } 800 }
835 801
836 802
837 DART_EXPORT Dart_Handle Dart_GetLibraryIds() { 803 DART_EXPORT Dart_Handle Dart_GetLibraryIds() {
838 Isolate* isolate = Isolate::Current(); 804 DARTSCOPE(Thread::Current());
839 ASSERT(isolate != NULL);
840 DARTSCOPE(isolate);
841 805
842 const GrowableObjectArray& libs = 806 const GrowableObjectArray& libs =
843 GrowableObjectArray::Handle(isolate->object_store()->libraries()); 807 GrowableObjectArray::Handle(Z, I->object_store()->libraries());
844 int num_libs = libs.Length(); 808 int num_libs = libs.Length();
845 809
846 // Create new list and populate with the url of loaded libraries. 810 // Create new list and populate with the url of loaded libraries.
847 Library &lib = Library::Handle(); 811 Library &lib = Library::Handle();
848 const Array& library_id_list = Array::Handle(Array::New(num_libs)); 812 const Array& library_id_list = Array::Handle(Z, Array::New(num_libs));
849 for (int i = 0; i < num_libs; i++) { 813 for (int i = 0; i < num_libs; i++) {
850 lib ^= libs.At(i); 814 lib ^= libs.At(i);
851 ASSERT(!lib.IsNull()); 815 ASSERT(!lib.IsNull());
852 ASSERT(Smi::IsValid(lib.index())); 816 ASSERT(Smi::IsValid(lib.index()));
853 library_id_list.SetAt(i, Smi::Handle(Smi::New(lib.index()))); 817 library_id_list.SetAt(i, Smi::Handle(Smi::New(lib.index())));
854 } 818 }
855 return Api::NewHandle(isolate, library_id_list.raw()); 819 return Api::NewHandle(I, library_id_list.raw());
856 } 820 }
857 821
858 822
859 DART_EXPORT Dart_Handle Dart_GetLibraryFromId(intptr_t library_id) { 823 DART_EXPORT Dart_Handle Dart_GetLibraryFromId(intptr_t library_id) {
860 Isolate* isolate = Isolate::Current(); 824 DARTSCOPE(Thread::Current());
861 ASSERT(isolate != NULL); 825 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id));
862 DARTSCOPE(isolate);
863 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
864 if (lib.IsNull()) { 826 if (lib.IsNull()) {
865 return Api::NewError("%s: %" Pd " is not a valid library id", 827 return Api::NewError("%s: %" Pd " is not a valid library id",
866 CURRENT_FUNC, library_id); 828 CURRENT_FUNC, library_id);
867 } 829 }
868 return Api::NewHandle(isolate, lib.raw()); 830 return Api::NewHandle(I, lib.raw());
869 } 831 }
870 832
871 833
872 DART_EXPORT Dart_Handle Dart_LibraryId(Dart_Handle library, 834 DART_EXPORT Dart_Handle Dart_LibraryId(Dart_Handle library,
873 intptr_t* library_id) { 835 intptr_t* library_id) {
874 Isolate* isolate = Isolate::Current(); 836 DARTSCOPE(Thread::Current());
875 DARTSCOPE(isolate); 837 const Library& lib = Api::UnwrapLibraryHandle(I, library);
876 const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
877 if (lib.IsNull()) { 838 if (lib.IsNull()) {
878 RETURN_TYPE_ERROR(isolate, library, Library); 839 RETURN_TYPE_ERROR(I, library, Library);
879 } 840 }
880 if (library_id == NULL) { 841 if (library_id == NULL) {
881 RETURN_NULL_ERROR(library_id); 842 RETURN_NULL_ERROR(library_id);
882 } 843 }
883 *library_id = lib.index(); 844 *library_id = lib.index();
884 return Api::Success(); 845 return Api::Success();
885 } 846 }
886 847
887 848
888 DART_EXPORT Dart_Handle Dart_GetLibraryImports(intptr_t library_id) { 849 DART_EXPORT Dart_Handle Dart_GetLibraryImports(intptr_t library_id) {
889 Isolate* isolate = Isolate::Current(); 850 DARTSCOPE(Thread::Current());
890 ASSERT(isolate != NULL);
891 DARTSCOPE(isolate);
892 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); 851 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
893 if (lib.IsNull()) { 852 if (lib.IsNull()) {
894 return Api::NewError("%s: %" Pd " is not a valid library id", 853 return Api::NewError("%s: %" Pd " is not a valid library id",
895 CURRENT_FUNC, library_id); 854 CURRENT_FUNC, library_id);
896 } 855 }
897 const GrowableObjectArray& import_list = 856 const GrowableObjectArray& import_list =
898 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); 857 GrowableObjectArray::Handle(GrowableObjectArray::New(8));
899 858
900 String& prefix_name = String::Handle(isolate); 859 String& prefix_name = String::Handle(Z);
901 Library& imported = Library::Handle(isolate); 860 Library& imported = Library::Handle(Z);
902 intptr_t num_imports = lib.num_imports(); 861 intptr_t num_imports = lib.num_imports();
903 for (int i = 0; i < num_imports; i++) { 862 for (int i = 0; i < num_imports; i++) {
904 import_list.Add(prefix_name); // Null prefix name means no prefix. 863 import_list.Add(prefix_name); // Null prefix name means no prefix.
905 imported = lib.ImportLibraryAt(i); 864 imported = lib.ImportLibraryAt(i);
906 ASSERT(!imported.IsNull()); 865 ASSERT(!imported.IsNull());
907 ASSERT(Smi::IsValid(imported.index())); 866 ASSERT(Smi::IsValid(imported.index()));
908 import_list.Add(Smi::Handle(Smi::New(imported.index()))); 867 import_list.Add(Smi::Handle(Z, Smi::New(imported.index())));
909 } 868 }
910 LibraryPrefixIterator it(lib); 869 LibraryPrefixIterator it(lib);
911 LibraryPrefix& prefix = LibraryPrefix::Handle(isolate); 870 LibraryPrefix& prefix = LibraryPrefix::Handle(Z);
912 while (it.HasNext()) { 871 while (it.HasNext()) {
913 prefix = it.GetNext(); 872 prefix = it.GetNext();
914 prefix_name = prefix.name(); 873 prefix_name = prefix.name();
915 ASSERT(!prefix_name.IsNull()); 874 ASSERT(!prefix_name.IsNull());
916 prefix_name = String::Concat(prefix_name, Symbols::Dot()); 875 prefix_name = String::Concat(prefix_name, Symbols::Dot());
917 for (int32_t i = 0; i < prefix.num_imports(); i++) { 876 for (int32_t i = 0; i < prefix.num_imports(); i++) {
918 imported = prefix.GetLibrary(i); 877 imported = prefix.GetLibrary(i);
919 import_list.Add(prefix_name); 878 import_list.Add(prefix_name);
920 import_list.Add(Smi::Handle(Smi::New(imported.index()))); 879 import_list.Add(Smi::Handle(Smi::New(imported.index())));
921 } 880 }
922 } 881 }
923 return Api::NewHandle(isolate, Array::MakeArray(import_list)); 882 return Api::NewHandle(I, Array::MakeArray(import_list));
924 } 883 }
925 884
926 885
927 DART_EXPORT Dart_Handle Dart_GetLibraryURL(intptr_t library_id) { 886 DART_EXPORT Dart_Handle Dart_GetLibraryURL(intptr_t library_id) {
928 Isolate* isolate = Isolate::Current(); 887 DARTSCOPE(Thread::Current());
929 ASSERT(isolate != NULL); 888 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id));
930 DARTSCOPE(isolate);
931 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
932 if (lib.IsNull()) { 889 if (lib.IsNull()) {
933 return Api::NewError("%s: %" Pd " is not a valid library id", 890 return Api::NewError("%s: %" Pd " is not a valid library id",
934 CURRENT_FUNC, library_id); 891 CURRENT_FUNC, library_id);
935 } 892 }
936 return Api::NewHandle(isolate, lib.url()); 893 return Api::NewHandle(I, lib.url());
937 } 894 }
938 895
939 896
940 DART_EXPORT Dart_Handle Dart_GetLibraryDebuggable(intptr_t library_id, 897 DART_EXPORT Dart_Handle Dart_GetLibraryDebuggable(intptr_t library_id,
941 bool* is_debuggable) { 898 bool* is_debuggable) {
942 Isolate* isolate = Isolate::Current(); 899 DARTSCOPE(Thread::Current());
943 ASSERT(isolate != NULL);
944 DARTSCOPE(isolate);
945 CHECK_NOT_NULL(is_debuggable); 900 CHECK_NOT_NULL(is_debuggable);
946 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); 901 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
947 if (lib.IsNull()) { 902 if (lib.IsNull()) {
948 return Api::NewError("%s: %" Pd " is not a valid library id", 903 return Api::NewError("%s: %" Pd " is not a valid library id",
949 CURRENT_FUNC, library_id); 904 CURRENT_FUNC, library_id);
950 } 905 }
951 *is_debuggable = lib.IsDebuggable(); 906 *is_debuggable = lib.IsDebuggable();
952 return Api::Success(); 907 return Api::Success();
953 } 908 }
954 909
955 910
956 DART_EXPORT Dart_Handle Dart_SetLibraryDebuggable(intptr_t library_id, 911 DART_EXPORT Dart_Handle Dart_SetLibraryDebuggable(intptr_t library_id,
957 bool is_debuggable) { 912 bool is_debuggable) {
958 Isolate* isolate = Isolate::Current(); 913 DARTSCOPE(Thread::Current());
959 ASSERT(isolate != NULL); 914 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id));
960 DARTSCOPE(isolate);
961 const Library& lib = Library::Handle(Library::GetLibrary(library_id));
962 if (lib.IsNull()) { 915 if (lib.IsNull()) {
963 return Api::NewError("%s: %" Pd " is not a valid library id", 916 return Api::NewError("%s: %" Pd " is not a valid library id",
964 CURRENT_FUNC, library_id); 917 CURRENT_FUNC, library_id);
965 } 918 }
966 lib.set_debuggable(is_debuggable); 919 lib.set_debuggable(is_debuggable);
967 return Api::Success(); 920 return Api::Success();
968 } 921 }
969 922
970 923
971 DART_EXPORT Dart_Isolate Dart_GetIsolate(Dart_IsolateId isolate_id) { 924 DART_EXPORT Dart_Isolate Dart_GetIsolate(Dart_IsolateId isolate_id) {
972 Isolate* isolate = PortMap::GetIsolate(isolate_id); 925 Isolate* isolate = PortMap::GetIsolate(isolate_id);
973 return Api::CastIsolate(isolate); 926 return Api::CastIsolate(isolate);
974 } 927 }
975 928
976 929
977 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) { 930 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) {
978 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate); 931 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate);
979 return isolate->debugger()->GetIsolateId(); 932 return isolate->debugger()->GetIsolateId();
980 } 933 }
981 934
982 } // namespace dart 935 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/handles.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698