From e4eede85146540ff2f5a1007a69066db2bc30d29 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 2 Oct 2019 16:43:09 +0200 Subject: Allow iterating over group prerequisites during execute --- libbuild2/target.ixx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'libbuild2/target.ixx') diff --git a/libbuild2/target.ixx b/libbuild2/target.ixx index dd377b0..f304250 100644 --- a/libbuild2/target.ixx +++ b/libbuild2/target.ixx @@ -339,6 +339,22 @@ namespace build2 resolve_members (action, const target&); // template + inline group_view prerequisite_members_range::iterator:: + resolve_members (const prerequisite& p) + { + // We want to allow iteration over members during execute provided the + // same iteration has been performed during match. + // + const target* pt (r_->t_.ctx.phase == run_phase::match + ? &search (r_->t_, p) + : search_existing (p)); + + assert (pt != nullptr); + + return build2::resolve_members (r_->a_, *pt); + } + + template inline auto prerequisite_members_range::iterator:: operator++ () -> iterator& { @@ -383,7 +399,7 @@ namespace build2 { // Otherwise assume it is a normal group. // - g_ = resolve_members (r_->a_, search (r_->t_, *i_)); + g_ = resolve_members (*i_); if (g_.members == nullptr) // Members are not know. { -- cgit v1.1