Use OPTIONS rather than OPTIONS_GHC for pragmas
[ghc-hetmet.git] / compiler / typecheck / TcSplice.lhs
index 4e2ae69..b3da4fb 100644 (file)
@@ -6,6 +6,13 @@
 TcSplice: Template Haskell splices
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/CodingStyle#Warnings
+-- for details
+
 module TcSplice( tcSpliceExpr, tcSpliceDecls, tcBracket ) where
 
 #include "HsVersions.h"
@@ -376,11 +383,7 @@ runMeta :: (SrcSpan -> th_syn -> Either Message hs_syn)
        -> TcM hs_syn           -- Of type t
 runMeta convert expr
   = do {       -- Desugar
-#if defined(GHCI) && defined(DEBUGGER)
-         ds_expr <- unsetOptM Opt_Debugging $ initDsTc (dsLExpr expr)
-#else 
          ds_expr <- initDsTc (dsLExpr expr)
-#endif
        -- Compile and link it; might fail if linking fails
        ; hsc_env <- getTopEnv
        ; src_span <- getSrcSpanM
@@ -398,17 +401,17 @@ runMeta convert expr
                -- exception-cacthing thing so that if there are any lurking 
                -- exceptions in the data structure returned by hval, we'll
                -- encounter them inside the try
-         either_tval <- tryAllM $ do
-               { th_syn <- TH.runQ (unsafeCoerce# hval)
-               ; case convert (getLoc expr) th_syn of
-                   Left err     -> do { addErrTc err; return Nothing }
-                   Right hs_syn -> return (Just hs_syn) }
-
-       ; case either_tval of
-             Right (Just v) -> return v
-             Right Nothing  -> failM   -- Error already in Tc monad
-             Left exn       -> failWithTc (mk_msg "run" exn)   -- Exception
-       }}}
+          either_th_syn <- tryAllM $ tryM $ TH.runQ $ unsafeCoerce# hval
+        ; case either_th_syn of
+            Left exn             -> failWithTc (mk_msg "run" exn)
+            Right (Left exn)     -> failM  -- Error already in Tc monad
+            Right (Right th_syn) -> do
+        { either_hs_syn <- tryAllM $ return $! convert (getLoc expr) th_syn
+        ; case either_hs_syn of
+            Left exn             -> failWithTc (mk_msg "interpret result of" exn)
+            Right (Left err)     -> do { addErrTc err; failM }
+            Right (Right hs_syn) -> return hs_syn
+        }}}}
   where
     mk_msg s exn = vcat [text "Exception when trying to" <+> text s <+> text "compile-time code:",
                         nest 2 (text (Panic.showException exn)),
@@ -505,8 +508,7 @@ lookupThName th_name@(TH.Name occ flavour)
            Nothing | not (isSrcRdrName rdr_name)       -- Exact, Orig
                    -> lookupImportedName rdr_name
                    | otherwise                         -- Unqual, Qual
-                   -> do { 
-                                 mb_name <- lookupSrcOcc_maybe rdr_name
+                   -> do { mb_name <- lookupSrcOcc_maybe rdr_name
                          ; case mb_name of
                              Just name -> return name
                              Nothing   -> failWithTc (notInScope th_name) }