| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 #include "include/dart_mirrors_api.h" | 6 #include "include/dart_mirrors_api.h" |
| 7 #include "include/dart_native_api.h" | 7 #include "include/dart_native_api.h" |
| 8 | 8 |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "lib/stacktrace.h" | 10 #include "lib/stacktrace.h" |
| (...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 } | 1252 } |
| 1253 | 1253 |
| 1254 char* chars = NULL; | 1254 char* chars = NULL; |
| 1255 intptr_t len = OS::SNPrint(NULL, 0, "%s$%s", script_uri, main) + 1; | 1255 intptr_t len = OS::SNPrint(NULL, 0, "%s$%s", script_uri, main) + 1; |
| 1256 chars = reinterpret_cast<char*>(malloc(len)); | 1256 chars = reinterpret_cast<char*>(malloc(len)); |
| 1257 OS::SNPrint(chars, len, "%s$%s", script_uri, main); | 1257 OS::SNPrint(chars, len, "%s$%s", script_uri, main); |
| 1258 return chars; | 1258 return chars; |
| 1259 } | 1259 } |
| 1260 | 1260 |
| 1261 | 1261 |
| 1262 DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri, | 1262 static Dart_Isolate CreateIsolate(const char* script_uri, |
| 1263 const char* main, | 1263 const char* main, |
| 1264 const uint8_t* snapshot, | 1264 const uint8_t* snapshot_buffer, |
| 1265 Dart_IsolateFlags* flags, | 1265 intptr_t snapshot_length, |
| 1266 void* callback_data, | 1266 bool from_kernel, |
| 1267 char** error) { | 1267 Dart_IsolateFlags* flags, |
| 1268 void* callback_data, |
| 1269 char** error) { |
| 1270 ASSERT(!from_kernel || (snapshot_buffer != NULL)); |
| 1268 CHECK_NO_ISOLATE(Isolate::Current()); | 1271 CHECK_NO_ISOLATE(Isolate::Current()); |
| 1269 char* isolate_name = BuildIsolateName(script_uri, main); | 1272 char* isolate_name = BuildIsolateName(script_uri, main); |
| 1270 | 1273 |
| 1271 // Setup default flags in case none were passed. | 1274 // Setup default flags in case none were passed. |
| 1272 Dart_IsolateFlags api_flags; | 1275 Dart_IsolateFlags api_flags; |
| 1273 if (flags == NULL) { | 1276 if (flags == NULL) { |
| 1274 Isolate::FlagsInitialize(&api_flags); | 1277 Isolate::FlagsInitialize(&api_flags); |
| 1275 flags = &api_flags; | 1278 flags = &api_flags; |
| 1276 } | 1279 } |
| 1277 Isolate* I = Dart::CreateIsolate(isolate_name, *flags); | 1280 Isolate* I = Dart::CreateIsolate(isolate_name, *flags); |
| 1278 free(isolate_name); | 1281 free(isolate_name); |
| 1279 if (I == NULL) { | 1282 if (I == NULL) { |
| 1280 *error = strdup("Isolate creation failed"); | 1283 *error = strdup("Isolate creation failed"); |
| 1281 return reinterpret_cast<Dart_Isolate>(NULL); | 1284 return reinterpret_cast<Dart_Isolate>(NULL); |
| 1282 } | 1285 } |
| 1283 { | 1286 { |
| 1284 Thread* T = Thread::Current(); | 1287 Thread* T = Thread::Current(); |
| 1285 StackZone zone(T); | 1288 StackZone zone(T); |
| 1286 HANDLESCOPE(T); | 1289 HANDLESCOPE(T); |
| 1287 // We enter an API scope here as InitializeIsolate could compile some | 1290 // We enter an API scope here as InitializeIsolate could compile some |
| 1288 // bootstrap library files which call out to a tag handler that may create | 1291 // bootstrap library files which call out to a tag handler that may create |
| 1289 // Api Handles when an error is encountered. | 1292 // Api Handles when an error is encountered. |
| 1290 Dart_EnterScope(); | 1293 Dart_EnterScope(); |
| 1291 const Error& error_obj = | 1294 const Error& error_obj = Error::Handle( |
| 1292 Error::Handle(Z, Dart::InitializeIsolate(snapshot, callback_data)); | 1295 Z, Dart::InitializeIsolate(snapshot_buffer, snapshot_length, |
| 1296 from_kernel, callback_data)); |
| 1293 if (error_obj.IsNull()) { | 1297 if (error_obj.IsNull()) { |
| 1294 #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT) | 1298 #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT) |
| 1295 if (FLAG_check_function_fingerprints) { | 1299 if (FLAG_check_function_fingerprints && !from_kernel) { |
| 1296 Library::CheckFunctionFingerprints(); | 1300 Library::CheckFunctionFingerprints(); |
| 1297 } | 1301 } |
| 1298 #endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT). | 1302 #endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT). |
| 1299 // We exit the API scope entered above. | 1303 // We exit the API scope entered above. |
| 1300 Dart_ExitScope(); | 1304 Dart_ExitScope(); |
| 1301 // A Thread structure has been associated to the thread, we do the | 1305 // A Thread structure has been associated to the thread, we do the |
| 1302 // safepoint transition explicity here instead of using the | 1306 // safepoint transition explicity here instead of using the |
| 1303 // TransitionXXX scope objects as the reverse transition happens | 1307 // TransitionXXX scope objects as the reverse transition happens |
| 1304 // outside this scope in Dart_ShutdownIsolate/Dart_ExitIsolate. | 1308 // outside this scope in Dart_ShutdownIsolate/Dart_ExitIsolate. |
| 1305 T->set_execution_state(Thread::kThreadInNative); | 1309 T->set_execution_state(Thread::kThreadInNative); |
| 1306 T->EnterSafepoint(); | 1310 T->EnterSafepoint(); |
| 1307 return Api::CastIsolate(I); | 1311 return Api::CastIsolate(I); |
| 1308 } | 1312 } |
| 1309 *error = strdup(error_obj.ToErrorCString()); | 1313 *error = strdup(error_obj.ToErrorCString()); |
| 1310 // We exit the API scope entered above. | 1314 // We exit the API scope entered above. |
| 1311 Dart_ExitScope(); | 1315 Dart_ExitScope(); |
| 1312 } | 1316 } |
| 1313 Dart::ShutdownIsolate(); | 1317 Dart::ShutdownIsolate(); |
| 1314 return reinterpret_cast<Dart_Isolate>(NULL); | 1318 return reinterpret_cast<Dart_Isolate>(NULL); |
| 1315 } | 1319 } |
| 1316 | 1320 |
| 1317 | 1321 |
| 1322 DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri, |
| 1323 const char* main, |
| 1324 const uint8_t* snapshot_buffer, |
| 1325 Dart_IsolateFlags* flags, |
| 1326 void* callback_data, |
| 1327 char** error) { |
| 1328 return CreateIsolate(script_uri, main, snapshot_buffer, -1, false, flags, |
| 1329 callback_data, error); |
| 1330 } |
| 1331 |
| 1332 |
| 1333 DART_EXPORT Dart_Isolate Dart_CreateIsolateFromKernel( |
| 1334 const char* script_uri, |
| 1335 const char* main, |
| 1336 const uint8_t* kernel_file, |
| 1337 intptr_t kernel_length, |
| 1338 Dart_IsolateFlags* flags, |
| 1339 void* callback_data, |
| 1340 char** error) { |
| 1341 return CreateIsolate(script_uri, main, kernel_file, kernel_length, true, |
| 1342 flags, callback_data, error); |
| 1343 } |
| 1344 |
| 1345 |
| 1318 DART_EXPORT void Dart_ShutdownIsolate() { | 1346 DART_EXPORT void Dart_ShutdownIsolate() { |
| 1319 Thread* T = Thread::Current(); | 1347 Thread* T = Thread::Current(); |
| 1320 Isolate* I = T->isolate(); | 1348 Isolate* I = T->isolate(); |
| 1321 CHECK_ISOLATE(I); | 1349 CHECK_ISOLATE(I); |
| 1322 I->WaitForOutstandingSpawns(); | 1350 I->WaitForOutstandingSpawns(); |
| 1323 { | 1351 { |
| 1324 StackZone zone(T); | 1352 StackZone zone(T); |
| 1325 HandleScope handle_scope(T); | 1353 HandleScope handle_scope(T); |
| 1326 Dart::RunShutdownCallback(); | 1354 Dart::RunShutdownCallback(); |
| 1327 // The Thread structure is disassociated from the isolate, we do the | 1355 // The Thread structure is disassociated from the isolate, we do the |
| (...skipping 5307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6635 | 6663 |
| 6636 DART_EXPORT bool Dart_IsPrecompiledRuntime() { | 6664 DART_EXPORT bool Dart_IsPrecompiledRuntime() { |
| 6637 #if defined(DART_PRECOMPILED_RUNTIME) | 6665 #if defined(DART_PRECOMPILED_RUNTIME) |
| 6638 return true; | 6666 return true; |
| 6639 #else | 6667 #else |
| 6640 return false; | 6668 return false; |
| 6641 #endif | 6669 #endif |
| 6642 } | 6670 } |
| 6643 | 6671 |
| 6644 } // namespace dart | 6672 } // namespace dart |
| OLD | NEW |