* Evil Mangler broke under Perl 5.9+ because $* is gone; this fixes it.
authoraudreyt@audreyt.org <unknown>
Wed, 11 Jul 2007 18:24:30 +0000 (18:24 +0000)
committeraudreyt@audreyt.org <unknown>
Wed, 11 Jul 2007 18:24:30 +0000 (18:24 +0000)
  Perl 4's special variable $* controls multi-line matching; it's been
  deprecated from Perl 5's inception, and is finally removed in Perl
  versions 5.9 (soon to be 5.10).

  Since GHC depends on Perl 5.6+ anyway, this patch introduces an
  equivalent effect to $* without using that special variable, by
  hooking into Perl's regex parsing process to add the /m flag.

driver/mangler/ghc-asm.lprl

index 88766cb..7c8bd0a 100644 (file)
@@ -542,10 +542,13 @@ print STDERR "T_HDR_vector: $T_HDR_vector\n";
 \begin{code}
 sub mangle_asm {
     local($in_asmf, $out_asmf) = @_;
+    local($i, $c);
 
     # multi-line regexp matching:
-    local($*) = 1;
-    local($i, $c);
+    #   local($*) = 1;
+    # the above line used to work, but Perl 5.10 removes $*, so we uses an
+    # equivalent construct that works in Perl 5.6 and later.
+    BEGIN { require overload; overload::constant( qr => sub { "(?m:$_[1])" } ) }
 
     # ia64-specific information for code chunks
     my $ia64_locnum;