| Index: runtime/vm/debugger_api_impl.cc
|
| diff --git a/runtime/vm/debugger_api_impl.cc b/runtime/vm/debugger_api_impl.cc
|
| index bd6883cd26c6ac1908dc2622ea4947dd02a7ad1c..7e1ec45e9616b465f7c549a9bb3d3e5b9f36010b 100644
|
| --- a/runtime/vm/debugger_api_impl.cc
|
| +++ b/runtime/vm/debugger_api_impl.cc
|
| @@ -56,6 +56,7 @@ namespace dart {
|
|
|
| DART_EXPORT intptr_t Dart_CacheObject(Dart_Handle object_in) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object_in));
|
| if (obj.IsApiError()) {
|
| return -1;
|
| @@ -66,11 +67,12 @@ DART_EXPORT intptr_t Dart_CacheObject(Dart_Handle object_in) {
|
|
|
| DART_EXPORT Dart_Handle Dart_GetCachedObject(intptr_t obj_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| if (!I->debugger()->IsValidObjectId(obj_id)) {
|
| return Api::NewError("%s: object id %" Pd " is invalid",
|
| CURRENT_FUNC, obj_id);
|
| }
|
| - return Api::NewHandle(I, I->debugger()->GetCachedObject(obj_id));
|
| + return Api::NewHandle(T, I->debugger()->GetCachedObject(obj_id));
|
| }
|
|
|
|
|
| @@ -117,7 +119,7 @@ static void DebuggerEventHandler(DebuggerEvent* event) {
|
| if (paused_event_handler != NULL) {
|
| Dart_CodeLocation location;
|
| ActivationFrame* top_frame = event->top_frame();
|
| - location.script_url = Api::NewHandle(isolate, top_frame->SourceUrl());
|
| + location.script_url = Api::NewHandle(thread, top_frame->SourceUrl());
|
| const Library& lib = Library::Handle(top_frame->Library());
|
| location.library_id = lib.index();
|
| location.token_pos = top_frame->TokenPos();
|
| @@ -138,7 +140,7 @@ static void DebuggerEventHandler(DebuggerEvent* event) {
|
| Script& script = Script::Handle(zone);
|
| intptr_t token_pos;
|
| bpt->bpt_location()->GetCodeLocation(&library, &script, &token_pos);
|
| - location.script_url = Api::NewHandle(isolate, script.url());
|
| + location.script_url = Api::NewHandle(thread, script.url());
|
| location.library_id = library.index();
|
| location.token_pos = token_pos;
|
| (*bp_resolved_handler)(isolate_id, bpt->id(), location);
|
| @@ -146,7 +148,7 @@ static void DebuggerEventHandler(DebuggerEvent* event) {
|
| } else if (event->type() == DebuggerEvent::kExceptionThrown) {
|
| if (exc_thrown_handler != NULL) {
|
| Dart_Handle exception =
|
| - Api::NewHandle(isolate, event->exception()->raw());
|
| + Api::NewHandle(thread, event->exception()->raw());
|
| Dart_StackTrace trace =
|
| reinterpret_cast<Dart_StackTrace>(isolate->debugger()->StackTrace());
|
| (*exc_thrown_handler)(isolate_id, exception, trace);
|
| @@ -199,6 +201,7 @@ DART_EXPORT void Dart_SetIsolateEventHandler(Dart_IsolateEventHandler handler) {
|
| DART_EXPORT Dart_Handle Dart_SetExceptionPauseInfo(
|
| Dart_ExceptionPauseInfo pause_info) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| I->debugger()->SetExceptionPauseInfo(pause_info);
|
| return Api::Success();
|
| }
|
| @@ -206,12 +209,14 @@ DART_EXPORT Dart_Handle Dart_SetExceptionPauseInfo(
|
|
|
| DART_EXPORT Dart_ExceptionPauseInfo Dart_GetExceptionPauseInfo() {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| return I->debugger()->GetExceptionPauseInfo();
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| CHECK_NOT_NULL(trace);
|
| *trace = reinterpret_cast<Dart_StackTrace>(
|
| I->debugger()->CurrentStackTrace());
|
| @@ -231,6 +236,7 @@ DART_EXPORT Dart_Handle Dart_GetStackTraceFromError(Dart_Handle handle,
|
| if (dart_stacktrace.IsNull()) {
|
| *trace = NULL;
|
| } else {
|
| + Isolate* I = T->isolate();
|
| *trace = reinterpret_cast<Dart_StackTrace>(
|
| I->debugger()->StackTraceFrom(dart_stacktrace));
|
| }
|
| @@ -251,10 +257,10 @@ DART_EXPORT Dart_Handle Dart_ActivationFrameInfo(
|
| DARTSCOPE(Thread::Current());
|
| CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
|
| if (function_name != NULL) {
|
| - *function_name = Api::NewHandle(I, frame->QualifiedFunctionName());
|
| + *function_name = Api::NewHandle(T, frame->QualifiedFunctionName());
|
| }
|
| if (script_url != NULL) {
|
| - *script_url = Api::NewHandle(I, frame->SourceUrl());
|
| + *script_url = Api::NewHandle(T, frame->SourceUrl());
|
| }
|
| if (line_number != NULL) {
|
| *line_number = frame->LineNumber();
|
| @@ -276,14 +282,14 @@ DART_EXPORT Dart_Handle Dart_ActivationFrameGetLocation(
|
| DARTSCOPE(Thread::Current());
|
| CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
|
| if (function_name != NULL) {
|
| - *function_name = Api::NewHandle(I, frame->QualifiedFunctionName());
|
| + *function_name = Api::NewHandle(T, frame->QualifiedFunctionName());
|
| }
|
| if (function != NULL) {
|
| - *function = Api::NewHandle(I, frame->function().raw());
|
| + *function = Api::NewHandle(T, frame->function().raw());
|
| }
|
|
|
| if (location != NULL) {
|
| - location->script_url = Api::NewHandle(I, frame->SourceUrl());
|
| + location->script_url = Api::NewHandle(T, frame->SourceUrl());
|
| const Library& lib = Library::Handle(Z, frame->Library());
|
| location->library_id = lib.index();
|
| location->token_pos = frame->TokenPos();
|
| @@ -320,7 +326,7 @@ DART_EXPORT Dart_Handle Dart_GetLocalVariables(
|
| Dart_ActivationFrame activation_frame) {
|
| DARTSCOPE(Thread::Current());
|
| CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
|
| - return Api::NewHandle(I, frame->GetLocalVariables());
|
| + return Api::NewHandle(T, frame->GetLocalVariables());
|
| }
|
|
|
|
|
| @@ -328,6 +334,7 @@ DART_EXPORT Dart_Handle Dart_SetBreakpoint(
|
| Dart_Handle script_url_in,
|
| intptr_t line_number) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
|
|
|
| Debugger* debugger = I->debugger();
|
| @@ -343,6 +350,7 @@ DART_EXPORT Dart_Handle Dart_SetBreakpoint(
|
|
|
| DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| Debugger* debugger = I->debugger();
|
|
|
| Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
|
| @@ -350,12 +358,13 @@ DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) {
|
| return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
|
| CURRENT_FUNC, bp_id);
|
| }
|
| - return Api::NewHandle(I, bpt->bpt_location()->url());
|
| + return Api::NewHandle(T, bpt->bpt_location()->url());
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| Debugger* debugger = I->debugger();
|
|
|
| Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
|
| @@ -376,6 +385,7 @@ DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry(
|
| Dart_Handle class_name_in,
|
| Dart_Handle function_name_in) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| UNWRAP_AND_CHECK_PARAM(Library, library, library_in);
|
| UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in);
|
| UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in);
|
| @@ -415,6 +425,7 @@ DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry(
|
| Dart_Handle class_name_in,
|
| Dart_Handle function_name_in) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| UNWRAP_AND_CHECK_PARAM(Library, library, library_in);
|
| UNWRAP_AND_CHECK_PARAM(String, class_name, class_name_in);
|
| UNWRAP_AND_CHECK_PARAM(String, function_name, function_name_in);
|
| @@ -442,7 +453,7 @@ DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry(
|
| const Error& error = Error::Handle(Z,
|
| debugger->OneTimeBreakAtEntry(bp_target));
|
| if (!error.IsNull()) {
|
| - return Api::NewHandle(I, error.raw());
|
| + return Api::NewHandle(T, error.raw());
|
| }
|
| return Api::Success();
|
| }
|
| @@ -450,6 +461,7 @@ DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry(
|
|
|
| DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| I->debugger()->RemoveBreakpoint(bp_id);
|
| return Api::Success();
|
| }
|
| @@ -457,6 +469,7 @@ DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) {
|
|
|
| DART_EXPORT Dart_Handle Dart_SetStepOver() {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| I->debugger()->SetStepOver();
|
| return Api::Success();
|
| }
|
| @@ -464,6 +477,7 @@ DART_EXPORT Dart_Handle Dart_SetStepOver() {
|
|
|
| DART_EXPORT Dart_Handle Dart_SetStepInto() {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| I->debugger()->SetSingleStep();
|
| return Api::Success();
|
| }
|
| @@ -471,6 +485,7 @@ DART_EXPORT Dart_Handle Dart_SetStepInto() {
|
|
|
| DART_EXPORT Dart_Handle Dart_SetStepOut() {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| I->debugger()->SetStepOut();
|
| return Api::Success();
|
| }
|
| @@ -478,44 +493,48 @@ DART_EXPORT Dart_Handle Dart_SetStepOut() {
|
|
|
| DART_EXPORT Dart_Handle Dart_GetInstanceFields(Dart_Handle object_in) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in);
|
| - return Api::NewHandle(I, I->debugger()->GetInstanceFields(obj));
|
| + return Api::NewHandle(T, I->debugger()->GetInstanceFields(obj));
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetStaticFields(Dart_Handle target) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| const Type& type_obj = Api::UnwrapTypeHandle(Z, target);
|
| if (type_obj.IsNull()) {
|
| return Api::NewError("%s expects argument 'target' to be a type",
|
| CURRENT_FUNC);
|
| }
|
| const Class& cls = Class::Handle(Z, type_obj.type_class());
|
| - return Api::NewHandle(I, I->debugger()->GetStaticFields(cls));
|
| + return Api::NewHandle(T, I->debugger()->GetStaticFields(cls));
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetLibraryFields(intptr_t library_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| const Library& lib =
|
| Library::Handle(Z, Library::GetLibrary(library_id));
|
| if (lib.IsNull()) {
|
| return Api::NewError("%s: %" Pd " is not a valid library id",
|
| CURRENT_FUNC, library_id);
|
| }
|
| - return Api::NewHandle(I, I->debugger()->GetLibraryFields(lib));
|
| + return Api::NewHandle(T, I->debugger()->GetLibraryFields(lib));
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetGlobalVariables(intptr_t library_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
|
|
| const Library& lib = Library::Handle(Z, Library::GetLibrary(library_id));
|
| if (lib.IsNull()) {
|
| return Api::NewError("%s: %" Pd " is not a valid library id",
|
| CURRENT_FUNC, library_id);
|
| }
|
| - return Api::NewHandle(I, I->debugger()->GetGlobalFields(lib));
|
| + return Api::NewHandle(T, I->debugger()->GetGlobalFields(lib));
|
| }
|
|
|
|
|
| @@ -525,7 +544,7 @@ DART_EXPORT Dart_Handle Dart_ActivationFrameEvaluate(
|
| DARTSCOPE(Thread::Current());
|
| CHECK_AND_CAST(ActivationFrame, frame, activation_frame);
|
| UNWRAP_AND_CHECK_PARAM(String, expr, expr_in);
|
| - return Api::NewHandle(I, frame->Evaluate(expr));
|
| + return Api::NewHandle(T, frame->Evaluate(expr));
|
| }
|
|
|
|
|
| @@ -543,22 +562,22 @@ DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in,
|
| // Type extends Instance, must check first.
|
| if (target.IsType()) {
|
| const Class& cls = Class::Handle(Z, Type::Cast(target).type_class());
|
| - return Api::NewHandle(I, cls.Evaluate(expr,
|
| + return Api::NewHandle(T, cls.Evaluate(expr,
|
| Array::empty_array(),
|
| Array::empty_array()));
|
| } else if (target.IsInstance()) {
|
| const Instance& inst = Instance::Cast(target);
|
| - return Api::NewHandle(I, inst.Evaluate(expr,
|
| + return Api::NewHandle(T, inst.Evaluate(expr,
|
| Array::empty_array(),
|
| Array::empty_array()));
|
| } else if (target.IsLibrary()) {
|
| const Library& lib = Library::Cast(target);
|
| - return Api::NewHandle(I, lib.Evaluate(expr,
|
| + return Api::NewHandle(T, lib.Evaluate(expr,
|
| Array::empty_array(),
|
| Array::empty_array()));
|
| } else if (target.IsClass()) {
|
| const Class& cls = Class::Cast(target);
|
| - return Api::NewHandle(I, cls.Evaluate(expr,
|
| + return Api::NewHandle(T, cls.Evaluate(expr,
|
| Array::empty_array(),
|
| Array::empty_array()));
|
| }
|
| @@ -569,7 +588,7 @@ DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in,
|
| DART_EXPORT Dart_Handle Dart_GetObjClass(Dart_Handle object_in) {
|
| DARTSCOPE(Thread::Current());
|
| UNWRAP_AND_CHECK_PARAM(Instance, obj, object_in);
|
| - return Api::NewHandle(I, obj.GetType());
|
| + return Api::NewHandle(T, obj.GetType());
|
| }
|
|
|
|
|
| @@ -585,11 +604,12 @@ DART_EXPORT Dart_Handle Dart_GetObjClassId(Dart_Handle object_in,
|
|
|
| DART_EXPORT Dart_Handle Dart_GetClassFromId(intptr_t class_id) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| if (!I->class_table()->IsValidIndex(class_id)) {
|
| return Api::NewError("%s: %" Pd " is not a valid class id",
|
| CURRENT_FUNC, class_id);
|
| }
|
| - return Api::NewHandle(I, I->class_table()->At(class_id));
|
| + return Api::NewHandle(T, I->class_table()->At(class_id));
|
| }
|
|
|
|
|
| @@ -613,7 +633,7 @@ DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) {
|
| if (type.IsNull()) {
|
| return Dart_Null();
|
| }
|
| - return Api::NewHandle(I, type.Canonicalize());
|
| + return Api::NewHandle(T, type.Canonicalize());
|
| }
|
| // Set up the type arguments array for the super class type.
|
| const Class& super_cls = Class::Handle(cls.SuperClass());
|
| @@ -635,7 +655,7 @@ DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) {
|
| Type::New(super_cls, super_type_args_array, Scanner::kNoSourcePos));
|
| ASSERT(!instantiated_type.IsNull());
|
| instantiated_type.SetIsFinalized();
|
| - return Api::NewHandle(I, instantiated_type.Canonicalize());
|
| + return Api::NewHandle(T, instantiated_type.Canonicalize());
|
| }
|
|
|
|
|
| @@ -654,10 +674,10 @@ DART_EXPORT Dart_Handle Dart_GetClosureInfo(
|
| const Function& func = Function::Handle(Closure::function(instance));
|
| ASSERT(!func.IsNull());
|
| if (name != NULL) {
|
| - *name = Api::NewHandle(I, func.QualifiedUserVisibleName());
|
| + *name = Api::NewHandle(T, func.QualifiedUserVisibleName());
|
| }
|
| if (signature != NULL) {
|
| - *signature = Api::NewHandle(I, func.UserVisibleSignature());
|
| + *signature = Api::NewHandle(T, func.UserVisibleSignature());
|
| }
|
|
|
| if (location != NULL) {
|
| @@ -669,11 +689,11 @@ DART_EXPORT Dart_Handle Dart_GetClosureInfo(
|
| // Note func.script() is not the same as cls.script() for eval functions.
|
| const Script& script = Script::Handle(Z, func.script());
|
| ASSERT(!script.IsNull());
|
| - location->script_url = Api::NewHandle(I, script.url());
|
| + location->script_url = Api::NewHandle(T, script.url());
|
| location->library_id = lib.index();
|
| location->token_pos = func.token_pos();
|
| } else {
|
| - location->script_url = Api::NewHandle(I, String::null());
|
| + location->script_url = Api::NewHandle(T, String::null());
|
| location->library_id = -1;
|
| location->token_pos = -1;
|
| }
|
| @@ -689,13 +709,14 @@ DART_EXPORT Dart_Handle Dart_GetClassInfo(
|
| intptr_t* super_class_id,
|
| Dart_Handle* static_fields) {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| if (!I->class_table()->IsValidIndex(cls_id)) {
|
| return Api::NewError("%s: %" Pd " is not a valid class id",
|
| CURRENT_FUNC, cls_id);
|
| }
|
| Class& cls = Class::Handle(Z, I->class_table()->At(cls_id));
|
| if (class_name != NULL) {
|
| - *class_name = Api::NewHandle(I, cls.Name());
|
| + *class_name = Api::NewHandle(T, cls.Name());
|
| }
|
| if (library_id != NULL) {
|
| const Library& lib = Library::Handle(Z, cls.library());
|
| @@ -710,7 +731,7 @@ DART_EXPORT Dart_Handle Dart_GetClassInfo(
|
| }
|
| if (static_fields != NULL) {
|
| *static_fields =
|
| - Api::NewHandle(I, I->debugger()->GetStaticFields(cls));
|
| + Api::NewHandle(T, I->debugger()->GetStaticFields(cls));
|
| }
|
| return Api::Success();
|
| }
|
| @@ -732,7 +753,7 @@ DART_EXPORT Dart_Handle Dart_ScriptGetSource(
|
| CURRENT_FUNC, script_url.ToCString(),
|
| String::Handle(lib.url()).ToCString());
|
| }
|
| - return Api::NewHandle(I, script.Source());
|
| + return Api::NewHandle(T, script.Source());
|
| }
|
|
|
|
|
| @@ -755,7 +776,7 @@ DART_EXPORT Dart_Handle Dart_ScriptGetTokenInfo(
|
|
|
| const GrowableObjectArray& info =
|
| GrowableObjectArray::Handle(script.GenerateLineNumberArray());
|
| - return Api::NewHandle(I, Array::MakeArray(info));
|
| + return Api::NewHandle(T, Array::MakeArray(info));
|
| }
|
|
|
|
|
| @@ -778,7 +799,7 @@ DART_EXPORT Dart_Handle Dart_GenerateScriptSource(Dart_Handle library_url_in,
|
| library_url.ToCString());
|
| }
|
|
|
| - return Api::NewHandle(I, script.GenerateSource());
|
| + return Api::NewHandle(T, script.GenerateSource());
|
| }
|
|
|
|
|
| @@ -802,12 +823,13 @@ DART_EXPORT Dart_Handle Dart_GetScriptURLs(Dart_Handle library_url_in) {
|
| url = script.url();
|
| script_list.SetAt(i, url);
|
| }
|
| - return Api::NewHandle(I, script_list.raw());
|
| + return Api::NewHandle(T, script_list.raw());
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetLibraryIds() {
|
| DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
|
|
| const GrowableObjectArray& libs =
|
| GrowableObjectArray::Handle(Z, I->object_store()->libraries());
|
| @@ -822,7 +844,7 @@ DART_EXPORT Dart_Handle Dart_GetLibraryIds() {
|
| ASSERT(Smi::IsValid(lib.index()));
|
| library_id_list.SetAt(i, Smi::Handle(Smi::New(lib.index())));
|
| }
|
| - return Api::NewHandle(I, library_id_list.raw());
|
| + return Api::NewHandle(T, library_id_list.raw());
|
| }
|
|
|
|
|
| @@ -833,7 +855,7 @@ DART_EXPORT Dart_Handle Dart_GetLibraryFromId(intptr_t library_id) {
|
| return Api::NewError("%s: %" Pd " is not a valid library id",
|
| CURRENT_FUNC, library_id);
|
| }
|
| - return Api::NewHandle(I, lib.raw());
|
| + return Api::NewHandle(T, lib.raw());
|
| }
|
|
|
|
|
| @@ -885,7 +907,7 @@ DART_EXPORT Dart_Handle Dart_GetLibraryImports(intptr_t library_id) {
|
| import_list.Add(Smi::Handle(Smi::New(imported.index())));
|
| }
|
| }
|
| - return Api::NewHandle(I, Array::MakeArray(import_list));
|
| + return Api::NewHandle(T, Array::MakeArray(import_list));
|
| }
|
|
|
|
|
| @@ -896,7 +918,7 @@ DART_EXPORT Dart_Handle Dart_GetLibraryURL(intptr_t library_id) {
|
| return Api::NewError("%s: %" Pd " is not a valid library id",
|
| CURRENT_FUNC, library_id);
|
| }
|
| - return Api::NewHandle(I, lib.url());
|
| + return Api::NewHandle(T, lib.url());
|
| }
|
|
|
|
|
|
|