| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| #ifndef RUNTIME_BIN_DFE_H_ |
| #define RUNTIME_BIN_DFE_H_ |
| |
| #include "include/dart_api.h" |
| #include "include/dart_native_api.h" |
| #include "platform/assert.h" |
| #include "platform/globals.h" |
| |
| namespace dart { |
| namespace bin { |
| |
| class DFE { |
| public: |
| DFE(); |
| ~DFE(); |
| |
| const char* frontend_filename() const { return frontend_filename_; } |
| void set_frontend_filename(const char* name) { frontend_filename_ = name; } |
| bool UseDartFrontend() const { return frontend_filename_ != NULL; } |
| |
| const char* platform_binary_filename() const { |
| return platform_binary_filename_; |
| } |
| |
| void SetKernelBinaries(const char* name); |
| |
| bool UsePlatformBinary() const { return platform_binary_filename_ != NULL; } |
| |
| void* kernel_platform() const { return kernel_platform_; } |
| |
| void* kernel_vmservice_io() const { return kernel_vmservice_io_; } |
| |
| // Method to reload a script into a running a isolate. |
| // If the specified script [url] is not a kernel IR, compile it first using |
| // DFE and then reload the resulting kernel IR into the isolate. |
| // Returns Dart_Null if successful, otherwise an error object is returned. |
| Dart_Handle ReloadScript(Dart_Isolate isolate, const char* url_string); |
| |
| // Compiles a script and reads the resulting kernel file. |
| // If the compilation is successful, returns a valid in memory kernel |
| // representation of the script, NULL otherwise |
| // 'error' and 'exit_code' have the error values in case of errors. |
| void* CompileAndReadScript(const char* script_uri, |
| char** error, |
| int* exit_code); |
| |
| // Reads the platform kernel file. |
| // Returns an in memory kernel representation of the platform kernel file. |
| void* ReadPlatform(); |
| |
| // Reads the vmservice_io kernel file. |
| // Returns the in memory representation of the vmservice_io kernel file. |
| void* ReadVMServiceIO(); |
| |
| // Reads the script kernel file if specified 'script_uri' is a kernel file. |
| // Returns an in memory kernel representation of the specified script is a |
| // valid kernel file, false otherwise. |
| void* ReadScript(const char* script_uri); |
| |
| private: |
| // Tries to read [script_uri] as a Kernel IR file. |
| // Returns `true` if successful and sets [kernel_file] and [kernel_length] |
| // to be the kernel IR contents. |
| // The caller is responsible for free()ing [kernel_file] if `true` |
| // was returned. |
| bool TryReadKernelFile(const char* script_uri, |
| const uint8_t** kernel_ir, |
| intptr_t* kernel_ir_size); |
| |
| const char* frontend_filename_; |
| char* platform_binary_filename_; |
| char* vmservice_io_binary_filename_; |
| void* kernel_platform_; |
| void* kernel_vmservice_io_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DFE); |
| }; |
| |
| } // namespace bin |
| } // namespace dart |
| |
| #endif // RUNTIME_BIN_DFE_H_ |