OLD | NEW |
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" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 | 49 |
50 #define CHECK_NOT_NULL(param) \ | 50 #define CHECK_NOT_NULL(param) \ |
51 if (param == NULL) { \ | 51 if (param == NULL) { \ |
52 return Api::NewError("%s expects argument '%s' to be non-null.", \ | 52 return Api::NewError("%s expects argument '%s' to be non-null.", \ |
53 CURRENT_FUNC, #param); \ | 53 CURRENT_FUNC, #param); \ |
54 } | 54 } |
55 | 55 |
56 | 56 |
57 DART_EXPORT intptr_t Dart_CacheObject(Dart_Handle object_in) { | 57 DART_EXPORT intptr_t Dart_CacheObject(Dart_Handle object_in) { |
58 DARTSCOPE(Thread::Current()); | 58 DARTSCOPE(Thread::Current()); |
| 59 Isolate* I = T->isolate(); |
59 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object_in)); | 60 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object_in)); |
60 if (obj.IsApiError()) { | 61 if (obj.IsApiError()) { |
61 return -1; | 62 return -1; |
62 } | 63 } |
63 return I->debugger()->CacheObject(obj); | 64 return I->debugger()->CacheObject(obj); |
64 } | 65 } |
65 | 66 |
66 | 67 |
67 DART_EXPORT Dart_Handle Dart_GetCachedObject(intptr_t obj_id) { | 68 DART_EXPORT Dart_Handle Dart_GetCachedObject(intptr_t obj_id) { |
68 DARTSCOPE(Thread::Current()); | 69 DARTSCOPE(Thread::Current()); |
| 70 Isolate* I = T->isolate(); |
69 if (!I->debugger()->IsValidObjectId(obj_id)) { | 71 if (!I->debugger()->IsValidObjectId(obj_id)) { |
70 return Api::NewError("%s: object id %" Pd " is invalid", | 72 return Api::NewError("%s: object id %" Pd " is invalid", |
71 CURRENT_FUNC, obj_id); | 73 CURRENT_FUNC, obj_id); |
72 } | 74 } |
73 return Api::NewHandle(I, I->debugger()->GetCachedObject(obj_id)); | 75 return Api::NewHandle(T, I->debugger()->GetCachedObject(obj_id)); |
74 } | 76 } |
75 | 77 |
76 | 78 |
77 DART_EXPORT Dart_Handle Dart_StackTraceLength( | 79 DART_EXPORT Dart_Handle Dart_StackTraceLength( |
78 Dart_StackTrace trace, | 80 Dart_StackTrace trace, |
79 intptr_t* length) { | 81 intptr_t* length) { |
80 DARTSCOPE(Thread::Current()); | 82 DARTSCOPE(Thread::Current()); |
81 CHECK_NOT_NULL(length); | 83 CHECK_NOT_NULL(length); |
82 CHECK_AND_CAST(DebuggerStackTrace, stack_trace, trace); | 84 CHECK_AND_CAST(DebuggerStackTrace, stack_trace, trace); |
83 *length = stack_trace->Length(); | 85 *length = stack_trace->Length(); |
(...skipping 26 matching lines...) Expand all Loading... |
110 static void DebuggerEventHandler(DebuggerEvent* event) { | 112 static void DebuggerEventHandler(DebuggerEvent* event) { |
111 Thread* thread = Thread::Current(); | 113 Thread* thread = Thread::Current(); |
112 Isolate* isolate = thread->isolate(); | 114 Isolate* isolate = thread->isolate(); |
113 ASSERT(isolate != NULL); | 115 ASSERT(isolate != NULL); |
114 Dart_EnterScope(); | 116 Dart_EnterScope(); |
115 Dart_IsolateId isolate_id = isolate->debugger()->GetIsolateId(); | 117 Dart_IsolateId isolate_id = isolate->debugger()->GetIsolateId(); |
116 if (event->type() == DebuggerEvent::kBreakpointReached) { | 118 if (event->type() == DebuggerEvent::kBreakpointReached) { |
117 if (paused_event_handler != NULL) { | 119 if (paused_event_handler != NULL) { |
118 Dart_CodeLocation location; | 120 Dart_CodeLocation location; |
119 ActivationFrame* top_frame = event->top_frame(); | 121 ActivationFrame* top_frame = event->top_frame(); |
120 location.script_url = Api::NewHandle(isolate, top_frame->SourceUrl()); | 122 location.script_url = Api::NewHandle(thread, top_frame->SourceUrl()); |
121 const Library& lib = Library::Handle(top_frame->Library()); | 123 const Library& lib = Library::Handle(top_frame->Library()); |
122 location.library_id = lib.index(); | 124 location.library_id = lib.index(); |
123 location.token_pos = top_frame->TokenPos(); | 125 location.token_pos = top_frame->TokenPos(); |
124 intptr_t bp_id = 0; | 126 intptr_t bp_id = 0; |
125 if (event->breakpoint() != NULL) { | 127 if (event->breakpoint() != NULL) { |
126 ASSERT(event->breakpoint()->id() != ILLEGAL_BREAKPOINT_ID); | 128 ASSERT(event->breakpoint()->id() != ILLEGAL_BREAKPOINT_ID); |
127 bp_id = event->breakpoint()->id(); | 129 bp_id = event->breakpoint()->id(); |
128 } | 130 } |
129 (*paused_event_handler)(isolate_id, bp_id, location); | 131 (*paused_event_handler)(isolate_id, bp_id, location); |
130 } | 132 } |
131 } else if (event->type() == DebuggerEvent::kBreakpointResolved) { | 133 } else if (event->type() == DebuggerEvent::kBreakpointResolved) { |
132 if (bp_resolved_handler != NULL) { | 134 if (bp_resolved_handler != NULL) { |
133 Breakpoint* bpt = event->breakpoint(); | 135 Breakpoint* bpt = event->breakpoint(); |
134 ASSERT(bpt != NULL); | 136 ASSERT(bpt != NULL); |
135 Dart_CodeLocation location; | 137 Dart_CodeLocation location; |
136 Zone* zone = thread->zone(); | 138 Zone* zone = thread->zone(); |
137 Library& library = Library::Handle(zone); | 139 Library& library = Library::Handle(zone); |
138 Script& script = Script::Handle(zone); | 140 Script& script = Script::Handle(zone); |
139 intptr_t token_pos; | 141 intptr_t token_pos; |
140 bpt->bpt_location()->GetCodeLocation(&library, &script, &token_pos); | 142 bpt->bpt_location()->GetCodeLocation(&library, &script, &token_pos); |
141 location.script_url = Api::NewHandle(isolate, script.url()); | 143 location.script_url = Api::NewHandle(thread, script.url()); |
142 location.library_id = library.index(); | 144 location.library_id = library.index(); |
143 location.token_pos = token_pos; | 145 location.token_pos = token_pos; |
144 (*bp_resolved_handler)(isolate_id, bpt->id(), location); | 146 (*bp_resolved_handler)(isolate_id, bpt->id(), location); |
145 } | 147 } |
146 } else if (event->type() == DebuggerEvent::kExceptionThrown) { | 148 } else if (event->type() == DebuggerEvent::kExceptionThrown) { |
147 if (exc_thrown_handler != NULL) { | 149 if (exc_thrown_handler != NULL) { |
148 Dart_Handle exception = | 150 Dart_Handle exception = |
149 Api::NewHandle(isolate, event->exception()->raw()); | 151 Api::NewHandle(thread, event->exception()->raw()); |
150 Dart_StackTrace trace = | 152 Dart_StackTrace trace = |
151 reinterpret_cast<Dart_StackTrace>(isolate->debugger()->StackTrace()); | 153 reinterpret_cast<Dart_StackTrace>(isolate->debugger()->StackTrace()); |
152 (*exc_thrown_handler)(isolate_id, exception, trace); | 154 (*exc_thrown_handler)(isolate_id, exception, trace); |
153 } | 155 } |
154 } else if (event->type() == DebuggerEvent::kIsolateCreated) { | 156 } else if (event->type() == DebuggerEvent::kIsolateCreated) { |
155 if (isolate_event_handler != NULL) { | 157 if (isolate_event_handler != NULL) { |
156 (*isolate_event_handler)(event->isolate_id(), kCreated); | 158 (*isolate_event_handler)(event->isolate_id(), kCreated); |
157 } | 159 } |
158 } else if (event->type() == DebuggerEvent::kIsolateInterrupted) { | 160 } else if (event->type() == DebuggerEvent::kIsolateInterrupted) { |
159 if (isolate_event_handler != NULL) { | 161 if (isolate_event_handler != NULL) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 | 194 |
193 DART_EXPORT void Dart_SetIsolateEventHandler(Dart_IsolateEventHandler handler) { | 195 DART_EXPORT void Dart_SetIsolateEventHandler(Dart_IsolateEventHandler handler) { |
194 isolate_event_handler = handler; | 196 isolate_event_handler = handler; |
195 Debugger::SetEventHandler(DebuggerEventHandler); | 197 Debugger::SetEventHandler(DebuggerEventHandler); |
196 } | 198 } |
197 | 199 |
198 | 200 |
199 DART_EXPORT Dart_Handle Dart_SetExceptionPauseInfo( | 201 DART_EXPORT Dart_Handle Dart_SetExceptionPauseInfo( |
200 Dart_ExceptionPauseInfo pause_info) { | 202 Dart_ExceptionPauseInfo pause_info) { |
201 DARTSCOPE(Thread::Current()); | 203 DARTSCOPE(Thread::Current()); |
| 204 Isolate* I = T->isolate(); |
202 I->debugger()->SetExceptionPauseInfo(pause_info); | 205 I->debugger()->SetExceptionPauseInfo(pause_info); |
203 return Api::Success(); | 206 return Api::Success(); |
204 } | 207 } |
205 | 208 |
206 | 209 |
207 DART_EXPORT Dart_ExceptionPauseInfo Dart_GetExceptionPauseInfo() { | 210 DART_EXPORT Dart_ExceptionPauseInfo Dart_GetExceptionPauseInfo() { |
208 DARTSCOPE(Thread::Current()); | 211 DARTSCOPE(Thread::Current()); |
| 212 Isolate* I = T->isolate(); |
209 return I->debugger()->GetExceptionPauseInfo(); | 213 return I->debugger()->GetExceptionPauseInfo(); |
210 } | 214 } |
211 | 215 |
212 | 216 |
213 DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) { | 217 DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) { |
214 DARTSCOPE(Thread::Current()); | 218 DARTSCOPE(Thread::Current()); |
| 219 Isolate* I = T->isolate(); |
215 CHECK_NOT_NULL(trace); | 220 CHECK_NOT_NULL(trace); |
216 *trace = reinterpret_cast<Dart_StackTrace>( | 221 *trace = reinterpret_cast<Dart_StackTrace>( |
217 I->debugger()->CurrentStackTrace()); | 222 I->debugger()->CurrentStackTrace()); |
218 return Api::Success(); | 223 return Api::Success(); |
219 } | 224 } |
220 | 225 |
221 | 226 |
222 DART_EXPORT Dart_Handle Dart_GetStackTraceFromError(Dart_Handle handle, | 227 DART_EXPORT Dart_Handle Dart_GetStackTraceFromError(Dart_Handle handle, |
223 Dart_StackTrace* trace) { | 228 Dart_StackTrace* trace) { |
224 DARTSCOPE(Thread::Current()); | 229 DARTSCOPE(Thread::Current()); |
225 CHECK_NOT_NULL(trace); | 230 CHECK_NOT_NULL(trace); |
226 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle)); | 231 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle)); |
227 if (obj.IsUnhandledException()) { | 232 if (obj.IsUnhandledException()) { |
228 const UnhandledException& error = UnhandledException::Cast(obj); | 233 const UnhandledException& error = UnhandledException::Cast(obj); |
229 Stacktrace& dart_stacktrace = Stacktrace::Handle(Z); | 234 Stacktrace& dart_stacktrace = Stacktrace::Handle(Z); |
230 dart_stacktrace ^= error.stacktrace(); | 235 dart_stacktrace ^= error.stacktrace(); |
231 if (dart_stacktrace.IsNull()) { | 236 if (dart_stacktrace.IsNull()) { |
232 *trace = NULL; | 237 *trace = NULL; |
233 } else { | 238 } else { |
| 239 Isolate* I = T->isolate(); |
234 *trace = reinterpret_cast<Dart_StackTrace>( | 240 *trace = reinterpret_cast<Dart_StackTrace>( |
235 I->debugger()->StackTraceFrom(dart_stacktrace)); | 241 I->debugger()->StackTraceFrom(dart_stacktrace)); |
236 } | 242 } |
237 return Api::Success(); | 243 return Api::Success(); |
238 } else { | 244 } else { |
239 return Api::NewError("Can only get stacktraces from error handles or " | 245 return Api::NewError("Can only get stacktraces from error handles or " |
240 "instances of Error."); | 246 "instances of Error."); |
241 } | 247 } |
242 } | 248 } |
243 | 249 |
244 | 250 |
245 DART_EXPORT Dart_Handle Dart_ActivationFrameInfo( | 251 DART_EXPORT Dart_Handle Dart_ActivationFrameInfo( |
246 Dart_ActivationFrame activation_frame, | 252 Dart_ActivationFrame activation_frame, |
247 Dart_Handle* function_name, | 253 Dart_Handle* function_name, |
248 Dart_Handle* script_url, | 254 Dart_Handle* script_url, |
249 intptr_t* line_number, | 255 intptr_t* line_number, |
250 intptr_t* column_number) { | 256 intptr_t* column_number) { |
251 DARTSCOPE(Thread::Current()); | 257 DARTSCOPE(Thread::Current()); |
252 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); | 258 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); |
253 if (function_name != NULL) { | 259 if (function_name != NULL) { |
254 *function_name = Api::NewHandle(I, frame->QualifiedFunctionName()); | 260 *function_name = Api::NewHandle(T, frame->QualifiedFunctionName()); |
255 } | 261 } |
256 if (script_url != NULL) { | 262 if (script_url != NULL) { |
257 *script_url = Api::NewHandle(I, frame->SourceUrl()); | 263 *script_url = Api::NewHandle(T, frame->SourceUrl()); |
258 } | 264 } |
259 if (line_number != NULL) { | 265 if (line_number != NULL) { |
260 *line_number = frame->LineNumber(); | 266 *line_number = frame->LineNumber(); |
261 } | 267 } |
262 if (column_number != NULL) { | 268 if (column_number != NULL) { |
263 *column_number = frame->ColumnNumber(); | 269 *column_number = frame->ColumnNumber(); |
264 } | 270 } |
265 return Api::Success(); | 271 return Api::Success(); |
266 } | 272 } |
267 | 273 |
268 | 274 |
269 DART_EXPORT Dart_Handle Dart_ActivationFrameGetLocation( | 275 DART_EXPORT Dart_Handle Dart_ActivationFrameGetLocation( |
270 Dart_ActivationFrame activation_frame, | 276 Dart_ActivationFrame activation_frame, |
271 Dart_Handle* function_name, | 277 Dart_Handle* function_name, |
272 Dart_Handle* function, | 278 Dart_Handle* function, |
273 Dart_CodeLocation* location) { | 279 Dart_CodeLocation* location) { |
274 // TODO(hausner): Implement a way to recognize when there | 280 // TODO(hausner): Implement a way to recognize when there |
275 // is no source code for the code in the frame. | 281 // is no source code for the code in the frame. |
276 DARTSCOPE(Thread::Current()); | 282 DARTSCOPE(Thread::Current()); |
277 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); | 283 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); |
278 if (function_name != NULL) { | 284 if (function_name != NULL) { |
279 *function_name = Api::NewHandle(I, frame->QualifiedFunctionName()); | 285 *function_name = Api::NewHandle(T, frame->QualifiedFunctionName()); |
280 } | 286 } |
281 if (function != NULL) { | 287 if (function != NULL) { |
282 *function = Api::NewHandle(I, frame->function().raw()); | 288 *function = Api::NewHandle(T, frame->function().raw()); |
283 } | 289 } |
284 | 290 |
285 if (location != NULL) { | 291 if (location != NULL) { |
286 location->script_url = Api::NewHandle(I, frame->SourceUrl()); | 292 location->script_url = Api::NewHandle(T, frame->SourceUrl()); |
287 const Library& lib = Library::Handle(Z, frame->Library()); | 293 const Library& lib = Library::Handle(Z, frame->Library()); |
288 location->library_id = lib.index(); | 294 location->library_id = lib.index(); |
289 location->token_pos = frame->TokenPos(); | 295 location->token_pos = frame->TokenPos(); |
290 } | 296 } |
291 return Api::Success(); | 297 return Api::Success(); |
292 } | 298 } |
293 | 299 |
294 DART_EXPORT Dart_Handle Dart_ActivationFrameGetFramePointer( | 300 DART_EXPORT Dart_Handle Dart_ActivationFrameGetFramePointer( |
295 Dart_ActivationFrame activation_frame, | 301 Dart_ActivationFrame activation_frame, |
296 uintptr_t* frame_pointer) { | 302 uintptr_t* frame_pointer) { |
(...skipping 16 matching lines...) Expand all Loading... |
313 return Dart_NewInteger(cls.id()); | 319 return Dart_NewInteger(cls.id()); |
314 } | 320 } |
315 return Api::Null(); | 321 return Api::Null(); |
316 } | 322 } |
317 | 323 |
318 | 324 |
319 DART_EXPORT Dart_Handle Dart_GetLocalVariables( | 325 DART_EXPORT Dart_Handle Dart_GetLocalVariables( |
320 Dart_ActivationFrame activation_frame) { | 326 Dart_ActivationFrame activation_frame) { |
321 DARTSCOPE(Thread::Current()); | 327 DARTSCOPE(Thread::Current()); |
322 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); | 328 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); |
323 return Api::NewHandle(I, frame->GetLocalVariables()); | 329 return Api::NewHandle(T, frame->GetLocalVariables()); |
324 } | 330 } |
325 | 331 |
326 | 332 |
327 DART_EXPORT Dart_Handle Dart_SetBreakpoint( | 333 DART_EXPORT Dart_Handle Dart_SetBreakpoint( |
328 Dart_Handle script_url_in, | 334 Dart_Handle script_url_in, |
329 intptr_t line_number) { | 335 intptr_t line_number) { |
330 DARTSCOPE(Thread::Current()); | 336 DARTSCOPE(Thread::Current()); |
| 337 Isolate* I = T->isolate(); |
331 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); | 338 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); |
332 | 339 |
333 Debugger* debugger = I->debugger(); | 340 Debugger* debugger = I->debugger(); |
334 Breakpoint* bpt = | 341 Breakpoint* bpt = |
335 debugger->SetBreakpointAtLine(script_url, line_number); | 342 debugger->SetBreakpointAtLine(script_url, line_number); |
336 if (bpt == NULL) { | 343 if (bpt == NULL) { |
337 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'", | 344 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'", |
338 CURRENT_FUNC, line_number, script_url.ToCString()); | 345 CURRENT_FUNC, line_number, script_url.ToCString()); |
339 } | 346 } |
340 return Dart_NewInteger(bpt->id()); | 347 return Dart_NewInteger(bpt->id()); |
341 } | 348 } |
342 | 349 |
343 | 350 |
344 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) { | 351 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) { |
345 DARTSCOPE(Thread::Current()); | 352 DARTSCOPE(Thread::Current()); |
| 353 Isolate* I = T->isolate(); |
346 Debugger* debugger = I->debugger(); | 354 Debugger* debugger = I->debugger(); |
347 | 355 |
348 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); | 356 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); |
349 if (bpt == NULL) { | 357 if (bpt == NULL) { |
350 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", | 358 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", |
351 CURRENT_FUNC, bp_id); | 359 CURRENT_FUNC, bp_id); |
352 } | 360 } |
353 return Api::NewHandle(I, bpt->bpt_location()->url()); | 361 return Api::NewHandle(T, bpt->bpt_location()->url()); |
354 } | 362 } |
355 | 363 |
356 | 364 |
357 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) { | 365 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) { |
358 DARTSCOPE(Thread::Current()); | 366 DARTSCOPE(Thread::Current()); |
| 367 Isolate* I = T->isolate(); |
359 Debugger* debugger = I->debugger(); | 368 Debugger* debugger = I->debugger(); |
360 | 369 |
361 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); | 370 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); |
362 if (bpt == NULL) { | 371 if (bpt == NULL) { |
363 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", | 372 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", |
364 CURRENT_FUNC, bp_id); | 373 CURRENT_FUNC, bp_id); |
365 } | 374 } |
366 if (bpt->bpt_location()->IsResolved()) { | 375 if (bpt->bpt_location()->IsResolved()) { |
367 return Dart_NewInteger(bpt->bpt_location()->LineNumber()); | 376 return Dart_NewInteger(bpt->bpt_location()->LineNumber()); |
368 } else { | 377 } else { |
369 return Dart_NewInteger(bpt->bpt_location()->requested_line_number()); | 378 return Dart_NewInteger(bpt->bpt_location()->requested_line_number()); |
370 } | 379 } |
371 } | 380 } |
372 | 381 |
373 | 382 |
374 DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry( | 383 DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry( |
375 Dart_Handle library_in, | 384 Dart_Handle library_in, |
376 Dart_Handle class_name_in, | 385 Dart_Handle class_name_in, |
377 Dart_Handle function_name_in) { | 386 Dart_Handle function_name_in) { |
378 DARTSCOPE(Thread::Current()); | 387 DARTSCOPE(Thread::Current()); |
| 388 Isolate* I = T->isolate(); |
379 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); | 389 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); |
380 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in); | 390 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in); |
381 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in); | 391 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in); |
382 | 392 |
383 // Ensure that the library is loaded. | 393 // Ensure that the library is loaded. |
384 if (!library.Loaded()) { | 394 if (!library.Loaded()) { |
385 return Api::NewError( | 395 return Api::NewError( |
386 "%s expects library argument 'library_in' to be loaded.", | 396 "%s expects library argument 'library_in' to be loaded.", |
387 CURRENT_FUNC); | 397 CURRENT_FUNC); |
388 } | 398 } |
(...skipping 19 matching lines...) Expand all Loading... |
408 } | 418 } |
409 return Dart_NewInteger(bpt->id()); | 419 return Dart_NewInteger(bpt->id()); |
410 } | 420 } |
411 | 421 |
412 | 422 |
413 DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry( | 423 DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry( |
414 Dart_Handle library_in, | 424 Dart_Handle library_in, |
415 Dart_Handle class_name_in, | 425 Dart_Handle class_name_in, |
416 Dart_Handle function_name_in) { | 426 Dart_Handle function_name_in) { |
417 DARTSCOPE(Thread::Current()); | 427 DARTSCOPE(Thread::Current()); |
| 428 Isolate* I = T->isolate(); |
418 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); | 429 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); |
419 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in); | 430 UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in); |
420 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in); | 431 UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in); |
421 | 432 |
422 // Ensure that the library is loaded. | 433 // Ensure that the library is loaded. |
423 if (!library.Loaded()) { | 434 if (!library.Loaded()) { |
424 return Api::NewError( | 435 return Api::NewError( |
425 "%s expects library argument 'library_in' to be loaded.", | 436 "%s expects library argument 'library_in' to be loaded.", |
426 CURRENT_FUNC); | 437 CURRENT_FUNC); |
427 } | 438 } |
428 | 439 |
429 // Resolve the breakpoint target function. | 440 // Resolve the breakpoint target function. |
430 Debugger* debugger = I->debugger(); | 441 Debugger* debugger = I->debugger(); |
431 const Function& bp_target = Function::Handle( | 442 const Function& bp_target = Function::Handle( |
432 debugger->ResolveFunction(library, class_name, function_name)); | 443 debugger->ResolveFunction(library, class_name, function_name)); |
433 if (bp_target.IsNull()) { | 444 if (bp_target.IsNull()) { |
434 const bool toplevel = class_name.Length() == 0; | 445 const bool toplevel = class_name.Length() == 0; |
435 return Api::NewError("%s: could not find function '%s%s%s'", | 446 return Api::NewError("%s: could not find function '%s%s%s'", |
436 CURRENT_FUNC, | 447 CURRENT_FUNC, |
437 toplevel ? "" : class_name.ToCString(), | 448 toplevel ? "" : class_name.ToCString(), |
438 toplevel ? "" : ".", | 449 toplevel ? "" : ".", |
439 function_name.ToCString()); | 450 function_name.ToCString()); |
440 } | 451 } |
441 | 452 |
442 const Error& error = Error::Handle(Z, | 453 const Error& error = Error::Handle(Z, |
443 debugger->OneTimeBreakAtEntry(bp_target)); | 454 debugger->OneTimeBreakAtEntry(bp_target)); |
444 if (!error.IsNull()) { | 455 if (!error.IsNull()) { |
445 return Api::NewHandle(I, error.raw()); | 456 return Api::NewHandle(T, error.raw()); |
446 } | 457 } |
447 return Api::Success(); | 458 return Api::Success(); |
448 } | 459 } |
449 | 460 |
450 | 461 |
451 DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) { | 462 DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) { |
452 DARTSCOPE(Thread::Current()); | 463 DARTSCOPE(Thread::Current()); |
| 464 Isolate* I = T->isolate(); |
453 I->debugger()->RemoveBreakpoint(bp_id); | 465 I->debugger()->RemoveBreakpoint(bp_id); |
454 return Api::Success(); | 466 return Api::Success(); |
455 } | 467 } |
456 | 468 |
457 | 469 |
458 DART_EXPORT Dart_Handle Dart_SetStepOver() { | 470 DART_EXPORT Dart_Handle Dart_SetStepOver() { |
459 DARTSCOPE(Thread::Current()); | 471 DARTSCOPE(Thread::Current()); |
| 472 Isolate* I = T->isolate(); |
460 I->debugger()->SetStepOver(); | 473 I->debugger()->SetStepOver(); |
461 return Api::Success(); | 474 return Api::Success(); |
462 } | 475 } |
463 | 476 |
464 | 477 |
465 DART_EXPORT Dart_Handle Dart_SetStepInto() { | 478 DART_EXPORT Dart_Handle Dart_SetStepInto() { |
466 DARTSCOPE(Thread::Current()); | 479 DARTSCOPE(Thread::Current()); |
| 480 Isolate* I = T->isolate(); |
467 I->debugger()->SetSingleStep(); | 481 I->debugger()->SetSingleStep(); |
468 return Api::Success(); | 482 return Api::Success(); |
469 } | 483 } |
470 | 484 |
471 | 485 |
472 DART_EXPORT Dart_Handle Dart_SetStepOut() { | 486 DART_EXPORT Dart_Handle Dart_SetStepOut() { |
473 DARTSCOPE(Thread::Current()); | 487 DARTSCOPE(Thread::Current()); |
| 488 Isolate* I = T->isolate(); |
474 I->debugger()->SetStepOut(); | 489 I->debugger()->SetStepOut(); |
475 return Api::Success(); | 490 return Api::Success(); |
476 } | 491 } |
477 | 492 |
478 | 493 |
479 DART_EXPORT Dart_Handle Dart_GetInstanceFields(Dart_Handle object_in) { | 494 DART_EXPORT Dart_Handle Dart_GetInstanceFields(Dart_Handle object_in) { |
480 DARTSCOPE(Thread::Current()); | 495 DARTSCOPE(Thread::Current()); |
| 496 Isolate* I = T->isolate(); |
481 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); | 497 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); |
482 return Api::NewHandle(I, I->debugger()->GetInstanceFields(obj)); | 498 return Api::NewHandle(T, I->debugger()->GetInstanceFields(obj)); |
483 } | 499 } |
484 | 500 |
485 | 501 |
486 DART_EXPORT Dart_Handle Dart_GetStaticFields(Dart_Handle target) { | 502 DART_EXPORT Dart_Handle Dart_GetStaticFields(Dart_Handle target) { |
487 DARTSCOPE(Thread::Current()); | 503 DARTSCOPE(Thread::Current()); |
| 504 Isolate* I = T->isolate(); |
488 const Type& type_obj = Api::UnwrapTypeHandle(Z, target); | 505 const Type& type_obj = Api::UnwrapTypeHandle(Z, target); |
489 if (type_obj.IsNull()) { | 506 if (type_obj.IsNull()) { |
490 return Api::NewError("%s expects argument 'target' to be a type", | 507 return Api::NewError("%s expects argument 'target' to be a type", |
491 CURRENT_FUNC); | 508 CURRENT_FUNC); |
492 } | 509 } |
493 const Class& cls = Class::Handle(Z, type_obj.type_class()); | 510 const Class& cls = Class::Handle(Z, type_obj.type_class()); |
494 return Api::NewHandle(I, I->debugger()->GetStaticFields(cls)); | 511 return Api::NewHandle(T, I->debugger()->GetStaticFields(cls)); |
495 } | 512 } |
496 | 513 |
497 | 514 |
498 DART_EXPORT Dart_Handle Dart_GetLibraryFields(intptr_t library_id) { | 515 DART_EXPORT Dart_Handle Dart_GetLibraryFields(intptr_t library_id) { |
499 DARTSCOPE(Thread::Current()); | 516 DARTSCOPE(Thread::Current()); |
| 517 Isolate* I = T->isolate(); |
500 const Library& lib = | 518 const Library& lib = |
501 Library::Handle(Z, Library::GetLibrary(library_id)); | 519 Library::Handle(Z, Library::GetLibrary(library_id)); |
502 if (lib.IsNull()) { | 520 if (lib.IsNull()) { |
503 return Api::NewError("%s: %" Pd " is not a valid library id", | 521 return Api::NewError("%s: %" Pd " is not a valid library id", |
504 CURRENT_FUNC, library_id); | 522 CURRENT_FUNC, library_id); |
505 } | 523 } |
506 return Api::NewHandle(I, I->debugger()->GetLibraryFields(lib)); | 524 return Api::NewHandle(T, I->debugger()->GetLibraryFields(lib)); |
507 } | 525 } |
508 | 526 |
509 | 527 |
510 DART_EXPORT Dart_Handle Dart_GetGlobalVariables(intptr_t library_id) { | 528 DART_EXPORT Dart_Handle Dart_GetGlobalVariables(intptr_t library_id) { |
511 DARTSCOPE(Thread::Current()); | 529 DARTSCOPE(Thread::Current()); |
| 530 Isolate* I = T->isolate(); |
512 | 531 |
513 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id)); | 532 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id)); |
514 if (lib.IsNull()) { | 533 if (lib.IsNull()) { |
515 return Api::NewError("%s: %" Pd " is not a valid library id", | 534 return Api::NewError("%s: %" Pd " is not a valid library id", |
516 CURRENT_FUNC, library_id); | 535 CURRENT_FUNC, library_id); |
517 } | 536 } |
518 return Api::NewHandle(I, I->debugger()->GetGlobalFields(lib)); | 537 return Api::NewHandle(T, I->debugger()->GetGlobalFields(lib)); |
519 } | 538 } |
520 | 539 |
521 | 540 |
522 DART_EXPORT Dart_Handle Dart_ActivationFrameEvaluate( | 541 DART_EXPORT Dart_Handle Dart_ActivationFrameEvaluate( |
523 Dart_ActivationFrame activation_frame, | 542 Dart_ActivationFrame activation_frame, |
524 Dart_Handle expr_in) { | 543 Dart_Handle expr_in) { |
525 DARTSCOPE(Thread::Current()); | 544 DARTSCOPE(Thread::Current()); |
526 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); | 545 CHECK_AND_CAST(ActivationFrame, frame, activation_frame); |
527 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in); | 546 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in); |
528 return Api::NewHandle(I, frame->Evaluate(expr)); | 547 return Api::NewHandle(T, frame->Evaluate(expr)); |
529 } | 548 } |
530 | 549 |
531 | 550 |
532 DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in, | 551 DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in, |
533 Dart_Handle expr_in) { | 552 Dart_Handle expr_in) { |
534 DARTSCOPE(Thread::Current()); | 553 DARTSCOPE(Thread::Current()); |
535 | 554 |
536 const Object& target = Object::Handle(Z, Api::UnwrapHandle(target_in)); | 555 const Object& target = Object::Handle(Z, Api::UnwrapHandle(target_in)); |
537 if (target.IsError()) return target_in; | 556 if (target.IsError()) return target_in; |
538 if (target.IsNull()) { | 557 if (target.IsNull()) { |
539 return Api::NewError("%s expects argument 'target' to be non-null", | 558 return Api::NewError("%s expects argument 'target' to be non-null", |
540 CURRENT_FUNC); | 559 CURRENT_FUNC); |
541 } | 560 } |
542 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in); | 561 UNWRAP_AND_CHECK_PARAM(String, expr, expr_in); |
543 // Type extends Instance, must check first. | 562 // Type extends Instance, must check first. |
544 if (target.IsType()) { | 563 if (target.IsType()) { |
545 const Class& cls = Class::Handle(Z, Type::Cast(target).type_class()); | 564 const Class& cls = Class::Handle(Z, Type::Cast(target).type_class()); |
546 return Api::NewHandle(I, cls.Evaluate(expr, | 565 return Api::NewHandle(T, cls.Evaluate(expr, |
547 Array::empty_array(), | 566 Array::empty_array(), |
548 Array::empty_array())); | 567 Array::empty_array())); |
549 } else if (target.IsInstance()) { | 568 } else if (target.IsInstance()) { |
550 const Instance& inst = Instance::Cast(target); | 569 const Instance& inst = Instance::Cast(target); |
551 return Api::NewHandle(I, inst.Evaluate(expr, | 570 return Api::NewHandle(T, inst.Evaluate(expr, |
552 Array::empty_array(), | 571 Array::empty_array(), |
553 Array::empty_array())); | 572 Array::empty_array())); |
554 } else if (target.IsLibrary()) { | 573 } else if (target.IsLibrary()) { |
555 const Library& lib = Library::Cast(target); | 574 const Library& lib = Library::Cast(target); |
556 return Api::NewHandle(I, lib.Evaluate(expr, | 575 return Api::NewHandle(T, lib.Evaluate(expr, |
557 Array::empty_array(), | 576 Array::empty_array(), |
558 Array::empty_array())); | 577 Array::empty_array())); |
559 } else if (target.IsClass()) { | 578 } else if (target.IsClass()) { |
560 const Class& cls = Class::Cast(target); | 579 const Class& cls = Class::Cast(target); |
561 return Api::NewHandle(I, cls.Evaluate(expr, | 580 return Api::NewHandle(T, cls.Evaluate(expr, |
562 Array::empty_array(), | 581 Array::empty_array(), |
563 Array::empty_array())); | 582 Array::empty_array())); |
564 } | 583 } |
565 return Api::NewError("%s: unsupported target type", CURRENT_FUNC); | 584 return Api::NewError("%s: unsupported target type", CURRENT_FUNC); |
566 } | 585 } |
567 | 586 |
568 | 587 |
569 DART_EXPORT Dart_Handle Dart_GetObjClass(Dart_Handle object_in) { | 588 DART_EXPORT Dart_Handle Dart_GetObjClass(Dart_Handle object_in) { |
570 DARTSCOPE(Thread::Current()); | 589 DARTSCOPE(Thread::Current()); |
571 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); | 590 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); |
572 return Api::NewHandle(I, obj.GetType()); | 591 return Api::NewHandle(T, obj.GetType()); |
573 } | 592 } |
574 | 593 |
575 | 594 |
576 DART_EXPORT Dart_Handle Dart_GetObjClassId(Dart_Handle object_in, | 595 DART_EXPORT Dart_Handle Dart_GetObjClassId(Dart_Handle object_in, |
577 intptr_t* class_id) { | 596 intptr_t* class_id) { |
578 DARTSCOPE(Thread::Current()); | 597 DARTSCOPE(Thread::Current()); |
579 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); | 598 UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in); |
580 CHECK_NOT_NULL(class_id); | 599 CHECK_NOT_NULL(class_id); |
581 *class_id = obj.GetClassId(); | 600 *class_id = obj.GetClassId(); |
582 return Api::Success(); | 601 return Api::Success(); |
583 } | 602 } |
584 | 603 |
585 | 604 |
586 DART_EXPORT Dart_Handle Dart_GetClassFromId(intptr_t class_id) { | 605 DART_EXPORT Dart_Handle Dart_GetClassFromId(intptr_t class_id) { |
587 DARTSCOPE(Thread::Current()); | 606 DARTSCOPE(Thread::Current()); |
| 607 Isolate* I = T->isolate(); |
588 if (!I->class_table()->IsValidIndex(class_id)) { | 608 if (!I->class_table()->IsValidIndex(class_id)) { |
589 return Api::NewError("%s: %" Pd " is not a valid class id", | 609 return Api::NewError("%s: %" Pd " is not a valid class id", |
590 CURRENT_FUNC, class_id); | 610 CURRENT_FUNC, class_id); |
591 } | 611 } |
592 return Api::NewHandle(I, I->class_table()->At(class_id)); | 612 return Api::NewHandle(T, I->class_table()->At(class_id)); |
593 } | 613 } |
594 | 614 |
595 | 615 |
596 DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) { | 616 DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) { |
597 DARTSCOPE(Thread::Current()); | 617 DARTSCOPE(Thread::Current()); |
598 | 618 |
599 UNWRAP_AND_CHECK_PARAM(Type, type, type_in); | 619 UNWRAP_AND_CHECK_PARAM(Type, type, type_in); |
600 if (!type.IsFinalized()) { | 620 if (!type.IsFinalized()) { |
601 return Api::NewError("%s: type in 'type_in' is not a finalized type", | 621 return Api::NewError("%s: type in 'type_in' is not a finalized type", |
602 CURRENT_FUNC); | 622 CURRENT_FUNC); |
603 } | 623 } |
604 if (!type.IsInstantiated()) { | 624 if (!type.IsInstantiated()) { |
605 return Api::NewError("%s: type in 'type_in' is not an instantiated type", | 625 return Api::NewError("%s: type in 'type_in' is not an instantiated type", |
606 CURRENT_FUNC); | 626 CURRENT_FUNC); |
607 } | 627 } |
608 const Class& cls = Class::Handle(type.type_class()); | 628 const Class& cls = Class::Handle(type.type_class()); |
609 if (cls.NumTypeParameters() == 0) { | 629 if (cls.NumTypeParameters() == 0) { |
610 // The super type has no type parameters or it is already instantiated | 630 // The super type has no type parameters or it is already instantiated |
611 // just return it. | 631 // just return it. |
612 const AbstractType& type = AbstractType::Handle(cls.super_type()); | 632 const AbstractType& type = AbstractType::Handle(cls.super_type()); |
613 if (type.IsNull()) { | 633 if (type.IsNull()) { |
614 return Dart_Null(); | 634 return Dart_Null(); |
615 } | 635 } |
616 return Api::NewHandle(I, type.Canonicalize()); | 636 return Api::NewHandle(T, type.Canonicalize()); |
617 } | 637 } |
618 // Set up the type arguments array for the super class type. | 638 // Set up the type arguments array for the super class type. |
619 const Class& super_cls = Class::Handle(cls.SuperClass()); | 639 const Class& super_cls = Class::Handle(cls.SuperClass()); |
620 intptr_t num_expected_type_arguments = super_cls.NumTypeArguments(); | 640 intptr_t num_expected_type_arguments = super_cls.NumTypeArguments(); |
621 TypeArguments& super_type_args_array = TypeArguments::Handle(); | 641 TypeArguments& super_type_args_array = TypeArguments::Handle(); |
622 const TypeArguments& type_args_array = | 642 const TypeArguments& type_args_array = |
623 TypeArguments::Handle(type.arguments()); | 643 TypeArguments::Handle(type.arguments()); |
624 if (!type_args_array.IsNull() && (num_expected_type_arguments > 0)) { | 644 if (!type_args_array.IsNull() && (num_expected_type_arguments > 0)) { |
625 super_type_args_array = TypeArguments::New(num_expected_type_arguments); | 645 super_type_args_array = TypeArguments::New(num_expected_type_arguments); |
626 AbstractType& type_arg = AbstractType::Handle(); | 646 AbstractType& type_arg = AbstractType::Handle(); |
627 for (intptr_t i = 0; i < num_expected_type_arguments; i++) { | 647 for (intptr_t i = 0; i < num_expected_type_arguments; i++) { |
628 type_arg ^= type_args_array.TypeAt(i); | 648 type_arg ^= type_args_array.TypeAt(i); |
629 super_type_args_array.SetTypeAt(i, type_arg); | 649 super_type_args_array.SetTypeAt(i, type_arg); |
630 } | 650 } |
631 } | 651 } |
632 | 652 |
633 // Construct the super type object, canonicalize it and return. | 653 // Construct the super type object, canonicalize it and return. |
634 Type& instantiated_type = Type::Handle( | 654 Type& instantiated_type = Type::Handle( |
635 Type::New(super_cls, super_type_args_array, Scanner::kNoSourcePos)); | 655 Type::New(super_cls, super_type_args_array, Scanner::kNoSourcePos)); |
636 ASSERT(!instantiated_type.IsNull()); | 656 ASSERT(!instantiated_type.IsNull()); |
637 instantiated_type.SetIsFinalized(); | 657 instantiated_type.SetIsFinalized(); |
638 return Api::NewHandle(I, instantiated_type.Canonicalize()); | 658 return Api::NewHandle(T, instantiated_type.Canonicalize()); |
639 } | 659 } |
640 | 660 |
641 | 661 |
642 DART_EXPORT Dart_Handle Dart_GetClosureInfo( | 662 DART_EXPORT Dart_Handle Dart_GetClosureInfo( |
643 Dart_Handle closure, | 663 Dart_Handle closure, |
644 Dart_Handle* name, | 664 Dart_Handle* name, |
645 Dart_Handle* signature, | 665 Dart_Handle* signature, |
646 Dart_CodeLocation* location) { | 666 Dart_CodeLocation* location) { |
647 DARTSCOPE(Thread::Current()); | 667 DARTSCOPE(Thread::Current()); |
648 UNWRAP_AND_CHECK_PARAM(Instance, instance, closure); | 668 UNWRAP_AND_CHECK_PARAM(Instance, instance, closure); |
649 CHECK_NOT_NULL(location); | 669 CHECK_NOT_NULL(location); |
650 | 670 |
651 if (!instance.IsClosure()) { | 671 if (!instance.IsClosure()) { |
652 return Api::NewError("%s: parameter 0 is not a closure", CURRENT_FUNC); | 672 return Api::NewError("%s: parameter 0 is not a closure", CURRENT_FUNC); |
653 } | 673 } |
654 const Function& func = Function::Handle(Closure::function(instance)); | 674 const Function& func = Function::Handle(Closure::function(instance)); |
655 ASSERT(!func.IsNull()); | 675 ASSERT(!func.IsNull()); |
656 if (name != NULL) { | 676 if (name != NULL) { |
657 *name = Api::NewHandle(I, func.QualifiedUserVisibleName()); | 677 *name = Api::NewHandle(T, func.QualifiedUserVisibleName()); |
658 } | 678 } |
659 if (signature != NULL) { | 679 if (signature != NULL) { |
660 *signature = Api::NewHandle(I, func.UserVisibleSignature()); | 680 *signature = Api::NewHandle(T, func.UserVisibleSignature()); |
661 } | 681 } |
662 | 682 |
663 if (location != NULL) { | 683 if (location != NULL) { |
664 if (func.token_pos() >= 0) { | 684 if (func.token_pos() >= 0) { |
665 const Class& cls = Class::Handle(Z, func.origin()); | 685 const Class& cls = Class::Handle(Z, func.origin()); |
666 ASSERT(!cls.IsNull()); | 686 ASSERT(!cls.IsNull()); |
667 const Library& lib = Library::Handle(Z, cls.library()); | 687 const Library& lib = Library::Handle(Z, cls.library()); |
668 ASSERT(!lib.IsNull()); | 688 ASSERT(!lib.IsNull()); |
669 // Note func.script() is not the same as cls.script() for eval functions. | 689 // Note func.script() is not the same as cls.script() for eval functions. |
670 const Script& script = Script::Handle(Z, func.script()); | 690 const Script& script = Script::Handle(Z, func.script()); |
671 ASSERT(!script.IsNull()); | 691 ASSERT(!script.IsNull()); |
672 location->script_url = Api::NewHandle(I, script.url()); | 692 location->script_url = Api::NewHandle(T, script.url()); |
673 location->library_id = lib.index(); | 693 location->library_id = lib.index(); |
674 location->token_pos = func.token_pos(); | 694 location->token_pos = func.token_pos(); |
675 } else { | 695 } else { |
676 location->script_url = Api::NewHandle(I, String::null()); | 696 location->script_url = Api::NewHandle(T, String::null()); |
677 location->library_id = -1; | 697 location->library_id = -1; |
678 location->token_pos = -1; | 698 location->token_pos = -1; |
679 } | 699 } |
680 } | 700 } |
681 return Api::True(); | 701 return Api::True(); |
682 } | 702 } |
683 | 703 |
684 | 704 |
685 DART_EXPORT Dart_Handle Dart_GetClassInfo( | 705 DART_EXPORT Dart_Handle Dart_GetClassInfo( |
686 intptr_t cls_id, | 706 intptr_t cls_id, |
687 Dart_Handle* class_name, | 707 Dart_Handle* class_name, |
688 intptr_t* library_id, | 708 intptr_t* library_id, |
689 intptr_t* super_class_id, | 709 intptr_t* super_class_id, |
690 Dart_Handle* static_fields) { | 710 Dart_Handle* static_fields) { |
691 DARTSCOPE(Thread::Current()); | 711 DARTSCOPE(Thread::Current()); |
| 712 Isolate* I = T->isolate(); |
692 if (!I->class_table()->IsValidIndex(cls_id)) { | 713 if (!I->class_table()->IsValidIndex(cls_id)) { |
693 return Api::NewError("%s: %" Pd " is not a valid class id", | 714 return Api::NewError("%s: %" Pd " is not a valid class id", |
694 CURRENT_FUNC, cls_id); | 715 CURRENT_FUNC, cls_id); |
695 } | 716 } |
696 Class& cls = Class::Handle(Z, I->class_table()->At(cls_id)); | 717 Class& cls = Class::Handle(Z, I->class_table()->At(cls_id)); |
697 if (class_name != NULL) { | 718 if (class_name != NULL) { |
698 *class_name = Api::NewHandle(I, cls.Name()); | 719 *class_name = Api::NewHandle(T, cls.Name()); |
699 } | 720 } |
700 if (library_id != NULL) { | 721 if (library_id != NULL) { |
701 const Library& lib = Library::Handle(Z, cls.library()); | 722 const Library& lib = Library::Handle(Z, cls.library()); |
702 *library_id = lib.index(); | 723 *library_id = lib.index(); |
703 } | 724 } |
704 if (super_class_id != NULL) { | 725 if (super_class_id != NULL) { |
705 *super_class_id = 0; | 726 *super_class_id = 0; |
706 Class& super_cls = Class::Handle(Z, cls.SuperClass()); | 727 Class& super_cls = Class::Handle(Z, cls.SuperClass()); |
707 if (!super_cls.IsNull()) { | 728 if (!super_cls.IsNull()) { |
708 *super_class_id = super_cls.id(); | 729 *super_class_id = super_cls.id(); |
709 } | 730 } |
710 } | 731 } |
711 if (static_fields != NULL) { | 732 if (static_fields != NULL) { |
712 *static_fields = | 733 *static_fields = |
713 Api::NewHandle(I, I->debugger()->GetStaticFields(cls)); | 734 Api::NewHandle(T, I->debugger()->GetStaticFields(cls)); |
714 } | 735 } |
715 return Api::Success(); | 736 return Api::Success(); |
716 } | 737 } |
717 | 738 |
718 | 739 |
719 DART_EXPORT Dart_Handle Dart_ScriptGetSource( | 740 DART_EXPORT Dart_Handle Dart_ScriptGetSource( |
720 intptr_t library_id, | 741 intptr_t library_id, |
721 Dart_Handle script_url_in) { | 742 Dart_Handle script_url_in) { |
722 DARTSCOPE(Thread::Current()); | 743 DARTSCOPE(Thread::Current()); |
723 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); | 744 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); |
724 if (lib.IsNull()) { | 745 if (lib.IsNull()) { |
725 return Api::NewError("%s: %" Pd " is not a valid library id", | 746 return Api::NewError("%s: %" Pd " is not a valid library id", |
726 CURRENT_FUNC, library_id); | 747 CURRENT_FUNC, library_id); |
727 } | 748 } |
728 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); | 749 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); |
729 const Script& script = Script::Handle(lib.LookupScript(script_url)); | 750 const Script& script = Script::Handle(lib.LookupScript(script_url)); |
730 if (script.IsNull()) { | 751 if (script.IsNull()) { |
731 return Api::NewError("%s: script '%s' not found in library '%s'", | 752 return Api::NewError("%s: script '%s' not found in library '%s'", |
732 CURRENT_FUNC, script_url.ToCString(), | 753 CURRENT_FUNC, script_url.ToCString(), |
733 String::Handle(lib.url()).ToCString()); | 754 String::Handle(lib.url()).ToCString()); |
734 } | 755 } |
735 return Api::NewHandle(I, script.Source()); | 756 return Api::NewHandle(T, script.Source()); |
736 } | 757 } |
737 | 758 |
738 | 759 |
739 DART_EXPORT Dart_Handle Dart_ScriptGetTokenInfo( | 760 DART_EXPORT Dart_Handle Dart_ScriptGetTokenInfo( |
740 intptr_t library_id, | 761 intptr_t library_id, |
741 Dart_Handle script_url_in) { | 762 Dart_Handle script_url_in) { |
742 DARTSCOPE(Thread::Current()); | 763 DARTSCOPE(Thread::Current()); |
743 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); | 764 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); |
744 if (lib.IsNull()) { | 765 if (lib.IsNull()) { |
745 return Api::NewError("%s: %" Pd " is not a valid library id", | 766 return Api::NewError("%s: %" Pd " is not a valid library id", |
746 CURRENT_FUNC, library_id); | 767 CURRENT_FUNC, library_id); |
747 } | 768 } |
748 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); | 769 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); |
749 const Script& script = Script::Handle(lib.LookupScript(script_url)); | 770 const Script& script = Script::Handle(lib.LookupScript(script_url)); |
750 if (script.IsNull()) { | 771 if (script.IsNull()) { |
751 return Api::NewError("%s: script '%s' not found in library '%s'", | 772 return Api::NewError("%s: script '%s' not found in library '%s'", |
752 CURRENT_FUNC, script_url.ToCString(), | 773 CURRENT_FUNC, script_url.ToCString(), |
753 String::Handle(lib.url()).ToCString()); | 774 String::Handle(lib.url()).ToCString()); |
754 } | 775 } |
755 | 776 |
756 const GrowableObjectArray& info = | 777 const GrowableObjectArray& info = |
757 GrowableObjectArray::Handle(script.GenerateLineNumberArray()); | 778 GrowableObjectArray::Handle(script.GenerateLineNumberArray()); |
758 return Api::NewHandle(I, Array::MakeArray(info)); | 779 return Api::NewHandle(T, Array::MakeArray(info)); |
759 } | 780 } |
760 | 781 |
761 | 782 |
762 DART_EXPORT Dart_Handle Dart_GenerateScriptSource(Dart_Handle library_url_in, | 783 DART_EXPORT Dart_Handle Dart_GenerateScriptSource(Dart_Handle library_url_in, |
763 Dart_Handle script_url_in) { | 784 Dart_Handle script_url_in) { |
764 DARTSCOPE(Thread::Current()); | 785 DARTSCOPE(Thread::Current()); |
765 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in); | 786 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in); |
766 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); | 787 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); |
767 | 788 |
768 const Library& library = Library::Handle(Library::LookupLibrary(library_url)); | 789 const Library& library = Library::Handle(Library::LookupLibrary(library_url)); |
769 if (library.IsNull()) { | 790 if (library.IsNull()) { |
770 return Api::NewError("%s: library '%s' not found", | 791 return Api::NewError("%s: library '%s' not found", |
771 CURRENT_FUNC, library_url.ToCString()); | 792 CURRENT_FUNC, library_url.ToCString()); |
772 } | 793 } |
773 | 794 |
774 const Script& script = Script::Handle(library.LookupScript(script_url)); | 795 const Script& script = Script::Handle(library.LookupScript(script_url)); |
775 if (script.IsNull()) { | 796 if (script.IsNull()) { |
776 return Api::NewError("%s: script '%s' not found in library '%s'", | 797 return Api::NewError("%s: script '%s' not found in library '%s'", |
777 CURRENT_FUNC, script_url.ToCString(), | 798 CURRENT_FUNC, script_url.ToCString(), |
778 library_url.ToCString()); | 799 library_url.ToCString()); |
779 } | 800 } |
780 | 801 |
781 return Api::NewHandle(I, script.GenerateSource()); | 802 return Api::NewHandle(T, script.GenerateSource()); |
782 } | 803 } |
783 | 804 |
784 | 805 |
785 DART_EXPORT Dart_Handle Dart_GetScriptURLs(Dart_Handle library_url_in) { | 806 DART_EXPORT Dart_Handle Dart_GetScriptURLs(Dart_Handle library_url_in) { |
786 DARTSCOPE(Thread::Current()); | 807 DARTSCOPE(Thread::Current()); |
787 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in); | 808 UNWRAP_AND_CHECK_PARAM(String, library_url, library_url_in); |
788 | 809 |
789 const Library& library = Library::Handle(Library::LookupLibrary(library_url)); | 810 const Library& library = Library::Handle(Library::LookupLibrary(library_url)); |
790 if (library.IsNull()) { | 811 if (library.IsNull()) { |
791 return Api::NewError("%s: library '%s' not found", | 812 return Api::NewError("%s: library '%s' not found", |
792 CURRENT_FUNC, library_url.ToCString()); | 813 CURRENT_FUNC, library_url.ToCString()); |
793 } | 814 } |
794 const Array& loaded_scripts = Array::Handle(library.LoadedScripts()); | 815 const Array& loaded_scripts = Array::Handle(library.LoadedScripts()); |
795 ASSERT(!loaded_scripts.IsNull()); | 816 ASSERT(!loaded_scripts.IsNull()); |
796 intptr_t num_scripts = loaded_scripts.Length(); | 817 intptr_t num_scripts = loaded_scripts.Length(); |
797 const Array& script_list = Array::Handle(Array::New(num_scripts)); | 818 const Array& script_list = Array::Handle(Array::New(num_scripts)); |
798 Script& script = Script::Handle(); | 819 Script& script = Script::Handle(); |
799 String& url = String::Handle(); | 820 String& url = String::Handle(); |
800 for (int i = 0; i < num_scripts; i++) { | 821 for (int i = 0; i < num_scripts; i++) { |
801 script ^= loaded_scripts.At(i); | 822 script ^= loaded_scripts.At(i); |
802 url = script.url(); | 823 url = script.url(); |
803 script_list.SetAt(i, url); | 824 script_list.SetAt(i, url); |
804 } | 825 } |
805 return Api::NewHandle(I, script_list.raw()); | 826 return Api::NewHandle(T, script_list.raw()); |
806 } | 827 } |
807 | 828 |
808 | 829 |
809 DART_EXPORT Dart_Handle Dart_GetLibraryIds() { | 830 DART_EXPORT Dart_Handle Dart_GetLibraryIds() { |
810 DARTSCOPE(Thread::Current()); | 831 DARTSCOPE(Thread::Current()); |
| 832 Isolate* I = T->isolate(); |
811 | 833 |
812 const GrowableObjectArray& libs = | 834 const GrowableObjectArray& libs = |
813 GrowableObjectArray::Handle(Z, I->object_store()->libraries()); | 835 GrowableObjectArray::Handle(Z, I->object_store()->libraries()); |
814 int num_libs = libs.Length(); | 836 int num_libs = libs.Length(); |
815 | 837 |
816 // Create new list and populate with the url of loaded libraries. | 838 // Create new list and populate with the url of loaded libraries. |
817 Library &lib = Library::Handle(); | 839 Library &lib = Library::Handle(); |
818 const Array& library_id_list = Array::Handle(Z, Array::New(num_libs)); | 840 const Array& library_id_list = Array::Handle(Z, Array::New(num_libs)); |
819 for (int i = 0; i < num_libs; i++) { | 841 for (int i = 0; i < num_libs; i++) { |
820 lib ^= libs.At(i); | 842 lib ^= libs.At(i); |
821 ASSERT(!lib.IsNull()); | 843 ASSERT(!lib.IsNull()); |
822 ASSERT(Smi::IsValid(lib.index())); | 844 ASSERT(Smi::IsValid(lib.index())); |
823 library_id_list.SetAt(i, Smi::Handle(Smi::New(lib.index()))); | 845 library_id_list.SetAt(i, Smi::Handle(Smi::New(lib.index()))); |
824 } | 846 } |
825 return Api::NewHandle(I, library_id_list.raw()); | 847 return Api::NewHandle(T, library_id_list.raw()); |
826 } | 848 } |
827 | 849 |
828 | 850 |
829 DART_EXPORT Dart_Handle Dart_GetLibraryFromId(intptr_t library_id) { | 851 DART_EXPORT Dart_Handle Dart_GetLibraryFromId(intptr_t library_id) { |
830 DARTSCOPE(Thread::Current()); | 852 DARTSCOPE(Thread::Current()); |
831 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id)); | 853 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id)); |
832 if (lib.IsNull()) { | 854 if (lib.IsNull()) { |
833 return Api::NewError("%s: %" Pd " is not a valid library id", | 855 return Api::NewError("%s: %" Pd " is not a valid library id", |
834 CURRENT_FUNC, library_id); | 856 CURRENT_FUNC, library_id); |
835 } | 857 } |
836 return Api::NewHandle(I, lib.raw()); | 858 return Api::NewHandle(T, lib.raw()); |
837 } | 859 } |
838 | 860 |
839 | 861 |
840 DART_EXPORT Dart_Handle Dart_LibraryId(Dart_Handle library, | 862 DART_EXPORT Dart_Handle Dart_LibraryId(Dart_Handle library, |
841 intptr_t* library_id) { | 863 intptr_t* library_id) { |
842 DARTSCOPE(Thread::Current()); | 864 DARTSCOPE(Thread::Current()); |
843 const Library& lib = Api::UnwrapLibraryHandle(Z, library); | 865 const Library& lib = Api::UnwrapLibraryHandle(Z, library); |
844 if (lib.IsNull()) { | 866 if (lib.IsNull()) { |
845 RETURN_TYPE_ERROR(Z, library, Library); | 867 RETURN_TYPE_ERROR(Z, library, Library); |
846 } | 868 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
878 prefix = it.GetNext(); | 900 prefix = it.GetNext(); |
879 prefix_name = prefix.name(); | 901 prefix_name = prefix.name(); |
880 ASSERT(!prefix_name.IsNull()); | 902 ASSERT(!prefix_name.IsNull()); |
881 prefix_name = String::Concat(prefix_name, Symbols::Dot()); | 903 prefix_name = String::Concat(prefix_name, Symbols::Dot()); |
882 for (int32_t i = 0; i < prefix.num_imports(); i++) { | 904 for (int32_t i = 0; i < prefix.num_imports(); i++) { |
883 imported = prefix.GetLibrary(i); | 905 imported = prefix.GetLibrary(i); |
884 import_list.Add(prefix_name); | 906 import_list.Add(prefix_name); |
885 import_list.Add(Smi::Handle(Smi::New(imported.index()))); | 907 import_list.Add(Smi::Handle(Smi::New(imported.index()))); |
886 } | 908 } |
887 } | 909 } |
888 return Api::NewHandle(I, Array::MakeArray(import_list)); | 910 return Api::NewHandle(T, Array::MakeArray(import_list)); |
889 } | 911 } |
890 | 912 |
891 | 913 |
892 DART_EXPORT Dart_Handle Dart_GetLibraryURL(intptr_t library_id) { | 914 DART_EXPORT Dart_Handle Dart_GetLibraryURL(intptr_t library_id) { |
893 DARTSCOPE(Thread::Current()); | 915 DARTSCOPE(Thread::Current()); |
894 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id)); | 916 const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id)); |
895 if (lib.IsNull()) { | 917 if (lib.IsNull()) { |
896 return Api::NewError("%s: %" Pd " is not a valid library id", | 918 return Api::NewError("%s: %" Pd " is not a valid library id", |
897 CURRENT_FUNC, library_id); | 919 CURRENT_FUNC, library_id); |
898 } | 920 } |
899 return Api::NewHandle(I, lib.url()); | 921 return Api::NewHandle(T, lib.url()); |
900 } | 922 } |
901 | 923 |
902 | 924 |
903 DART_EXPORT Dart_Handle Dart_GetLibraryDebuggable(intptr_t library_id, | 925 DART_EXPORT Dart_Handle Dart_GetLibraryDebuggable(intptr_t library_id, |
904 bool* is_debuggable) { | 926 bool* is_debuggable) { |
905 DARTSCOPE(Thread::Current()); | 927 DARTSCOPE(Thread::Current()); |
906 CHECK_NOT_NULL(is_debuggable); | 928 CHECK_NOT_NULL(is_debuggable); |
907 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); | 929 const Library& lib = Library::Handle(Library::GetLibrary(library_id)); |
908 if (lib.IsNull()) { | 930 if (lib.IsNull()) { |
909 return Api::NewError("%s: %" Pd " is not a valid library id", | 931 return Api::NewError("%s: %" Pd " is not a valid library id", |
(...skipping 22 matching lines...) Expand all Loading... |
932 return Api::CastIsolate(isolate); | 954 return Api::CastIsolate(isolate); |
933 } | 955 } |
934 | 956 |
935 | 957 |
936 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) { | 958 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) { |
937 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate); | 959 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate); |
938 return isolate->debugger()->GetIsolateId(); | 960 return isolate->debugger()->GetIsolateId(); |
939 } | 961 } |
940 | 962 |
941 } // namespace dart | 963 } // namespace dart |
OLD | NEW |