From 28e9fd496fd39d180a2d786378c4ff396b9f69c8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 10 Jun 2020 10:32:15 +0200 Subject: Add ad hoc recipe if-else, switch tests (and fix bug) --- libbuild2/parser.cxx | 14 +++- tests/dependency/recipe/testscript | 149 +++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 4 deletions(-) diff --git a/libbuild2/parser.cxx b/libbuild2/parser.cxx index 36e75a3..21b5794 100644 --- a/libbuild2/parser.cxx +++ b/libbuild2/parser.cxx @@ -1356,6 +1356,13 @@ namespace build2 m.name = "perform"; } } + else + { + // Default is perform(update). + // + bs.push_back (metaopspec ("perform")); + bs.back ().push_back (opspec ("update")); + } expire_mode (); next_after_newline (t, tt, "recipe action"); @@ -1395,11 +1402,10 @@ namespace build2 // Fall through. } - - // Default is perform(update). - // - if (bs.empty ()) + else { + // Default is perform(update). + // bs.push_back (metaopspec ("perform")); bs.back ().push_back (opspec ("update")); } diff --git a/tests/dependency/recipe/testscript b/tests/dependency/recipe/testscript index ee598b7..5f9bdf1 100644 --- a/tests/dependency/recipe/testscript +++ b/tests/dependency/recipe/testscript @@ -390,6 +390,155 @@ EOI :5:3: error: duplicate recipe for perform(update) EOE +: if-else +: +$* <>/~%EOE% +f = false +alias{x}: alias{z} +% +if $f +{{ + false +}} +else +{{ + echo +}} +dump alias{x} +EOI +:12:1: dump: +% .+/alias\{x\}: .+/:alias\{z\}% + % [diag=echo] perform(update) + {{ + echo + }} +EOE + +: if-else-replay +: +$* <>/~%EOE% +f = false +alias{x y}: alias{z} +% +if $f +{{ + false +}} +else +{{ + echo +}} +dump alias{y} +EOI +:12:1: dump: +% .+/alias\{y\}: .+/:alias\{z\}% + % [diag=echo] perform(update) + {{ + echo + }} +EOE + +: if-no-else +: +$* <>/~%EOE% +f = false +alias{x}: alias{z} +% +if $f +{{ + false +}} +dump alias{x} +EOI +:8:1: dump: +% .+/alias\{x\}: .+/:alias\{z\}% +EOE + +: switch +: +$* <>/~%EOE% +f = 2 +alias{x}: alias{z} +% +switch $f +{ + case 1 + {{ + false + }} + case 2 + {{ + echo + }} + default + {{ + false + }} +} +dump alias{x} +EOI +:19:1: dump: +% .+/alias\{x\}: .+/:alias\{z\}% + % [diag=echo] perform(update) + {{ + echo + }} +EOE + +: switch-replay +: +$* <>/~%EOE% +f = 2 +alias{x y}: alias{z} +% +switch $f +{ + case 1 + {{ + false + }} + case 2 + {{ + echo + }} + default + {{ + false + }} +} +dump alias{y} +EOI +:19:1: dump: +% .+/alias\{y\}: .+/:alias\{z\}% + % [diag=echo] perform(update) + {{ + echo + }} +EOE + +: switch-no-default +: +$* <>/~%EOE% +f = 2 +alias{x}: alias{z} +% +switch $f +{ + case 0 + {{ + false + }} + case 1 + {{ + echo + }} +} +dump alias{x} +EOI +:15:1: dump: +% .+/alias\{x\}: .+/:alias\{z\}% +EOE + : diag : { -- cgit v1.1