X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?p=subdirmk.git;a=blobdiff_plain;f=generate;h=52a0ec8262522076de57b00cbe6013dd04a8d59d;hp=3ccfa0dd090673a2f4a04d1bd799450a191fd025;hb=8c3e6dc4a16406496aa6991f8dc2fb77a96359ea;hpb=3177fb7abb48479332cce56b02b6407968fb2d27 diff --git a/generate b/generate index 3ccfa0d..52a0ec8 100755 --- a/generate +++ b/generate @@ -213,8 +213,19 @@ sub process_input_mk ($$$$) { } for (;;) { die if $ddbl && defined $buffering_output; - unless (s{^(.*?)$esc}{}) { od $_; last; } + unless (@nest && $nest[0][0] eq 'Eval' + ? s{^(.*?)($esc|[{}])}{} + : s{^(.*?)($esc)}{}) { od $_; last; } od $1; + if ($2 eq '{') { + $ddbl++; + next; + } elsif ($2 eq '}') { + next if --$ddbl; + $pop_nest->('Eval'); + od '}}'; + next; + } if (s{^\\$esc}{}) { od "$$esclitr" } elsif (s{^\\\$}{}) { oud '$' } elsif (s{^\\\s+$}{}) { } @@ -231,7 +242,11 @@ sub process_input_mk ($$$$) { elsif (s{^\$\+}{}) { $ddbl=1; } elsif (s{^\$\(}{}) { die unless $ddbl; oud "\$("; } elsif (s{^\$(\d+)}{}) { die unless $ddbl; oud "\$($1)"; } - elsif (s{^([~^]?)(?=[ \t])}{}) { + elsif (s{^\$\{}{}) { + die if $ddbl; + od '${eval ${call '; + $push_nest->('Eval',1); + } elsif (s{^([~^]?)(?=[ \t])}{}) { my $prefix = $pfxmap{$1} // die; my $after=''; if (m{([ \t])$esc}) { ($_,$after) = ($`, $1.$'); }