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 "vm/class_finalizer.h" | 10 #include "vm/class_finalizer.h" |
(...skipping 1186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1197 | 1197 |
1198 DART_EXPORT bool Dart_Initialize( | 1198 DART_EXPORT bool Dart_Initialize( |
1199 Dart_IsolateCreateCallback create, | 1199 Dart_IsolateCreateCallback create, |
1200 Dart_IsolateInterruptCallback interrupt, | 1200 Dart_IsolateInterruptCallback interrupt, |
1201 Dart_IsolateUnhandledExceptionCallback unhandled, | 1201 Dart_IsolateUnhandledExceptionCallback unhandled, |
1202 Dart_IsolateShutdownCallback shutdown, | 1202 Dart_IsolateShutdownCallback shutdown, |
1203 Dart_FileOpenCallback file_open, | 1203 Dart_FileOpenCallback file_open, |
1204 Dart_FileReadCallback file_read, | 1204 Dart_FileReadCallback file_read, |
1205 Dart_FileWriteCallback file_write, | 1205 Dart_FileWriteCallback file_write, |
1206 Dart_FileCloseCallback file_close, | 1206 Dart_FileCloseCallback file_close, |
1207 Dart_EntropySource entropy_source, | 1207 Dart_EntropySource entropy_source) { |
1208 Dart_ServiceIsolateCreateCalback service_create) { | |
1209 const char* err_msg = Dart::InitOnce(create, interrupt, unhandled, shutdown, | 1208 const char* err_msg = Dart::InitOnce(create, interrupt, unhandled, shutdown, |
1210 file_open, file_read, file_write, | 1209 file_open, file_read, file_write, |
1211 file_close, entropy_source, | 1210 file_close, entropy_source); |
1212 service_create); | |
1213 if (err_msg != NULL) { | 1211 if (err_msg != NULL) { |
1214 OS::PrintErr("Dart_Initialize: %s\n", err_msg); | 1212 OS::PrintErr("Dart_Initialize: %s\n", err_msg); |
1215 return false; | 1213 return false; |
1216 } | 1214 } |
1217 return true; | 1215 return true; |
1218 } | 1216 } |
1219 | 1217 |
1220 | 1218 |
1221 DART_EXPORT bool Dart_Cleanup() { | 1219 DART_EXPORT bool Dart_Cleanup() { |
1222 CHECK_NO_ISOLATE(Isolate::Current()); | 1220 CHECK_NO_ISOLATE(Isolate::Current()); |
(...skipping 22 matching lines...) Expand all Loading... |
1245 const char* main) { | 1243 const char* main) { |
1246 if (script_uri == NULL) { | 1244 if (script_uri == NULL) { |
1247 // Just use the main as the name. | 1245 // Just use the main as the name. |
1248 if (main == NULL) { | 1246 if (main == NULL) { |
1249 return strdup("isolate"); | 1247 return strdup("isolate"); |
1250 } else { | 1248 } else { |
1251 return strdup(main); | 1249 return strdup(main); |
1252 } | 1250 } |
1253 } | 1251 } |
1254 | 1252 |
| 1253 if (Service::IsServiceIsolateName(script_uri)) { |
| 1254 return strdup(script_uri); |
| 1255 } |
| 1256 |
1255 // Skip past any slashes and backslashes in the script uri. | 1257 // Skip past any slashes and backslashes in the script uri. |
1256 const char* last_slash = strrchr(script_uri, '/'); | 1258 const char* last_slash = strrchr(script_uri, '/'); |
1257 if (last_slash != NULL) { | 1259 if (last_slash != NULL) { |
1258 script_uri = last_slash + 1; | 1260 script_uri = last_slash + 1; |
1259 } | 1261 } |
1260 const char* last_backslash = strrchr(script_uri, '\\'); | 1262 const char* last_backslash = strrchr(script_uri, '\\'); |
1261 if (last_backslash != NULL) { | 1263 if (last_backslash != NULL) { |
1262 script_uri = last_backslash + 1; | 1264 script_uri = last_backslash + 1; |
1263 } | 1265 } |
1264 if (main == NULL) { | 1266 if (main == NULL) { |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1514 ml.Wait(); | 1516 ml.Wait(); |
1515 } | 1517 } |
1516 } | 1518 } |
1517 if (isolate->object_store()->sticky_error() != Object::null()) { | 1519 if (isolate->object_store()->sticky_error() != Object::null()) { |
1518 Dart_Handle error = Api::NewHandle(isolate, | 1520 Dart_Handle error = Api::NewHandle(isolate, |
1519 isolate->object_store()->sticky_error()); | 1521 isolate->object_store()->sticky_error()); |
1520 isolate->object_store()->clear_sticky_error(); | 1522 isolate->object_store()->clear_sticky_error(); |
1521 return error; | 1523 return error; |
1522 } | 1524 } |
1523 if (FLAG_print_class_table) { | 1525 if (FLAG_print_class_table) { |
| 1526 HANDLESCOPE(isolate); |
1524 isolate->class_table()->Print(); | 1527 isolate->class_table()->Print(); |
1525 } | 1528 } |
1526 return Api::Success(); | 1529 return Api::Success(); |
1527 } | 1530 } |
1528 | 1531 |
1529 | 1532 |
1530 DART_EXPORT Dart_Handle Dart_HandleMessage() { | 1533 DART_EXPORT Dart_Handle Dart_HandleMessage() { |
1531 Isolate* isolate = Isolate::Current(); | 1534 Isolate* isolate = Isolate::Current(); |
1532 CHECK_ISOLATE_SCOPE(isolate); | 1535 CHECK_ISOLATE_SCOPE(isolate); |
1533 CHECK_CALLBACK_STATE(isolate); | 1536 CHECK_CALLBACK_STATE(isolate); |
(...skipping 3865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5399 NoGCScope no_gc; | 5402 NoGCScope no_gc; |
5400 RawObject* raw_obj = obj.raw(); | 5403 RawObject* raw_obj = obj.raw(); |
5401 isolate->heap()->SetPeer(raw_obj, peer); | 5404 isolate->heap()->SetPeer(raw_obj, peer); |
5402 } | 5405 } |
5403 return Api::Success(); | 5406 return Api::Success(); |
5404 } | 5407 } |
5405 | 5408 |
5406 | 5409 |
5407 // --- Service support --- | 5410 // --- Service support --- |
5408 | 5411 |
5409 DART_EXPORT Dart_Isolate Dart_GetServiceIsolate(void* callback_data) { | 5412 DART_EXPORT bool Dart_IsServiceIsolate(Dart_Isolate isolate) { |
5410 return Api::CastIsolate(Service::GetServiceIsolate(callback_data)); | 5413 Isolate* iso = reinterpret_cast<Isolate*>(isolate); |
| 5414 return Service::IsServiceIsolate(iso); |
5411 } | 5415 } |
5412 | 5416 |
5413 | 5417 |
5414 DART_EXPORT bool Dart_IsServiceRunning() { | 5418 DART_EXPORT Dart_Port Dart_ServiceWaitForLoadPort() { |
5415 return Service::IsRunning(); | 5419 return Service::WaitForLoadPort(); |
5416 } | 5420 } |
5417 | 5421 |
5418 | 5422 |
5419 DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( | 5423 DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( |
5420 const char* name, | 5424 const char* name, |
5421 Dart_ServiceRequestCallback callback, | 5425 Dart_ServiceRequestCallback callback, |
5422 void* user_data) { | 5426 void* user_data) { |
5423 Service::RegisterIsolateEmbedderCallback(name, callback, user_data); | 5427 Service::RegisterIsolateEmbedderCallback(name, callback, user_data); |
5424 } | 5428 } |
5425 | 5429 |
5426 | 5430 |
5427 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( | 5431 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( |
5428 const char* name, | 5432 const char* name, |
5429 Dart_ServiceRequestCallback callback, | 5433 Dart_ServiceRequestCallback callback, |
5430 void* user_data) { | 5434 void* user_data) { |
5431 Service::RegisterRootEmbedderCallback(name, callback, user_data); | 5435 Service::RegisterRootEmbedderCallback(name, callback, user_data); |
5432 } | 5436 } |
5433 | 5437 |
5434 } // namespace dart | 5438 } // namespace dart |
OLD | NEW |