In the Template Haskell pretty printer, don't call error
authorSimon Peyton Jones <simonpj@microsoft.com>
Tue, 18 Sep 2012 10:48:05 +0000 (11:48 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Tue, 18 Sep 2012 10:48:05 +0000 (11:48 +0100)
There were two cases in which we called error
  * An InfixE with an operator epxression other than VarE or ConE
  * A comprehension with empty Stmts, ie CompE []

Crashing doesn't help much.  Now the library puts in the pretty
printed output a textual signal about what went wrong.

This addresses the crash in Trac #7235, although doesn't fix
the underlying cause, which remains shrouded in obscurity.

libraries/template-haskell/Language/Haskell/TH/Ppr.hs

index 4de7588..60b9c01 100644 (file)
@@ -84,7 +84,7 @@ instance Ppr Exp where
 pprInfixExp :: Exp -> Doc
 pprInfixExp (VarE v) = pprName' Infix v
 pprInfixExp (ConE v) = pprName' Infix v
-pprInfixExp _        = error "Attempt to pretty-print non-variable or constructor in infix context!"
+pprInfixExp _        = text "<<Non-variable/constructor in infix context>>"
 
 pprExp :: Precedence -> Exp -> Doc
 pprExp _ (VarE v)     = pprName' Applied v
@@ -127,7 +127,7 @@ pprExp i (CaseE e ms)
  = parensIf (i > noPrec) $ text "case" <+> ppr e <+> text "of"
                         $$ nest nestDepth (ppr ms)
 pprExp i (DoE ss) = parensIf (i > noPrec) $ text "do" <+> ppr ss
-pprExp _ (CompE []) = error "Can't happen: pprExp (CompExp [])"
+pprExp _ (CompE []) = text "<<Empty CompExp>>"
 -- This will probably break with fixity declarations - would need a ';'
 pprExp _ (CompE ss) = text "[" <> ppr s
                   <+> text "|"