21std::optional<std::string>
ReadFile(
const std::string& path) {
22 std::ifstream file_stream(path);
23 if (!file_stream.good())
return std::nullopt;
25 return std::string{std::istreambuf_iterator<char>(file_stream),
26 std::istreambuf_iterator<char>()};
29void ReadAndParseTorqueFile(
const std::string& path) {
31 CurrentSourceFile::Scope source_id_scope(source_id);
37 maybe_content =
ReadFile(*maybe_path);
42 Error(
"Cannot open file path/uri: ", path).
Throw();
48void CompileCurrentAst(TorqueCompilerOptions options) {
49 GlobalContext::Scope global_context(std::move(CurrentAst::Get()));
50 if (options.collect_language_server_data) {
53 if (options.collect_kythe_data) {
56 if (options.force_assert_statements) {
59 if (options.annotate_ir) {
62 TypeOracle::Scope type_oracle;
77 std::string output_directory = options.output_directory;
79 ImplementationVisitor implementation_visitor;
80 implementation_visitor.SetDryRun(output_directory.empty());
82 implementation_visitor.GenerateInstanceTypes(output_directory);
83 implementation_visitor.BeginGeneratedFiles();
84 implementation_visitor.BeginDebugMacrosFile();
86 implementation_visitor.VisitAllDeclarables();
90 implementation_visitor.GenerateBuiltinDefinitionsAndInterfaceDescriptors(
92 implementation_visitor.GenerateVisitorLists(output_directory);
93 implementation_visitor.GenerateBitFields(output_directory);
94 implementation_visitor.GeneratePrintDefinitions(output_directory);
95 implementation_visitor.GenerateClassDefinitions(output_directory);
96 implementation_visitor.GenerateClassVerifiers(output_directory);
97 implementation_visitor.GenerateClassDebugReaders(output_directory);
98 implementation_visitor.GenerateEnumVerifiers(output_directory);
99 implementation_visitor.GenerateBodyDescriptors(output_directory);
100 implementation_visitor.GenerateExportedMacrosAssembler(output_directory);
101 implementation_visitor.GenerateCSATypes(output_directory);
103 implementation_visitor.EndGeneratedFiles();
104 implementation_visitor.EndDebugMacrosFile();
105 implementation_visitor.GenerateImplementation(output_directory);
119 CurrentSourceFile::Scope no_file_scope(
121 CurrentAst::Scope ast_scope;
122 TorqueMessages::Scope messages_scope;
128 CompileCurrentAst(options);
136 result.messages = std::move(TorqueMessages::Get());
146 CurrentAst::Scope ast_scope;
147 TorqueMessages::Scope messages_scope;
152 for (
const auto& path : files) {
153 ReadAndParseTorqueFile(path);
155 CompileCurrentAst(options);
163 result.messages = std::move(TorqueMessages::Get());
174 CurrentAst::Scope ast_scope;
175 TorqueMessages::Scope messages_scope;
185 CurrentSourceFile::Scope source_id_scope(source_id);
188 CompileCurrentAst(options);
196 result.messages = std::move(TorqueMessages::Get());
static void Visit(Ast *ast)
static void SetCollectLanguageServerData()
static void SetCollectKytheData()
static Namespace * GetDefaultNamespace()
static bool collect_language_server_data()
static void SetAnnotateIR()
static void SetForceAssertStatements()
static void SetGlobalContext(GlobalContext global_context)
static void SetTypeOracle(TypeOracle type_oracle)
static void ResolvePredeclarations()
static void Predeclare(Ast *ast)
static SourceId AddSource(std::string path)
static std::string AbsolutePath(SourceId file)
static SourceId Invalid()
static void FinalizeAggregateTypes()
ZoneVector< RpoNumber > & result
std::priority_queue< BigUnit > units[CompilationTier::kNumTiers]
void ReportAllUnusedMacros()
std::optional< std::string > FileUriDecode(const std::string &uri)
void ParseTorque(const std::string &input)
TorqueCompilerResult CompileTorque(const std::string &source, TorqueCompilerOptions options)
TorqueCompilerResult CompileTorqueForKythe(std::vector< TorqueCompilationUnit > units, TorqueCompilerOptions options, KytheConsumer *consumer)
MessageBuilder Error(Args &&... args)
std::string ReadFile(const char *filename, bool *exists, bool verbose)
std::optional< SourceFileMap > source_file_map