8 #include "src/torque/declarable.h" 9 #include "src/torque/declaration-visitor.h" 10 #include "src/torque/global-context.h" 11 #include "src/torque/implementation-visitor.h" 12 #include "src/torque/torque-parser.h" 13 #include "src/torque/type-oracle.h" 14 #include "src/torque/types.h" 15 #include "src/torque/utils.h" 21 int WrappedMain(
int argc,
const char** argv) {
22 std::string output_directory;
24 SourceFileMap::Scope source_file_map_scope;
25 CurrentSourceFile::Scope unknown_sourcefile_scope(
26 SourceFileMap::AddSource(
"<unknown>"));
27 CurrentAst::Scope ast_scope;
28 LintErrorStatus::Scope lint_error_status_scope;
30 for (
int i = 1;
i < argc; ++
i) {
32 if (!strcmp(
"-o", argv[
i])) {
33 output_directory = argv[++
i];
36 if (!strcmp(
"-v", argv[
i])) {
44 std::string path = argv[
i];
45 SourceId source_id = SourceFileMap::AddSource(path);
46 CurrentSourceFile::Scope source_id_scope(source_id);
47 std::ifstream file_stream(path);
48 std::string file_content = {std::istreambuf_iterator<char>(file_stream),
49 std::istreambuf_iterator<char>()};
50 ParseTorque(file_content);
53 GlobalContext::Scope global_context(std::move(CurrentAst::Get()));
54 if (verbose) GlobalContext::SetVerbose();
55 TypeOracle::Scope type_oracle;
57 if (output_directory.length() != 0) {
58 DeclarationVisitor().Visit(GlobalContext::Get().ast());
60 ImplementationVisitor visitor;
61 for (Namespace* n : GlobalContext::Get().GetNamespaces()) {
62 visitor.BeginNamespaceFile(n);
65 visitor.VisitAllDeclarables();
67 std::string output_header_path = output_directory;
68 output_header_path +=
"/builtin-definitions-from-dsl.h";
69 visitor.GenerateBuiltinDefinitions(output_header_path);
71 for (Namespace* n : GlobalContext::Get().GetNamespaces()) {
72 visitor.EndNamespaceFile(n);
73 visitor.GenerateImplementation(output_directory, n);
77 if (LintErrorStatus::HasLintErrors()) std::abort();
86 int main(
int argc,
const char** argv) {
87 return v8::internal::torque::WrappedMain(argc, argv);