From 2c8db0f89fdcb949f0e8f82a223bca194a7a28c8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 11 Jan 2020 13:58:34 +0000 Subject: [PATCH] Syntax: Provide convenience syntax &( for $(eval Signed-off-by: Ian Jackson --- README | 13 +++++++++++++ generate | 2 ++ 2 files changed, 15 insertions(+) diff --git a/README b/README index b42356d..d85a688 100644 --- a/README +++ b/README @@ -222,6 +222,7 @@ STUFF $ THINGS .. STUFF $$ THINGS &{..$..} => ${eval ${call ..$$..}} (matches { } pairs to find the end) content is $-doubled (unless it contains &$- to turn that off) + cf &(...), see "Convenience syntax for eval", below. Together &:macro and &${...} provide a more reasonable macro facility than raw make. They solve the problem that make expansions cannot @@ -245,6 +246,18 @@ A few contexts do not support $-doubling, such as directive arguments or places where this might imply $-quadrupling. (There is no way to get $-quadrupling.) +Convenience syntax for eval +- - - - - - - - - - - - - - + +&(thing => $(call thing +&( thing => $(call thing + and specially: +&(&lc => $(call sub_dir_lc or $(call TOP_lc +&( &lc => $(call sub_dir_lc or $(call TOP_lc + even though lc would normally be thought a filename + +Unlike &{...}, this does not involve any dollar-doubling. + Invocation, "recursive" per-directory targets --------------------------------------------- diff --git a/generate b/generate index c2dc42d..b564260 100755 --- a/generate +++ b/generate @@ -371,6 +371,8 @@ sub process_input_mk ($$$$) { $note_varref->($2,!!$1) if m{^($esc)?([^()\$]+\))}; } elsif (s{^\$(\d+)}{}) { ddbl_only($&); oud "\${$1}"; } + elsif (s{^\(\s*$esc(?=$lc_re)}{}) { od "\$(call ${var_prefix}" } + elsif (s{^\(\s*(?=\S)}{} ) { od "\$(call " } elsif (s{^\{}{}) { err 'macro invocation cannot be re-$-doubled' if $ddbl; od '${eval ${call '; -- 2.30.2