101 zx::channel directory_request,
102 bool service_isolate) {
105 if (!service_isolate) {
111 Dart_Handle builtin_lib = Dart_LookupLibrary(ToDart(
"dart:fuchsia.builtin"));
113 Dart_Handle result = Dart_SetNativeResolver(builtin_lib, BuiltinNativeLookup,
114 BuiltinNativeSymbol);
119 Dart_Handle io_lib = Dart_LookupLibrary(ToDart(
"dart:io"));
121 result = Dart_SetNativeResolver(io_lib, dart::bin::IONativeLookup,
122 dart::bin::IONativeSymbol);
127 Dart_Handle zircon_lib = Dart_LookupLibrary(ToDart(
"dart:zircon"));
133 Dart_Handle async_lib = Dart_LookupLibrary(ToDart(
"dart:async"));
136 Dart_Handle core_lib = Dart_LookupLibrary(ToDart(
"dart:core"));
139 Dart_Handle internal_lib = Dart_LookupLibrary(ToDart(
"dart:_internal"));
142 Dart_Handle isolate_lib = Dart_LookupLibrary(ToDart(
"dart:isolate"));
145#if !defined(AOT_RUNTIME)
150 result = Dart_FinalizeLoading(
false);
156 Dart_Invoke(builtin_lib, ToDart(
"_getPrintClosure"), 0,
nullptr);
159 result = Dart_SetField(internal_lib, ToDart(
"_printClosure"), print);
163 Dart_Handle schedule_immediate_closure;
164 if (service_isolate) {
166 schedule_immediate_closure = Dart_Invoke(
167 isolate_lib, ToDart(
"_getIsolateScheduleImmediateClosure"), 0,
nullptr);
170 schedule_immediate_closure = Dart_Invoke(
171 builtin_lib, ToDart(
"_getScheduleMicrotaskClosure"), 0,
nullptr);
175 Dart_Handle schedule_args[1];
176 schedule_args[0] = schedule_immediate_closure;
177 result = Dart_Invoke(async_lib, ToDart(
"_setScheduleImmediateClosure"), 1,
182 Dart_Handle namespace_type =
183 Dart_GetNonNullableType(io_lib, ToDart(
"_Namespace"), 0,
nullptr);
186 Dart_Handle namespace_args[1];
187 namespace_args[0] = ToDart(
reinterpret_cast<intptr_t
>(namespc));
189 Dart_Invoke(namespace_type, ToDart(
"_setupNamespace"), 1, namespace_args);
194 Dart_GetNonNullableType(zircon_lib, ToDart(
"_Namespace"), 0,
nullptr);
197 result = Dart_SetField(namespace_type, ToDart(
"_namespace"),
198 ToDart(
reinterpret_cast<intptr_t
>(namespc)));
202 Dart_Handle stdio_args[3];
203 stdio_args[0] = Dart_NewInteger(0);
204 stdio_args[1] = Dart_NewInteger(stdoutfd);
205 stdio_args[2] = Dart_NewInteger(stderrfd);
206 result = Dart_Invoke(io_lib, ToDart(
"_setStdioFDs"), 3, stdio_args);
210 Dart_Handle embedder_config_type =
211 Dart_GetNonNullableType(io_lib, ToDart(
"_EmbedderConfig"), 0,
nullptr);
215 Dart_SetField(embedder_config_type, ToDart(
"_mayExit"), Dart_False());
219 result = Dart_SetField(builtin_lib, ToDart(
"_rawScript"), ToDart(script_uri));
223 Dart_Handle uri_base =
224 Dart_Invoke(io_lib, ToDart(
"_getUriBaseClosure"), 0,
nullptr);
227 result = Dart_SetField(core_lib, ToDart(
"_uriBaseClosure"), uri_base);
230 Dart_Handle setup_hooks = ToDart(
"_setupHooks");
231 result = Dart_Invoke(builtin_lib, setup_hooks, 0,
nullptr);
233 result = Dart_Invoke(io_lib, setup_hooks, 0,
nullptr);
235 result = Dart_Invoke(isolate_lib, setup_hooks, 0,
nullptr);