Commit e161ade6 authored by Russell Chou's avatar Russell Chou Committed by Wouter van Oortmerssen

Make Parser skip files it's seen already. (#5048)

The use case is so we can batch compile a bunch of schemas, some which can depend on each other, without caring about their order.
parent f575b02f
...@@ -2441,10 +2441,14 @@ CheckedError Parser::ParseRoot(const char *source, const char **include_paths, ...@@ -2441,10 +2441,14 @@ CheckedError Parser::ParseRoot(const char *source, const char **include_paths,
CheckedError Parser::DoParse(const char *source, const char **include_paths, CheckedError Parser::DoParse(const char *source, const char **include_paths,
const char *source_filename, const char *source_filename,
const char *include_filename) { const char *include_filename) {
if (source_filename && if (source_filename) {
included_files_.find(source_filename) == included_files_.end()) { if (included_files_.find(source_filename) == included_files_.end()) {
included_files_[source_filename] = include_filename ? include_filename : ""; included_files_[source_filename] =
files_included_per_file_[source_filename] = std::set<std::string>(); include_filename ? include_filename : "";
files_included_per_file_[source_filename] = std::set<std::string>();
} else {
return NoError();
}
} }
if (!include_paths) { if (!include_paths) {
static const char *current_directory[] = { "", nullptr }; static const char *current_directory[] = { "", nullptr };
...@@ -2505,6 +2509,9 @@ CheckedError Parser::DoParse(const char *source, const char **include_paths, ...@@ -2505,6 +2509,9 @@ CheckedError Parser::DoParse(const char *source, const char **include_paths,
// entered into included_files_. // entered into included_files_.
// This is recursive, but only go as deep as the number of include // This is recursive, but only go as deep as the number of include
// statements. // statements.
if (source_filename) {
included_files_.erase(source_filename);
}
return DoParse(source, include_paths, source_filename, return DoParse(source, include_paths, source_filename,
include_filename); include_filename);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment