OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 "bin/dfe.h" | 5 #include "bin/dfe.h" |
6 #include "bin/dartutils.h" | 6 #include "bin/dartutils.h" |
7 #include "bin/error_exit.h" | 7 #include "bin/error_exit.h" |
| 8 #include "bin/file.h" |
8 | 9 |
9 #include "vm/kernel.h" | 10 #include "vm/kernel.h" |
10 | 11 |
11 namespace dart { | 12 namespace dart { |
12 namespace bin { | 13 namespace bin { |
13 | 14 |
| 15 const char kPlatformBinaryName[] = "platform.dill"; |
| 16 |
| 17 |
14 DFE::DFE() | 18 DFE::DFE() |
15 : frontend_filename_(NULL), | 19 : frontend_filename_(NULL), |
16 platform_binary_filename_(NULL), | 20 platform_binary_filename_(NULL), |
17 kernel_platform_(NULL) {} | 21 kernel_platform_(NULL) {} |
18 | 22 |
19 | 23 |
20 DFE::~DFE() { | 24 DFE::~DFE() { |
21 frontend_filename_ = NULL; | 25 frontend_filename_ = NULL; |
22 platform_binary_filename_ = NULL; | 26 |
| 27 if (platform_binary_filename_ != NULL) { |
| 28 delete platform_binary_filename_; |
| 29 platform_binary_filename_ = NULL; |
| 30 } |
| 31 |
23 if (kernel_platform_ != NULL) { | 32 if (kernel_platform_ != NULL) { |
24 delete reinterpret_cast<kernel::Program*>(kernel_platform_); | 33 delete reinterpret_cast<kernel::Program*>(kernel_platform_); |
| 34 kernel_platform_ = NULL; |
25 } | 35 } |
26 kernel_platform_ = NULL; | |
27 } | 36 } |
28 | 37 |
| 38 |
| 39 void DFE::SetKernelBinaries(const char* name) { |
| 40 intptr_t len = snprintf(NULL, 0, "%s%s%s", name, File::PathSeparator(), |
| 41 kPlatformBinaryName) + |
| 42 1; |
| 43 platform_binary_filename_ = new char[len]; |
| 44 snprintf(platform_binary_filename_, len, "%s%s%s", name, |
| 45 File::PathSeparator(), kPlatformBinaryName); |
| 46 } |
| 47 |
| 48 |
29 Dart_Handle DFE::ReloadScript(Dart_Isolate isolate, const char* url_string) { | 49 Dart_Handle DFE::ReloadScript(Dart_Isolate isolate, const char* url_string) { |
30 ASSERT(!Dart_IsServiceIsolate(isolate) && !Dart_IsKernelIsolate(isolate)); | 50 ASSERT(!Dart_IsServiceIsolate(isolate) && !Dart_IsKernelIsolate(isolate)); |
31 // First check if the URL points to a Kernel IR file in which case we | 51 // First check if the URL points to a Kernel IR file in which case we |
32 // skip the compilation step and directly reload the file. | 52 // skip the compilation step and directly reload the file. |
33 const uint8_t* kernel_ir = NULL; | 53 const uint8_t* kernel_ir = NULL; |
34 intptr_t kernel_ir_size = -1; | 54 intptr_t kernel_ir_size = -1; |
35 if (!TryReadKernelFile(url_string, &kernel_ir, &kernel_ir_size)) { | 55 if (!TryReadKernelFile(url_string, &kernel_ir, &kernel_ir_size)) { |
36 // We have a source file, compile it into a kernel ir first. | 56 // We have a source file, compile it into a kernel ir first. |
37 // TODO(asiva): We will have to change this API to pass in a list of files | 57 // TODO(asiva): We will have to change this API to pass in a list of files |
38 // that have changed. For now just pass in the main url_string and have it | 58 // that have changed. For now just pass in the main url_string and have it |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 case Dart_KernelCompilationStatus_Unknown: | 98 case Dart_KernelCompilationStatus_Unknown: |
79 *error = result.error; // Copy error message. | 99 *error = result.error; // Copy error message. |
80 *exit_code = kErrorExitCode; | 100 *exit_code = kErrorExitCode; |
81 break; | 101 break; |
82 } | 102 } |
83 return NULL; | 103 return NULL; |
84 } | 104 } |
85 | 105 |
86 | 106 |
87 void* DFE::ReadPlatform() { | 107 void* DFE::ReadPlatform() { |
88 const uint8_t* buffer = NULL; | 108 return kernel_platform_ = ReadScript(platform_binary_filename_); |
89 intptr_t buffer_length = -1; | |
90 bool result = | |
91 TryReadKernelFile(platform_binary_filename_, &buffer, &buffer_length); | |
92 if (result) { | |
93 kernel_platform_ = Dart_ReadKernelBinary(buffer, buffer_length); | |
94 return kernel_platform_; | |
95 } | |
96 return NULL; | |
97 } | 109 } |
98 | 110 |
99 | 111 |
100 void* DFE::ReadScript(const char* script_uri) { | 112 void* DFE::ReadScript(const char* script_uri) { |
101 const uint8_t* buffer = NULL; | 113 const uint8_t* buffer = NULL; |
102 intptr_t buffer_length = -1; | 114 intptr_t buffer_length = -1; |
103 bool result = TryReadKernelFile(script_uri, &buffer, &buffer_length); | 115 bool result = TryReadKernelFile(script_uri, &buffer, &buffer_length); |
104 if (result) { | 116 if (result) { |
105 return Dart_ReadKernelBinary(buffer, buffer_length); | 117 return Dart_ReadKernelBinary(buffer, buffer_length); |
106 } | 118 } |
(...skipping 30 matching lines...) Expand all Loading... |
137 return true; | 149 return true; |
138 } | 150 } |
139 } | 151 } |
140 } | 152 } |
141 return false; | 153 return false; |
142 } | 154 } |
143 | 155 |
144 | 156 |
145 } // namespace bin | 157 } // namespace bin |
146 } // namespace dart | 158 } // namespace dart |
OLD | NEW |