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 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1280 intptr_t len = OS::SNPrint(NULL, 0, "%s$%s", script_uri, main) + 1; | 1280 intptr_t len = OS::SNPrint(NULL, 0, "%s$%s", script_uri, main) + 1; |
1281 chars = reinterpret_cast<char*>(malloc(len)); | 1281 chars = reinterpret_cast<char*>(malloc(len)); |
1282 OS::SNPrint(chars, len, "%s$%s", script_uri, main); | 1282 OS::SNPrint(chars, len, "%s$%s", script_uri, main); |
1283 return chars; | 1283 return chars; |
1284 } | 1284 } |
1285 | 1285 |
1286 | 1286 |
1287 DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri, | 1287 DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri, |
1288 const char* main, | 1288 const char* main, |
1289 const uint8_t* snapshot, | 1289 const uint8_t* snapshot, |
| 1290 Dart_IsolateFlags* flags, |
1290 void* callback_data, | 1291 void* callback_data, |
1291 char** error) { | 1292 char** error) { |
1292 CHECK_NO_ISOLATE(Isolate::Current()); | 1293 CHECK_NO_ISOLATE(Isolate::Current()); |
1293 char* isolate_name = BuildIsolateName(script_uri, main); | 1294 char* isolate_name = BuildIsolateName(script_uri, main); |
1294 Thread::EnsureInit(); | 1295 Thread::EnsureInit(); |
1295 Isolate* isolate = Dart::CreateIsolate(isolate_name); | 1296 |
| 1297 // Setup default flags in case none were passed. |
| 1298 Dart_IsolateFlags api_flags; |
| 1299 if (flags == NULL) { |
| 1300 Isolate::Flags vm_flags; |
| 1301 vm_flags.CopyTo(&api_flags); |
| 1302 flags = &api_flags; |
| 1303 } |
| 1304 Isolate* isolate = Dart::CreateIsolate(isolate_name, *flags); |
1296 free(isolate_name); | 1305 free(isolate_name); |
1297 StackZone zone(isolate); | 1306 StackZone zone(isolate); |
1298 HANDLESCOPE(isolate); | 1307 HANDLESCOPE(isolate); |
1299 // We enter an API scope here as InitializeIsolate could compile some | 1308 // We enter an API scope here as InitializeIsolate could compile some |
1300 // bootstrap library files which call out to a tag handler that may create | 1309 // bootstrap library files which call out to a tag handler that may create |
1301 // Api Handles when an error is encountered. | 1310 // Api Handles when an error is encountered. |
1302 Dart_EnterScope(); | 1311 Dart_EnterScope(); |
1303 const Error& error_obj = | 1312 const Error& error_obj = |
1304 Error::Handle(isolate, Dart::InitializeIsolate(snapshot, callback_data)); | 1313 Error::Handle(isolate, Dart::InitializeIsolate(snapshot, callback_data)); |
1305 if (error_obj.IsNull()) { | 1314 if (error_obj.IsNull()) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1398 profiler_data->Unblock(); | 1407 profiler_data->Unblock(); |
1399 } | 1408 } |
1400 | 1409 |
1401 | 1410 |
1402 DART_EXPORT void Dart_ExitIsolate() { | 1411 DART_EXPORT void Dart_ExitIsolate() { |
1403 CHECK_ISOLATE(Isolate::Current()); | 1412 CHECK_ISOLATE(Isolate::Current()); |
1404 Thread::ExitIsolate(); | 1413 Thread::ExitIsolate(); |
1405 } | 1414 } |
1406 | 1415 |
1407 | 1416 |
| 1417 // TODO(iposva): Remove this API and instead expose the underlying flags. |
1408 DART_EXPORT Dart_Handle Dart_IsolateSetStrictCompilation(bool value) { | 1418 DART_EXPORT Dart_Handle Dart_IsolateSetStrictCompilation(bool value) { |
1409 CHECK_ISOLATE(Isolate::Current()); | 1419 CHECK_ISOLATE(Isolate::Current()); |
1410 Isolate* isolate = Isolate::Current(); | 1420 Isolate* isolate = Isolate::Current(); |
1411 if (isolate->has_compiled()) { | 1421 if (isolate->has_compiled()) { |
1412 return Api::NewError( | 1422 return Api::NewError( |
1413 "%s expects that the isolate has not yet compiled code.", CURRENT_FUNC); | 1423 "%s expects that the isolate has not yet compiled code.", CURRENT_FUNC); |
1414 } | 1424 } |
1415 Isolate::Current()->set_strict_compilation(value); | 1425 if (!value) { |
| 1426 return Api::NewError( |
| 1427 "%s expects that the value is set to true only.", CURRENT_FUNC); |
| 1428 } |
| 1429 Isolate::Current()->set_strict_compilation(); |
1416 return Api::Null(); | 1430 return Api::Null(); |
1417 } | 1431 } |
1418 | 1432 |
1419 | 1433 |
1420 static uint8_t* ApiReallocate(uint8_t* ptr, | 1434 static uint8_t* ApiReallocate(uint8_t* ptr, |
1421 intptr_t old_size, | 1435 intptr_t old_size, |
1422 intptr_t new_size) { | 1436 intptr_t new_size) { |
1423 return Api::TopScope(Isolate::Current())->zone()->Realloc<uint8_t>( | 1437 return Api::TopScope(Isolate::Current())->zone()->Realloc<uint8_t>( |
1424 ptr, old_size, new_size); | 1438 ptr, old_size, new_size); |
1425 } | 1439 } |
(...skipping 2566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3992 Dart_Handle name, | 4006 Dart_Handle name, |
3993 int number_of_arguments, | 4007 int number_of_arguments, |
3994 Dart_Handle* arguments) { | 4008 Dart_Handle* arguments) { |
3995 Isolate* isolate = Isolate::Current(); | 4009 Isolate* isolate = Isolate::Current(); |
3996 DARTSCOPE(isolate); | 4010 DARTSCOPE(isolate); |
3997 CHECK_CALLBACK_STATE(isolate); | 4011 CHECK_CALLBACK_STATE(isolate); |
3998 // TODO(turnidge): This is a bit simplistic. It overcounts when | 4012 // TODO(turnidge): This is a bit simplistic. It overcounts when |
3999 // other operations (gc, compilation) are active. | 4013 // other operations (gc, compilation) are active. |
4000 TIMERSCOPE(isolate, time_dart_execution); | 4014 TIMERSCOPE(isolate, time_dart_execution); |
4001 | 4015 |
4002 isolate->set_has_compiled(true); | |
4003 | |
4004 const String& function_name = Api::UnwrapStringHandle(isolate, name); | 4016 const String& function_name = Api::UnwrapStringHandle(isolate, name); |
4005 if (function_name.IsNull()) { | 4017 if (function_name.IsNull()) { |
4006 RETURN_TYPE_ERROR(isolate, name, String); | 4018 RETURN_TYPE_ERROR(isolate, name, String); |
4007 } | 4019 } |
4008 if (number_of_arguments < 0) { | 4020 if (number_of_arguments < 0) { |
4009 return Api::NewError( | 4021 return Api::NewError( |
4010 "%s expects argument 'number_of_arguments' to be non-negative.", | 4022 "%s expects argument 'number_of_arguments' to be non-negative.", |
4011 CURRENT_FUNC); | 4023 CURRENT_FUNC); |
4012 } | 4024 } |
4013 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(target)); | 4025 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(target)); |
(...skipping 1567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5581 | 5593 |
5582 | 5594 |
5583 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( | 5595 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( |
5584 const char* name, | 5596 const char* name, |
5585 Dart_ServiceRequestCallback callback, | 5597 Dart_ServiceRequestCallback callback, |
5586 void* user_data) { | 5598 void* user_data) { |
5587 Service::RegisterRootEmbedderCallback(name, callback, user_data); | 5599 Service::RegisterRootEmbedderCallback(name, callback, user_data); |
5588 } | 5600 } |
5589 | 5601 |
5590 } // namespace dart | 5602 } // namespace dart |
OLD | NEW |