Extcore can now handle data types without constructors
authorJosef Svenningsson <josef.svenningsson@gmail.com>
Thu, 20 Apr 2006 21:36:22 +0000 (21:36 +0000)
committerJosef Svenningsson <josef.svenningsson@gmail.com>
Thu, 20 Apr 2006 21:36:22 +0000 (21:36 +0000)
compiler/coreSyn/MkExternalCore.lhs
compiler/parser/ParserCore.y

index 291b16e..b4970cc 100644 (file)
@@ -64,7 +64,8 @@ collect_tdefs tcon tdefs
   where
     tdef | isNewTyCon tcon = 
                 C.Newtype (make_con_qid (tyConName tcon)) (map make_tbind tyvars) repclause 
-         | null (tyConDataCons tcon) = error "MkExternalCore died: can't handle datatype declarations with no data constructors"
+-- 20060420 GHC handles empty data types just fine. ExtCore should too! jds
+--         | null (tyConDataCons tcon) = error "MkExternalCore died: can't handle datatype declarations with no data constructors"
          | otherwise = 
                 C.Data (make_con_qid (tyConName tcon)) (map make_tbind tyvars) (map make_cdef (tyConDataCons tcon)) 
          where repclause | isRecursiveTyCon tcon = Nothing
index 3210583..7b82eba 100644 (file)
@@ -82,7 +82,7 @@ tdefs :: { [TyClDecl RdrName] }
        | tdef ';' tdefs        {$1:$3}
 
 tdef   :: { TyClDecl RdrName }
-       : '%data' q_tc_name tv_bndrs '=' '{' cons1 '}'
+       : '%data' q_tc_name tv_bndrs '=' '{' cons '}'
                 { mkTyData DataType (noLoc [], noLoc (ifaceExtRdrName $2), map toHsTvBndr $3) Nothing $6 Nothing }
        | '%newtype' q_tc_name tv_bndrs trep 
                { let tc_rdr = ifaceExtRdrName $2 in
@@ -97,9 +97,9 @@ trep    :: { OccName -> [LConDecl RdrName] }
                                        in [noLoc $ ConDecl (noLoc dc_name) Explicit []
                                           (noLoc []) con_info ResTyH98]) }
 
-cons1  :: { [LConDecl RdrName] }
-       : con           { [$1] }
-       | con ';' cons1 { $1:$3 }
+cons   :: { [LConDecl RdrName] }
+       : {- empty -}   { [] } -- 20060420 Empty data types allowed. jds
+       | con ';' cons  { $1:$3 }
 
 con    :: { LConDecl RdrName }
        : d_pat_occ attv_bndrs hs_atys