50 Dart_Handle print =
InvokeFunction(builtin_library,
"_getPrintClosure");
52 Dart_Handle internal_library = Dart_LookupLibrary(ToDart(
"dart:_internal"));
55 Dart_SetField(internal_library, ToDart(
"_printClosure"), print);
60 Dart_Handle method_name = Dart_NewStringFromCString(
"_setupHooks");
61 result = Dart_Invoke(builtin_library, method_name, 0, NULL);
65 Dart_Handle setup_hooks = Dart_NewStringFromCString(
"_setupHooks");
67 Dart_Handle io_lib = Dart_LookupLibrary(ToDart(
"dart:io"));
68 result = Dart_Invoke(io_lib, setup_hooks, 0, NULL);
71 Dart_Handle isolate_lib = Dart_LookupLibrary(ToDart(
"dart:isolate"));
72 result = Dart_Invoke(isolate_lib, setup_hooks, 0, NULL);
76static void InitDartCore(Dart_Handle builtin,
const std::string& script_uri) {
77 Dart_Handle io_lib = Dart_LookupLibrary(ToDart(
"dart:io"));
78 Dart_Handle get_base_url =
79 Dart_Invoke(io_lib, ToDart(
"_getUriBaseClosure"), 0, NULL);
80 Dart_Handle core_library = Dart_LookupLibrary(ToDart(
"dart:core"));
82 Dart_SetField(core_library, ToDart(
"_uriBaseClosure"), get_base_url);
88 bool enable_microtask_profiling) {
89 Dart_Handle schedule_microtask;
94 Dart_Handle isolate_lib = Dart_LookupLibrary(ToDart(
"dart:isolate"));
95 Dart_Handle method_name =
96 Dart_NewStringFromCString(
"_getIsolateScheduleImmediateClosure");
97 schedule_microtask = Dart_Invoke(isolate_lib, method_name, 0, NULL);
99 Dart_Handle async_library = Dart_LookupLibrary(ToDart(
"dart:async"));
100 Dart_Handle set_schedule_microtask = ToDart(
"_setScheduleImmediateClosure");
101 Dart_Handle result = Dart_Invoke(async_library, set_schedule_microtask, 1,
102 &schedule_microtask);
106 if (enable_microtask_profiling) {
107 Dart_Handle microtask_mirror_queue_type_name =
108 Dart_NewStringFromCString(
"_MicrotaskMirrorQueue");
111 Dart_Handle microtask_mirror_queue_type =
112 Dart_GetNonNullableType(async_library, microtask_mirror_queue_type_name,
117 Dart_Handle should_profile_microtasks_field_name =
118 Dart_NewStringFromCString(
"_shouldProfileMicrotasks");
121 Dart_Handle set_field_result =
122 Dart_SetField(microtask_mirror_queue_type,
123 should_profile_microtasks_field_name, Dart_True());
130 const std::string& script_uri) {
131 Dart_Handle io_lib = Dart_LookupLibrary(ToDart(
"dart:io"));
132 Dart_Handle platform_type =
133 Dart_GetNonNullableType(io_lib, ToDart(
"_Platform"), 0,
nullptr);
134 if (!script_uri.empty()) {
135 Dart_Handle result = Dart_SetField(platform_type, ToDart(
"_nativeScript"),
140 Dart_Handle locale_closure =
145 Dart_SetField(platform_type, ToDart(
"_localeClosure"), locale_closure);
150 Dart_Handle network_profiling_type =
151 Dart_GetNonNullableType(io_lib, ToDart(
"_NetworkProfiling"), 0,
nullptr);
153 result = Dart_Invoke(network_profiling_type,
154 ToDart(
"_registerServiceExtension"), 0,
nullptr);
160 bool enable_microtask_profiling,
161 const std::string& script_uri) {
162 Dart_Handle builtin = Dart_LookupLibrary(ToDart(
"dart:ui"));
165 InitDartAsync(builtin, is_ui_isolate, enable_microtask_profiling);
201 if (Dart_IsClosure(closure)) {
202 closure = Dart_ClosureFunction(closure);
206 if (!Dart_IsFunction(closure)) {
210 Dart_Handle url = Dart_Null();
211 Dart_Handle owner = Dart_FunctionOwner(closure);
212 if (Dart_IsInstance(owner)) {
213 owner = Dart_ClassLibrary(owner);
215 if (Dart_IsLibrary(owner)) {
216 url = Dart_LibraryUrl(owner);
225 if (Dart_IsClosure(closure)) {
226 closure = Dart_ClosureFunction(closure);
230 if (!Dart_IsFunction(closure)) {
234 bool is_static =
false;
235 result = Dart_FunctionIsStatic(closure, &is_static);
241 result = Dart_FunctionOwner(closure);
244 if (Dart_IsLibrary(result) || !Dart_IsInstance(result)) {