| 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 1445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1456 | 1456 |
| 1457 DART_EXPORT Dart_Handle Dart_CreateSnapshot( | 1457 DART_EXPORT Dart_Handle Dart_CreateSnapshot( |
| 1458 uint8_t** vm_isolate_snapshot_buffer, | 1458 uint8_t** vm_isolate_snapshot_buffer, |
| 1459 intptr_t* vm_isolate_snapshot_size, | 1459 intptr_t* vm_isolate_snapshot_size, |
| 1460 uint8_t** isolate_snapshot_buffer, | 1460 uint8_t** isolate_snapshot_buffer, |
| 1461 intptr_t* isolate_snapshot_size) { | 1461 intptr_t* isolate_snapshot_size) { |
| 1462 DARTSCOPE(Thread::Current()); | 1462 DARTSCOPE(Thread::Current()); |
| 1463 API_TIMELINE_DURATION; | 1463 API_TIMELINE_DURATION; |
| 1464 Isolate* I = T->isolate(); | 1464 Isolate* I = T->isolate(); |
| 1465 if (!FLAG_load_deferred_eagerly) { | 1465 if (!FLAG_load_deferred_eagerly) { |
| 1466 return Dart_NewApiError( | 1466 return Api::NewError( |
| 1467 "Creating full snapshots requires --load_deferred_eagerly"); | 1467 "Creating full snapshots requires --load_deferred_eagerly"); |
| 1468 } | 1468 } |
| 1469 if (vm_isolate_snapshot_buffer != NULL && | 1469 if (vm_isolate_snapshot_buffer != NULL && |
| 1470 vm_isolate_snapshot_size == NULL) { | 1470 vm_isolate_snapshot_size == NULL) { |
| 1471 RETURN_NULL_ERROR(vm_isolate_snapshot_size); | 1471 RETURN_NULL_ERROR(vm_isolate_snapshot_size); |
| 1472 } | 1472 } |
| 1473 if (isolate_snapshot_buffer == NULL) { | 1473 if (isolate_snapshot_buffer == NULL) { |
| 1474 RETURN_NULL_ERROR(isolate_snapshot_buffer); | 1474 RETURN_NULL_ERROR(isolate_snapshot_buffer); |
| 1475 } | 1475 } |
| 1476 if (isolate_snapshot_size == NULL) { | 1476 if (isolate_snapshot_size == NULL) { |
| (...skipping 4647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6124 intptr_t* rodata_blob_size) { | 6124 intptr_t* rodata_blob_size) { |
| 6125 UNREACHABLE(); | 6125 UNREACHABLE(); |
| 6126 return 0; | 6126 return 0; |
| 6127 } | 6127 } |
| 6128 | 6128 |
| 6129 #else // DART_PRECOMPILER | 6129 #else // DART_PRECOMPILER |
| 6130 | 6130 |
| 6131 DART_EXPORT Dart_Handle Dart_Precompile( | 6131 DART_EXPORT Dart_Handle Dart_Precompile( |
| 6132 Dart_QualifiedFunctionName entry_points[], | 6132 Dart_QualifiedFunctionName entry_points[], |
| 6133 bool reset_fields) { | 6133 bool reset_fields) { |
| 6134 #if defined(TARGET_ARCH_IA32) |
| 6135 return Api::NewError("Precompilation is not supported on IA32."); |
| 6136 #else |
| 6134 API_TIMELINE_BEGIN_END; | 6137 API_TIMELINE_BEGIN_END; |
| 6135 DARTSCOPE(Thread::Current()); | 6138 DARTSCOPE(Thread::Current()); |
| 6136 if (!FLAG_precompiled_mode) { | 6139 if (!FLAG_precompiled_mode) { |
| 6137 return Dart_NewApiError("Flag --precompilation was not specified."); | 6140 return Api::NewError("Flag --precompilation was not specified."); |
| 6138 } | 6141 } |
| 6139 Dart_Handle result = Api::CheckAndFinalizePendingClasses(T); | 6142 Dart_Handle result = Api::CheckAndFinalizePendingClasses(T); |
| 6140 if (::Dart_IsError(result)) { | 6143 if (::Dart_IsError(result)) { |
| 6141 return result; | 6144 return result; |
| 6142 } | 6145 } |
| 6143 CHECK_CALLBACK_STATE(T); | 6146 CHECK_CALLBACK_STATE(T); |
| 6144 const Error& error = Error::Handle(Precompiler::CompileAll(entry_points, | 6147 const Error& error = Error::Handle(Precompiler::CompileAll(entry_points, |
| 6145 reset_fields)); | 6148 reset_fields)); |
| 6146 if (!error.IsNull()) { | 6149 if (!error.IsNull()) { |
| 6147 return Api::NewHandle(T, error.raw()); | 6150 return Api::NewHandle(T, error.raw()); |
| 6148 } | 6151 } |
| 6149 return Api::Success(); | 6152 return Api::Success(); |
| 6153 #endif |
| 6150 } | 6154 } |
| 6151 | 6155 |
| 6152 | 6156 |
| 6153 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshotAssembly( | 6157 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshotAssembly( |
| 6154 uint8_t** vm_isolate_snapshot_buffer, | 6158 uint8_t** vm_isolate_snapshot_buffer, |
| 6155 intptr_t* vm_isolate_snapshot_size, | 6159 intptr_t* vm_isolate_snapshot_size, |
| 6156 uint8_t** isolate_snapshot_buffer, | 6160 uint8_t** isolate_snapshot_buffer, |
| 6157 intptr_t* isolate_snapshot_size, | 6161 intptr_t* isolate_snapshot_size, |
| 6158 uint8_t** assembly_buffer, | 6162 uint8_t** assembly_buffer, |
| 6159 intptr_t* assembly_size) { | 6163 intptr_t* assembly_size) { |
| 6164 #if defined(TARGET_ARCH_IA32) |
| 6165 return Api::NewError("Snapshots with code are not supported on IA32."); |
| 6166 #else |
| 6160 API_TIMELINE_DURATION; | 6167 API_TIMELINE_DURATION; |
| 6161 DARTSCOPE(Thread::Current()); | 6168 DARTSCOPE(Thread::Current()); |
| 6162 Isolate* I = T->isolate(); | 6169 Isolate* I = T->isolate(); |
| 6163 if (I->compilation_allowed()) { | 6170 if (I->compilation_allowed()) { |
| 6164 return Dart_NewApiError("Isolate is not precompiled. " | 6171 return Api::NewError("Isolate is not precompiled. " |
| 6165 "Did you forget to call Dart_Precompile?"); | 6172 "Did you forget to call Dart_Precompile?"); |
| 6166 } | 6173 } |
| 6167 ASSERT(FLAG_load_deferred_eagerly); | 6174 ASSERT(FLAG_load_deferred_eagerly); |
| 6168 if (vm_isolate_snapshot_buffer == NULL) { | 6175 if (vm_isolate_snapshot_buffer == NULL) { |
| 6169 RETURN_NULL_ERROR(vm_isolate_snapshot_buffer); | 6176 RETURN_NULL_ERROR(vm_isolate_snapshot_buffer); |
| 6170 } | 6177 } |
| 6171 if (vm_isolate_snapshot_size == NULL) { | 6178 if (vm_isolate_snapshot_size == NULL) { |
| 6172 RETURN_NULL_ERROR(vm_isolate_snapshot_size); | 6179 RETURN_NULL_ERROR(vm_isolate_snapshot_size); |
| 6173 } | 6180 } |
| 6174 if (isolate_snapshot_buffer == NULL) { | 6181 if (isolate_snapshot_buffer == NULL) { |
| 6175 RETURN_NULL_ERROR(isolate_snapshot_buffer); | 6182 RETURN_NULL_ERROR(isolate_snapshot_buffer); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 6194 isolate_snapshot_buffer, | 6201 isolate_snapshot_buffer, |
| 6195 ApiReallocate, | 6202 ApiReallocate, |
| 6196 &instructions_writer); | 6203 &instructions_writer); |
| 6197 | 6204 |
| 6198 writer.WriteFullSnapshot(); | 6205 writer.WriteFullSnapshot(); |
| 6199 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); | 6206 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); |
| 6200 *isolate_snapshot_size = writer.IsolateSnapshotSize(); | 6207 *isolate_snapshot_size = writer.IsolateSnapshotSize(); |
| 6201 *assembly_size = instructions_writer.AssemblySize(); | 6208 *assembly_size = instructions_writer.AssemblySize(); |
| 6202 | 6209 |
| 6203 return Api::Success(); | 6210 return Api::Success(); |
| 6211 #endif |
| 6204 } | 6212 } |
| 6205 | 6213 |
| 6206 | 6214 |
| 6207 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshotBlob( | 6215 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshotBlob( |
| 6208 uint8_t** vm_isolate_snapshot_buffer, | 6216 uint8_t** vm_isolate_snapshot_buffer, |
| 6209 intptr_t* vm_isolate_snapshot_size, | 6217 intptr_t* vm_isolate_snapshot_size, |
| 6210 uint8_t** isolate_snapshot_buffer, | 6218 uint8_t** isolate_snapshot_buffer, |
| 6211 intptr_t* isolate_snapshot_size, | 6219 intptr_t* isolate_snapshot_size, |
| 6212 uint8_t** instructions_blob_buffer, | 6220 uint8_t** instructions_blob_buffer, |
| 6213 intptr_t* instructions_blob_size, | 6221 intptr_t* instructions_blob_size, |
| 6214 uint8_t** rodata_blob_buffer, | 6222 uint8_t** rodata_blob_buffer, |
| 6215 intptr_t* rodata_blob_size) { | 6223 intptr_t* rodata_blob_size) { |
| 6224 #if defined(TARGET_ARCH_IA32) |
| 6225 return Api::NewError("Snapshots with code are not supported on IA32."); |
| 6226 #else |
| 6216 API_TIMELINE_DURATION; | 6227 API_TIMELINE_DURATION; |
| 6217 DARTSCOPE(Thread::Current()); | 6228 DARTSCOPE(Thread::Current()); |
| 6218 Isolate* I = T->isolate(); | 6229 Isolate* I = T->isolate(); |
| 6219 if (I->compilation_allowed()) { | 6230 if (I->compilation_allowed()) { |
| 6220 return Dart_NewApiError("Isolate is not precompiled. " | 6231 return Api::NewError("Isolate is not precompiled. " |
| 6221 "Did you forget to call Dart_Precompile?"); | 6232 "Did you forget to call Dart_Precompile?"); |
| 6222 } | 6233 } |
| 6223 ASSERT(FLAG_load_deferred_eagerly); | 6234 ASSERT(FLAG_load_deferred_eagerly); |
| 6224 if (vm_isolate_snapshot_buffer == NULL) { | 6235 if (vm_isolate_snapshot_buffer == NULL) { |
| 6225 RETURN_NULL_ERROR(vm_isolate_snapshot_buffer); | 6236 RETURN_NULL_ERROR(vm_isolate_snapshot_buffer); |
| 6226 } | 6237 } |
| 6227 if (vm_isolate_snapshot_size == NULL) { | 6238 if (vm_isolate_snapshot_size == NULL) { |
| 6228 RETURN_NULL_ERROR(vm_isolate_snapshot_size); | 6239 RETURN_NULL_ERROR(vm_isolate_snapshot_size); |
| 6229 } | 6240 } |
| 6230 if (isolate_snapshot_buffer == NULL) { | 6241 if (isolate_snapshot_buffer == NULL) { |
| 6231 RETURN_NULL_ERROR(isolate_snapshot_buffer); | 6242 RETURN_NULL_ERROR(isolate_snapshot_buffer); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 6258 ApiReallocate, | 6269 ApiReallocate, |
| 6259 &instructions_writer); | 6270 &instructions_writer); |
| 6260 | 6271 |
| 6261 writer.WriteFullSnapshot(); | 6272 writer.WriteFullSnapshot(); |
| 6262 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); | 6273 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); |
| 6263 *isolate_snapshot_size = writer.IsolateSnapshotSize(); | 6274 *isolate_snapshot_size = writer.IsolateSnapshotSize(); |
| 6264 *instructions_blob_size = instructions_writer.InstructionsBlobSize(); | 6275 *instructions_blob_size = instructions_writer.InstructionsBlobSize(); |
| 6265 *rodata_blob_size = instructions_writer.RodataBlobSize(); | 6276 *rodata_blob_size = instructions_writer.RodataBlobSize(); |
| 6266 | 6277 |
| 6267 return Api::Success(); | 6278 return Api::Success(); |
| 6279 #endif |
| 6268 } | 6280 } |
| 6269 #endif // DART_PRECOMPILER | 6281 #endif // DART_PRECOMPILER |
| 6270 | 6282 |
| 6271 | 6283 |
| 6272 DART_EXPORT Dart_Handle Dart_PrecompileJIT() { | 6284 DART_EXPORT Dart_Handle Dart_PrecompileJIT() { |
| 6273 API_TIMELINE_BEGIN_END; | 6285 API_TIMELINE_BEGIN_END; |
| 6274 DARTSCOPE(Thread::Current()); | 6286 DARTSCOPE(Thread::Current()); |
| 6275 Isolate* I = T->isolate(); | 6287 Isolate* I = T->isolate(); |
| 6276 Dart_Handle result = Api::CheckAndFinalizePendingClasses(T); | 6288 Dart_Handle result = Api::CheckAndFinalizePendingClasses(T); |
| 6277 if (::Dart_IsError(result)) { | 6289 if (::Dart_IsError(result)) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 6294 error = cls.EnsureIsFinalized(T); | 6306 error = cls.EnsureIsFinalized(T); |
| 6295 if (!error.IsNull()) { | 6307 if (!error.IsNull()) { |
| 6296 return Api::NewHandle(T, error.raw()); | 6308 return Api::NewHandle(T, error.raw()); |
| 6297 } | 6309 } |
| 6298 } | 6310 } |
| 6299 } | 6311 } |
| 6300 return Api::Success(); | 6312 return Api::Success(); |
| 6301 } | 6313 } |
| 6302 | 6314 |
| 6303 | 6315 |
| 6304 DART_EXPORT Dart_Handle Dart_CreatePrecompiledJITSnapshotBlob( | 6316 DART_EXPORT Dart_Handle Dart_CreateAppJITSnapshot( |
| 6305 uint8_t** vm_isolate_snapshot_buffer, | 6317 uint8_t** vm_isolate_snapshot_buffer, |
| 6306 intptr_t* vm_isolate_snapshot_size, | 6318 intptr_t* vm_isolate_snapshot_size, |
| 6307 uint8_t** isolate_snapshot_buffer, | 6319 uint8_t** isolate_snapshot_buffer, |
| 6308 intptr_t* isolate_snapshot_size, | 6320 intptr_t* isolate_snapshot_size, |
| 6309 uint8_t** instructions_blob_buffer, | 6321 uint8_t** instructions_blob_buffer, |
| 6310 intptr_t* instructions_blob_size, | 6322 intptr_t* instructions_blob_size, |
| 6311 uint8_t** rodata_blob_buffer, | 6323 uint8_t** rodata_blob_buffer, |
| 6312 intptr_t* rodata_blob_size) { | 6324 intptr_t* rodata_blob_size) { |
| 6325 #if defined(TARGET_ARCH_IA32) |
| 6326 return Api::NewError("Snapshots with code are not supported on IA32."); |
| 6327 #else |
| 6313 API_TIMELINE_DURATION; | 6328 API_TIMELINE_DURATION; |
| 6314 DARTSCOPE(Thread::Current()); | 6329 DARTSCOPE(Thread::Current()); |
| 6315 Isolate* I = T->isolate(); | 6330 Isolate* I = T->isolate(); |
| 6316 if (!FLAG_load_deferred_eagerly) { | 6331 if (!FLAG_load_deferred_eagerly) { |
| 6317 return Dart_NewApiError( | 6332 return Api::NewError( |
| 6318 "Creating full snapshots requires --load_deferred_eagerly"); | 6333 "Creating full snapshots requires --load_deferred_eagerly"); |
| 6319 } | 6334 } |
| 6320 if (vm_isolate_snapshot_buffer == NULL) { | 6335 if (vm_isolate_snapshot_buffer == NULL) { |
| 6321 RETURN_NULL_ERROR(vm_isolate_snapshot_buffer); | 6336 RETURN_NULL_ERROR(vm_isolate_snapshot_buffer); |
| 6322 } | 6337 } |
| 6323 if (vm_isolate_snapshot_size == NULL) { | 6338 if (vm_isolate_snapshot_size == NULL) { |
| 6324 RETURN_NULL_ERROR(vm_isolate_snapshot_size); | 6339 RETURN_NULL_ERROR(vm_isolate_snapshot_size); |
| 6325 } | 6340 } |
| 6326 if (isolate_snapshot_buffer == NULL) { | 6341 if (isolate_snapshot_buffer == NULL) { |
| 6327 RETURN_NULL_ERROR(isolate_snapshot_buffer); | 6342 RETURN_NULL_ERROR(isolate_snapshot_buffer); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6359 isolate_snapshot_buffer, | 6374 isolate_snapshot_buffer, |
| 6360 ApiReallocate, | 6375 ApiReallocate, |
| 6361 &instructions_writer); | 6376 &instructions_writer); |
| 6362 writer.WriteFullSnapshot(); | 6377 writer.WriteFullSnapshot(); |
| 6363 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); | 6378 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); |
| 6364 *isolate_snapshot_size = writer.IsolateSnapshotSize(); | 6379 *isolate_snapshot_size = writer.IsolateSnapshotSize(); |
| 6365 *instructions_blob_size = instructions_writer.InstructionsBlobSize(); | 6380 *instructions_blob_size = instructions_writer.InstructionsBlobSize(); |
| 6366 *rodata_blob_size = instructions_writer.RodataBlobSize(); | 6381 *rodata_blob_size = instructions_writer.RodataBlobSize(); |
| 6367 | 6382 |
| 6368 return Api::Success(); | 6383 return Api::Success(); |
| 6384 #endif |
| 6369 } | 6385 } |
| 6370 | 6386 |
| 6371 | 6387 |
| 6372 DART_EXPORT bool Dart_IsRunningPrecompiledCode() { | 6388 DART_EXPORT bool Dart_IsRunningPrecompiledCode() { |
| 6373 return Snapshot::IncludesCode(Dart::snapshot_kind()); | 6389 return Snapshot::IncludesCode(Dart::snapshot_kind()); |
| 6374 } | 6390 } |
| 6375 | 6391 |
| 6376 | 6392 |
| 6377 DART_EXPORT bool Dart_IsPrecompiledRuntime() { | 6393 DART_EXPORT bool Dart_IsPrecompiledRuntime() { |
| 6378 #if defined(DART_PRECOMPILED_RUNTIME) | 6394 #if defined(DART_PRECOMPILED_RUNTIME) |
| 6379 return true; | 6395 return true; |
| 6380 #else | 6396 #else |
| 6381 return false; | 6397 return false; |
| 6382 #endif | 6398 #endif |
| 6383 } | 6399 } |
| 6384 | 6400 |
| 6385 } // namespace dart | 6401 } // namespace dart |
| OLD | NEW |