diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2023-10-22 12:34:44 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2023-10-26 13:29:24 +0200 |
commit | 5c3982d9d2dbe775b9876f1c48e865012bacbe40 (patch) | |
tree | d02de19d51e391ef55d90a7e3c0638128c6cb09a /libbuild2/algorithm.ixx | |
parent | 668d521db19d35cfe8ea6ae0c0de3668bb216c76 (diff) |
WIP: add options to match_rule(), match_recipe()
Diffstat (limited to 'libbuild2/algorithm.ixx')
-rw-r--r-- | libbuild2/algorithm.ixx | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/libbuild2/algorithm.ixx b/libbuild2/algorithm.ixx index 615cef0..5b7238c 100644 --- a/libbuild2/algorithm.ixx +++ b/libbuild2/algorithm.ixx @@ -539,7 +539,7 @@ namespace build2 return match_direct_sync (a, t, fail); } - // Clear rule match-specific target data. + // Clear rule match-specific target data (except match_extra). // inline void clear_target (action a, target& t) @@ -608,12 +608,16 @@ namespace build2 } inline void - match_recipe (target_lock& l, recipe r) + match_recipe (target_lock& l, recipe r, uint64_t o) { assert (l.target != nullptr && - l.offset != target::offset_matched && + l.offset < target::offset_matched && l.target->ctx.phase == run_phase::match); + match_extra& me ((*l.target)[l.action].match_extra); + + me.reinit (false /* fallback */); + me.cur_options = o; // Already applied, so cur_, not new_options. clear_target (l.action, *l.target); set_rule (l, nullptr); // No rule. set_recipe (l, move (r)); @@ -621,12 +625,16 @@ namespace build2 } inline void - match_rule (target_lock& l, const rule_match& r) + match_rule (target_lock& l, const rule_match& r, uint64_t o) { assert (l.target != nullptr && - l.offset != target::offset_matched && + l.offset < target::offset_matched && l.target->ctx.phase == run_phase::match); + match_extra& me ((*l.target)[l.action].match_extra); + + me.reinit (false /* fallback */); + me.new_options = o; clear_target (l.action, *l.target); set_rule (l, &r); l.offset = target::offset_matched; |