| Index: tools/gn/value_extractors.cc
|
| diff --git a/tools/gn/value_extractors.cc b/tools/gn/value_extractors.cc
|
| index 7927b83dfed63d8e8a909e354ca3d3576a0d6e23..fe86bd3d61d88f4adfaf37eac14f823149608a24 100644
|
| --- a/tools/gn/value_extractors.cc
|
| +++ b/tools/gn/value_extractors.cc
|
| @@ -101,12 +101,28 @@ struct RelativeDirConverter {
|
| const SourceDir& current_dir;
|
| };
|
|
|
| -// Fills the label part of a LabelPtrPair, leaving the pointer null.
|
| +// Fills in a label.
|
| template<typename T> struct LabelResolver {
|
| LabelResolver(const SourceDir& current_dir_in,
|
| const Label& current_toolchain_in)
|
| : current_dir(current_dir_in),
|
| current_toolchain(current_toolchain_in) {}
|
| + bool operator()(const Value& v, Label* out, Err* err) const {
|
| + if (!v.VerifyTypeIs(Value::STRING, err))
|
| + return false;
|
| + *out = Label::Resolve(current_dir, current_toolchain, v, err);
|
| + return !err->has_error();
|
| + }
|
| + const SourceDir& current_dir;
|
| + const Label& current_toolchain;
|
| +};
|
| +
|
| +// Fills the label part of a LabelPtrPair, leaving the pointer null.
|
| +template<typename T> struct LabelPtrResolver {
|
| + LabelPtrResolver(const SourceDir& current_dir_in,
|
| + const Label& current_toolchain_in)
|
| + : current_dir(current_dir_in),
|
| + current_toolchain(current_toolchain_in) {}
|
| bool operator()(const Value& v, LabelPtrPair<T>* out, Err* err) const {
|
| if (!v.VerifyTypeIs(Value::STRING, err))
|
| return false;
|
| @@ -159,14 +175,14 @@ bool ExtractListOfLabels(const Value& value,
|
| LabelTargetVector* dest,
|
| Err* err) {
|
| return ListValueExtractor(value, dest, err,
|
| - LabelResolver<Target>(current_dir,
|
| - current_toolchain));
|
| + LabelPtrResolver<Target>(current_dir,
|
| + current_toolchain));
|
| }
|
|
|
| bool ExtractListOfUniqueLabels(const Value& value,
|
| const SourceDir& current_dir,
|
| const Label& current_toolchain,
|
| - UniqueVector<LabelConfigPair>* dest,
|
| + UniqueVector<Label>* dest,
|
| Err* err) {
|
| return ListValueUniqueExtractor(value, dest, err,
|
| LabelResolver<Config>(current_dir,
|
| @@ -176,11 +192,21 @@ bool ExtractListOfUniqueLabels(const Value& value,
|
| bool ExtractListOfUniqueLabels(const Value& value,
|
| const SourceDir& current_dir,
|
| const Label& current_toolchain,
|
| + UniqueVector<LabelConfigPair>* dest,
|
| + Err* err) {
|
| + return ListValueUniqueExtractor(value, dest, err,
|
| + LabelPtrResolver<Config>(current_dir,
|
| + current_toolchain));
|
| +}
|
| +
|
| +bool ExtractListOfUniqueLabels(const Value& value,
|
| + const SourceDir& current_dir,
|
| + const Label& current_toolchain,
|
| UniqueVector<LabelTargetPair>* dest,
|
| Err* err) {
|
| return ListValueUniqueExtractor(value, dest, err,
|
| - LabelResolver<Target>(current_dir,
|
| - current_toolchain));
|
| + LabelPtrResolver<Target>(current_dir,
|
| + current_toolchain));
|
| }
|
|
|
| bool ExtractRelativeFile(const BuildSettings* build_settings,
|
|
|