From ed974e41e3dd1acd24e2ef816b104ff66ea720ee Mon Sep 17 00:00:00 2001
From: simonpj <unknown>
Date: Mon, 20 Dec 1999 10:12:50 +0000
Subject: [PATCH] [project @ 1999-12-20 10:12:50 by simonpj] Fix a gotcha in
 the interface-file post processing that led to bizarre omissions from
 interface files when working with existential types.  That's what you get for
 using Perl

---
 ghc/driver/ghc-iface.lprl | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/ghc/driver/ghc-iface.lprl b/ghc/driver/ghc-iface.lprl
index f14e6dc2cde7..71b5d3c94362 100644
--- a/ghc/driver/ghc-iface.lprl
+++ b/ghc/driver/ghc-iface.lprl
@@ -158,6 +158,8 @@ sub constructNewHiFile {
     print NEWHI $Stuff{'new:usages'} unless $Stuff{'new:usages'} eq '';
     print NEWHI $Stuff{'new:instances'} unless $Stuff{'new:instances'} eq '';
 
+    print STDERR @decl_names ;
+
     foreach $v (@decl_names) {
 	&printNewItemVersion(NEWHI, $v, $new_module_version, $show_hi_diffs);		# Print new version number
 	print NEWHI $Decl{"new:$v"};		# Print the new decl itself
@@ -254,8 +256,11 @@ sub readHiFile {
 		$Decl{"$mod:$current_name"} = $_;
 	        if ($mod eq "old") { $OldVersion{$current_name} = $version; }
 
-	   } elsif ( /^(newtype|data)\s+(.*\s+=>\s+)?(\S+)\s+/ ) {
+	   } elsif ( /^(newtype|data)\s+({.*}\s+=>\s+)?(\S+)\s+/ ) {
 			# Data declaration	
+			# The (...)? parts skips over the context of a data decl
+			# to find the name of the type constructor.  The curly
+			# brackets are part of the iface file syntax for contexts
 		$current_name = "data $3";
 		$Decl{"$mod:$current_name"} = $_;
 	        if ($mod eq "old") { $OldVersion{$current_name} = $version; }
-- 
GitLab