7fd0d073a9
This API was added in https://dart-review.googlesource.com/c/sdk/+/232682 in order to support one of the strategies for running macros, but it is no longer needed. TEST=ci Change-Id: I8da233932351f27fd5dfd01b66f481195d7ca0e1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407540 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
169 lines
5.7 KiB
C++
169 lines
5.7 KiB
C++
// 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 <memory>
|
|
|
|
#include "include/dart_api.h"
|
|
#include "include/dart_native_api.h"
|
|
#include "platform/assert.h"
|
|
#include "platform/globals.h"
|
|
#include "platform/utils.h"
|
|
|
|
namespace dart {
|
|
namespace bin {
|
|
|
|
class AppSnapshot; // Forward declaration.
|
|
|
|
class DFE {
|
|
public:
|
|
DFE();
|
|
~DFE();
|
|
|
|
// Call Init before Dart_Initialize to prevent races between the
|
|
// different isolates.
|
|
void Init();
|
|
|
|
char* frontend_filename() const { return frontend_filename_; }
|
|
|
|
void set_frontend_filename(const char* name) {
|
|
if (frontend_filename_ != nullptr) {
|
|
free(frontend_filename_);
|
|
}
|
|
frontend_filename_ = Utils::StrDup(name);
|
|
set_use_dfe();
|
|
}
|
|
void set_use_dfe(bool value = true) { use_dfe_ = value; }
|
|
bool UseDartFrontend() const { return use_dfe_; }
|
|
|
|
void set_use_incremental_compiler(bool value) {
|
|
use_incremental_compiler_ = value;
|
|
}
|
|
bool use_incremental_compiler() const { return use_incremental_compiler_; }
|
|
|
|
void set_verbosity(Dart_KernelCompilationVerbosityLevel verbosity) {
|
|
verbosity_ = verbosity;
|
|
}
|
|
Dart_KernelCompilationVerbosityLevel verbosity() const { return verbosity_; }
|
|
|
|
// Returns the platform binary file name if the path to
|
|
// kernel binaries was set using SetKernelBinaries.
|
|
const char* GetPlatformBinaryFilename();
|
|
|
|
// Set the kernel program for the main application if it was specified
|
|
// as a dill file.
|
|
void set_application_kernel_buffer(uint8_t* buffer, intptr_t size) {
|
|
application_kernel_buffer_ = buffer;
|
|
application_kernel_buffer_size_ = size;
|
|
}
|
|
void application_kernel_buffer(const uint8_t** buffer, intptr_t* size) const {
|
|
*buffer = application_kernel_buffer_;
|
|
*size = application_kernel_buffer_size_;
|
|
}
|
|
|
|
// Compiles specified script.
|
|
// Returns result from compiling the script.
|
|
//
|
|
// `snapshot` is used by the frontend to determine if compilation
|
|
// related information should be printed to console (e.g., null safety mode).
|
|
Dart_KernelCompilationResult CompileScript(const char* script_uri,
|
|
bool incremental,
|
|
const char* package_config,
|
|
bool for_snapshot,
|
|
bool embedd_sources);
|
|
|
|
// Compiles specified script and reads the resulting kernel file.
|
|
// If the compilation is successful, returns a valid in memory kernel
|
|
// representation of the script, nullptr otherwise
|
|
// 'error' and 'exit_code' have the error values in case of errors.
|
|
//
|
|
// `snapshot` is used by the frontend to determine if compilation
|
|
// related information should be printed to console (e.g., null safety mode).
|
|
void CompileAndReadScript(const char* script_uri,
|
|
uint8_t** kernel_buffer,
|
|
intptr_t* kernel_buffer_size,
|
|
char** error,
|
|
int* exit_code,
|
|
const char* package_config,
|
|
bool for_snapshot,
|
|
bool embed_sources);
|
|
|
|
// 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, sets 'kernel_buffer' to nullptr otherwise.
|
|
//
|
|
// The caller is responsible for free()ing 'kernel_buffer'.
|
|
void ReadScript(const char* script_uri,
|
|
const AppSnapshot* app_snapshot,
|
|
uint8_t** kernel_buffer,
|
|
intptr_t* kernel_buffer_size,
|
|
bool decode_uri = true) const;
|
|
|
|
bool KernelServiceDillAvailable() const;
|
|
|
|
// Tries to read 'script_uri' as a Kernel IR file.
|
|
// Returns `true` if successful and sets 'kernel_buffer' and 'kernel_length'
|
|
// to be the kernel IR contents.
|
|
//
|
|
// The caller is responsible for free()ing 'kernel_buffer'
|
|
// if `true` was returned.
|
|
bool TryReadKernelFile(const char* script_uri,
|
|
const AppSnapshot* app_snapshot,
|
|
uint8_t** kernel_buffer,
|
|
intptr_t* kernel_buffer_size,
|
|
bool decode_uri = true) const;
|
|
|
|
// We distinguish between "intent to use Dart frontend" vs "can actually
|
|
// use Dart frontend". The method UseDartFrontend tells us about the
|
|
// intent to use DFE. This method tells us if Dart frontend can actually
|
|
// be used.
|
|
bool CanUseDartFrontend() const;
|
|
|
|
void LoadPlatform(const uint8_t** kernel_buffer,
|
|
intptr_t* kernel_buffer_size);
|
|
void LoadKernelService(const uint8_t** kernel_service_buffer,
|
|
intptr_t* kernel_service_buffer_size);
|
|
|
|
private:
|
|
bool use_dfe_;
|
|
bool use_incremental_compiler_;
|
|
char* frontend_filename_;
|
|
Dart_KernelCompilationVerbosityLevel verbosity_ =
|
|
Dart_KernelCompilationVerbosityLevel_All;
|
|
|
|
// Kernel binary specified on the cmd line.
|
|
uint8_t* application_kernel_buffer_;
|
|
intptr_t application_kernel_buffer_size_;
|
|
|
|
void InitKernelServiceAndPlatformDills();
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(DFE);
|
|
};
|
|
|
|
class PathSanitizer {
|
|
public:
|
|
explicit PathSanitizer(const char* path);
|
|
const char* sanitized_uri() const;
|
|
|
|
private:
|
|
#if defined(DART_HOST_OS_WINDOWS)
|
|
std::unique_ptr<char[]> sanitized_uri_;
|
|
#else
|
|
const char* sanitized_uri_;
|
|
#endif // defined(DART_HOST_OS_WINDOWS)
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(PathSanitizer);
|
|
};
|
|
|
|
#if !defined(DART_PRECOMPILED_RUNTIME)
|
|
extern DFE dfe;
|
|
#endif
|
|
|
|
} // namespace bin
|
|
} // namespace dart
|
|
|
|
#endif // RUNTIME_BIN_DFE_H_
|