Index: tools/gn/file_template.cc |
diff --git a/tools/gn/file_template.cc b/tools/gn/file_template.cc |
index ec34993229038fc5241a0477eeebc1d33c4bbc2c..b27087bbcda5075cff8786752e5fe859475f7426 100644 |
--- a/tools/gn/file_template.cc |
+++ b/tools/gn/file_template.cc |
@@ -91,6 +91,13 @@ FileTemplate::FileTemplate(const std::vector<std::string>& t) |
ParseOneTemplateString(t[i]); |
} |
+FileTemplate::FileTemplate(const std::vector<SourceFile>& t) |
+ : has_substitutions_(false) { |
+ std::fill(types_required_, &types_required_[Subrange::NUM_TYPES], false); |
+ for (size_t i = 0; i < t.size(); i++) |
+ ParseOneTemplateString(t[i].value()); |
+} |
+ |
FileTemplate::~FileTemplate() { |
} |
@@ -121,6 +128,7 @@ void FileTemplate::Apply(const Value& sources, |
const std::vector<Value>& sources_list = sources.list_value(); |
for (size_t i = 0; i < sources_list.size(); i++) { |
+ string_output.clear(); |
if (!sources_list[i].VerifyTypeIs(Value::STRING, err)) |
return; |
@@ -140,17 +148,18 @@ void FileTemplate::ApplyString(const std::string& str, |
subst[i] = GetSubstitution(str, static_cast<Subrange::Type>(i)); |
} |
- output->resize(templates_.container().size()); |
+ size_t first_output_index = output->size(); |
+ output->resize(output->size() + templates_.container().size()); |
for (size_t template_i = 0; |
template_i < templates_.container().size(); template_i++) { |
const Template& t = templates_[template_i]; |
- (*output)[template_i].clear(); |
+ std::string& cur_output = (*output)[first_output_index + template_i]; |
for (size_t subrange_i = 0; subrange_i < t.container().size(); |
subrange_i++) { |
if (t[subrange_i].type == Subrange::LITERAL) |
- (*output)[template_i].append(t[subrange_i].literal); |
+ cur_output.append(t[subrange_i].literal); |
else |
- (*output)[template_i].append(subst[t[subrange_i].type]); |
+ cur_output.append(subst[t[subrange_i].type]); |
} |
} |
} |