forked from BigfootDev/flatbuffers
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.
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
f575b02fda
commit
e161ade68c
@@ -2441,10 +2441,14 @@ CheckedError Parser::ParseRoot(const char *source, const char **include_paths,
|
||||
CheckedError Parser::DoParse(const char *source, const char **include_paths,
|
||||
const char *source_filename,
|
||||
const char *include_filename) {
|
||||
if (source_filename &&
|
||||
included_files_.find(source_filename) == included_files_.end()) {
|
||||
included_files_[source_filename] = include_filename ? include_filename : "";
|
||||
files_included_per_file_[source_filename] = std::set<std::string>();
|
||||
if (source_filename) {
|
||||
if (included_files_.find(source_filename) == included_files_.end()) {
|
||||
included_files_[source_filename] =
|
||||
include_filename ? include_filename : "";
|
||||
files_included_per_file_[source_filename] = std::set<std::string>();
|
||||
} else {
|
||||
return NoError();
|
||||
}
|
||||
}
|
||||
if (!include_paths) {
|
||||
static const char *current_directory[] = { "", nullptr };
|
||||
@@ -2505,6 +2509,9 @@ CheckedError Parser::DoParse(const char *source, const char **include_paths,
|
||||
// entered into included_files_.
|
||||
// This is recursive, but only go as deep as the number of include
|
||||
// statements.
|
||||
if (source_filename) {
|
||||
included_files_.erase(source_filename);
|
||||
}
|
||||
return DoParse(source, include_paths, source_filename,
|
||||
include_filename);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user