Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Static Public Member Functions | List of all members
dart::bin::Loader Class Reference

#include <loader.h>

Static Public Member Functions

static Dart_Handle InitForSnapshot (const char *snapshot_uri, IsolateData *isolate_data)
 
static Dart_Handle LibraryTagHandler (Dart_LibraryTag tag, Dart_Handle library, Dart_Handle url)
 
static Dart_Handle DeferredLoadHandler (intptr_t loading_unit_id)
 
static void InitOnce ()
 

Detailed Description

Definition at line 18 of file loader.h.

Member Function Documentation

◆ DeferredLoadHandler()

Dart_Handle dart::bin::Loader::DeferredLoadHandler ( intptr_t  loading_unit_id)
static

Definition at line 131 of file loader.cc.

131 {
132 // A synchronous implementation. An asynchronous implementation would be
133 // better, but the standalone embedder only implements AOT for testing.
134
135 auto isolate_group_data =
136 reinterpret_cast<IsolateGroupData*>(Dart_CurrentIsolateGroupData());
137 char* unit_url = Utils::SCreate(
138 "%s-%" Pd ".part.so", isolate_group_data->script_url, loading_unit_id);
139
140 AppSnapshot* loading_unit_snapshot = Snapshot::TryReadAppSnapshot(unit_url);
142 if (loading_unit_snapshot != nullptr) {
143 isolate_group_data->AddLoadingUnit(loading_unit_snapshot);
144 const uint8_t* isolate_snapshot_data = nullptr;
145 const uint8_t* isolate_snapshot_instructions = nullptr;
146 const uint8_t* ignore_vm_snapshot_data;
147 const uint8_t* ignore_vm_snapshot_instructions;
148 loading_unit_snapshot->SetBuffers(
149 &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions,
153 if (Dart_IsApiError(result)) {
154 result =
156 /*transient*/ false);
157 }
158 } else {
159 char* error_message = Utils::SCreate("Failed to load %s", unit_url);
160 result = Dart_DeferredLoadCompleteError(loading_unit_id, error_message,
161 /*transient*/ false);
162 free(error_message);
163 }
164
165 free(unit_url);
166 return result;
167}
static char * SCreate(const char *format,...) PRINTF_ATTRIBUTE(1
Definition utils.cc:231
static AppSnapshot * TryReadAppSnapshot(const char *script_uri, bool force_load_elf_from_memory=false, bool decode_uri=true)
struct _Dart_Handle * Dart_Handle
Definition dart_api.h:258
GAsyncResult * result
const uint8_t * isolate_snapshot_data
const uint8_t * isolate_snapshot_instructions
DART_EXPORT const char * Dart_GetError(Dart_Handle handle)
DART_EXPORT Dart_Handle Dart_DeferredLoadCompleteError(intptr_t loading_unit_id, const char *error_message, bool transient)
DART_EXPORT void * Dart_CurrentIsolateGroupData()
DART_EXPORT Dart_Handle Dart_DeferredLoadComplete(intptr_t loading_unit_id, const uint8_t *snapshot_data, const uint8_t *snapshot_instructions)
DART_EXPORT bool Dart_IsApiError(Dart_Handle object)
#define Pd
Definition globals.h:408

◆ InitForSnapshot()

Dart_Handle dart::bin::Loader::InitForSnapshot ( const char *  snapshot_uri,
IsolateData isolate_data 
)
static

Definition at line 26 of file loader.cc.

27 {
28 ASSERT(isolate_data != nullptr);
29
30 return Loader::Init(isolate_data->packages_file(),
32}
static const char * original_working_directory
Definition dartutils.h:288
#define ASSERT(E)

◆ InitOnce()

void dart::bin::Loader::InitOnce ( )
static

Definition at line 169 of file loader.cc.

169{}

◆ LibraryTagHandler()

Dart_Handle dart::bin::Loader::LibraryTagHandler ( Dart_LibraryTag  tag,
Dart_Handle  library,
Dart_Handle  url 
)
static

Definition at line 67 of file loader.cc.

69 {
70 const char* url_string = nullptr;
71 Dart_Handle result = Dart_StringToCString(url, &url_string);
72 if (Dart_IsError(result)) {
73 return result;
74 }
75 if (tag == Dart_kCanonicalizeUrl) {
76 Dart_Handle library_url = Dart_LibraryUrl(library);
77 if (Dart_IsError(library_url)) {
78 return library_url;
79 }
80 const char* library_url_string = nullptr;
81 result = Dart_StringToCString(library_url, &library_url_string);
82 if (Dart_IsError(result)) {
83 return result;
84 }
85 bool is_dart_scheme_url = DartUtils::IsDartSchemeURL(url_string);
86 bool is_dart_library = DartUtils::IsDartSchemeURL(library_url_string);
87 if (is_dart_scheme_url || is_dart_library) {
88 return url;
89 }
90 return Dart_DefaultCanonicalizeUrl(library_url, url);
91 }
92#if !defined(DART_PRECOMPILED_RUNTIME)
93 if (tag == Dart_kKernelTag) {
94 uint8_t* kernel_buffer = nullptr;
95 intptr_t kernel_buffer_size = 0;
96 if (!dfe.TryReadKernelFile(url_string, nullptr, &kernel_buffer,
97 &kernel_buffer_size)) {
98 return DartUtils::NewError("'%s' is not a kernel file", url_string);
99 }
100 return WrapMallocedKernelBuffer(kernel_buffer, kernel_buffer_size);
101 }
103 (tag == Dart_kImportTag)) {
104 // E.g., IsolateMirror.loadUri.
105 char* error = nullptr;
106 int exit_code = 0;
107 uint8_t* kernel_buffer = nullptr;
108 intptr_t kernel_buffer_size = -1;
109 dfe.CompileAndReadScript(url_string, &kernel_buffer, &kernel_buffer_size,
110 &error, &exit_code, nullptr,
111 /*for_snapshot=*/false, /*embed_sources=*/true);
112 if (exit_code == 0) {
113 return Dart_LoadLibrary(
114 WrapMallocedKernelBuffer(kernel_buffer, kernel_buffer_size));
115 } else if (exit_code == kCompilationErrorExitCode) {
117 free(error);
118 return result;
119 } else {
121 free(error);
122 return result;
123 }
124 }
125 return DartUtils::NewError("Invalid tag : %d '%s'", tag, url_string);
126#else // !defined(DART_PRECOMPILED_RUNTIME)
127 return DartUtils::NewError("Unimplemented tag : %d '%s'", tag, url_string);
128#endif // !defined(DART_PRECOMPILED_RUNTIME)
129}
bool TryReadKernelFile(const char *script_uri, const AppSnapshot *app_snapshot, uint8_t **kernel_buffer, intptr_t *kernel_buffer_size, bool decode_uri=true, std::shared_ptr< uint8_t > *kernel_blob_ptr=nullptr)
Definition dfe.cc:437
void CompileAndReadScript(const char *script_uri, uint8_t **kernel_buffer, intptr_t *kernel_buffer_size, char **error, int *exit_code, const char *package_config, bool for_snapshot, bool embed_sources)
Definition dfe.cc:204
bool CanUseDartFrontend() const
Definition dfe.cc:143
bool UseDartFrontend() const
Definition dfe.h:42
static Dart_Handle NewError(const char *format,...)
Definition dartutils.cc:770
static bool IsDartSchemeURL(const char *url_name)
Definition dartutils.cc:219
@ Dart_kImportTag
Definition dart_api.h:3341
@ Dart_kCanonicalizeUrl
Definition dart_api.h:3340
@ Dart_kKernelTag
Definition dart_api.h:3342
const uint8_t uint32_t uint32_t GError ** error
constexpr int kCompilationErrorExitCode
Definition error_exit.h:16
DFE dfe
Definition dfe.cc:59
static Dart_Handle WrapMallocedKernelBuffer(uint8_t *kernel_buffer, intptr_t kernel_buffer_size)
Definition loader.cc:55
DART_EXPORT bool Dart_IsError(Dart_Handle handle)
DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle kernel_buffer)
DART_EXPORT Dart_Handle Dart_NewApiError(const char *error)
DART_EXPORT Dart_Handle Dart_NewCompilationError(const char *error)
DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url, Dart_Handle url)
DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library)
DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object, const char **cstr)

The documentation for this class was generated from the following files: