Skip to content

Commit 60d523f

Browse files
Enabled isolate callback data to work
1 parent de64023 commit 60d523f

File tree

4 files changed

+49
-11
lines changed

4 files changed

+49
-11
lines changed

src/dart_dll.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,17 +146,22 @@ bool DartDll_Initialize(const DartDllConfig& config) {
146146
}
147147

148148
Dart_Isolate DartDll_LoadScript(const char* script_uri,
149-
const char* package_config) {
149+
const char* package_config,
150+
void* callbackPtr) {
150151
Dart_IsolateFlags isolate_flags;
151152
Dart_IsolateFlagsInitialize(&isolate_flags);
152153

153154
char* error = nullptr;
154155
Dart_Isolate isolate = CreateIsolate(true, script_uri, "main", package_config,
155-
&isolate_flags, nullptr, &error);
156+
&isolate_flags, callbackPtr, &error);
156157

157158
return isolate;
158159
}
159160

161+
void* DartDll_GetCallbackData(void* isolate_group_data) {
162+
return GetCallbackData(isolate_group_data);
163+
}
164+
160165
Dart_Handle DartDll_RunMain(Dart_Handle library) {
161166
Dart_Handle mainClosure =
162167
Dart_GetField(library, Dart_NewStringFromCString("main"));
@@ -175,7 +180,7 @@ Dart_Handle DartDll_RunMain(Dart_Handle library) {
175180
Dart_Invoke(isolateLib, Dart_NewStringFromCString("_startMainIsolate"),
176181
kNumIsolateArgs, isolateArgs);
177182
if (Dart_IsError(result)) {
178-
std::cout << "Dart initialized, error was: " << Dart_GetError(result)
183+
std::cout << "Dart initialized, error was: " << Dart_GetError(result) << "\n"
179184
<< std::endl;
180185
return result;
181186
}

src/dart_dll.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ DART_DLL_EXPORT bool DartDll_Initialize(const DartDllConfig& config);
3333
// Load a script, with an optional package configuration location. The package
3434
// configuration is usually in ".dart_tool/package_config.json".
3535
DART_DLL_EXPORT Dart_Isolate DartDll_LoadScript(const char* script_uri,
36-
const char* package_config);
36+
const char* package_config,
37+
void* callbackPtr = nullptr);
38+
39+
// Gets the pointer provided in DartDll_LoadScript after calling Dart_CurrentIsolateData
40+
DART_DLL_EXPORT void* DartDll_GetCallbackData(void* isolate_group_data);
3741

3842
// Run "main" from the supplied library, usually one you got from
3943
// Dart_RootLibrary()

src/isolate_setup.cpp

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@ extern const uint8_t kDartCoreIsolateSnapshotData[];
1717
extern const uint8_t kDartCoreIsolateSnapshotInstructions[];
1818
}
1919

20+
namespace {
21+
class DllIsolateGroupData : public IsolateGroupData {
22+
public:
23+
DllIsolateGroupData(const char* url,
24+
const char* packages_file,
25+
AppSnapshot* app_snapshot,
26+
bool isolate_run_app_snapshot)
27+
: IsolateGroupData(url, packages_file, app_snapshot, isolate_run_app_snapshot) {
28+
}
29+
30+
void* callback_data = {};
31+
};
32+
}
2033
Dart_Handle SetupCoreLibraries(Dart_Isolate isolate,
2134
IsolateData* isolate_data,
2235
bool is_isolate_group_start,
@@ -63,8 +76,8 @@ Dart_Isolate CreateKernelIsolate(const char* script_uri,
6376
intptr_t kernel_service_buffer_size = 0;
6477
dfe.LoadKernelService(&kernel_service_buffer, &kernel_service_buffer_size);
6578

66-
IsolateGroupData* isolate_group_data =
67-
new IsolateGroupData(uri, package_config, nullptr, false);
79+
DllIsolateGroupData* isolate_group_data =
80+
new DllIsolateGroupData(uri, package_config, nullptr, false);
6881
isolate_group_data->SetKernelBufferUnowned(
6982
const_cast<uint8_t*>(kernel_service_buffer), kernel_service_buffer_size);
7083
IsolateData* isolate_data = new IsolateData(isolate_group_data);
@@ -102,8 +115,8 @@ Dart_Isolate CreateVmServiceIsolate(const char* script_uri,
102115
void* callback_data,
103116
int service_port,
104117
char** error) {
105-
IsolateGroupData* isolate_group_data =
106-
new IsolateGroupData(script_uri, package_config, nullptr, false);
118+
DllIsolateGroupData* isolate_group_data =
119+
new DllIsolateGroupData(script_uri, package_config, nullptr, false);
107120
IsolateData* isolate_data = new IsolateData(isolate_group_data);
108121

109122
flags->load_vmservice_library = true;
@@ -147,10 +160,11 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
147160
dfe.ReadScript(script_uri, &kernel_buffer, &kernel_buffer_size);
148161
flags->null_safety = true;
149162

150-
IsolateGroupData* isolate_group_data =
151-
new IsolateGroupData(script_uri, packages_config, nullptr, false);
163+
DllIsolateGroupData* isolate_group_data =
164+
new DllIsolateGroupData(script_uri, packages_config, nullptr, false);
152165
isolate_group_data->SetKernelBufferNewlyOwned(kernel_buffer,
153166
kernel_buffer_size);
167+
isolate_group_data->callback_data = callback_data;
154168

155169
const uint8_t* platform_kernel_buffer = nullptr;
156170
intptr_t platform_kernel_buffer_size = 0;
@@ -243,3 +257,16 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
243257

244258
return isolate;
245259
}
260+
261+
void* GetCallbackData(void* isolate_data) {
262+
if (isolate_data == nullptr) {
263+
return nullptr;
264+
}
265+
IsolateGroupData* isolate_group_data = static_cast<IsolateData*>(isolate_data)->isolate_group_data();
266+
267+
if (isolate_group_data == nullptr) {
268+
return nullptr;
269+
}
270+
void* callback_data = static_cast<DllIsolateGroupData*>(isolate_group_data)->callback_data;
271+
return callback_data;
272+
}

src/isolate_setup.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
2525
const char* packages_config,
2626
Dart_IsolateFlags* flags,
2727
void* callback_data,
28-
char** error);
28+
char** error);
29+
30+
void* GetCallbackData(void* isolate_group_data);

0 commit comments

Comments
 (0)