#include "HsVersions.h"
#ifdef GHCI
-import HsSyn ( Stmt(..) )
-import TcHsSyn ( TypecheckedHsExpr )
+import HsSyn ( Stmt(..), LStmt, LHsExpr )
import IfaceSyn ( IfaceDecl )
import CodeOutput ( outputForeignStubs )
import ByteCodeGen ( byteCodeGen, coreExprToBCOs )
import CorePrep ( corePrepExpr )
import Flattening ( flattenExpr )
import TcRnDriver ( tcRnStmt, tcRnExpr, tcRnThing )
-import RdrHsSyn ( RdrNameStmt )
-import RdrName ( GlobalRdrEnv )
+import RdrName ( RdrName, GlobalRdrEnv )
import Type ( Type )
import PrelNames ( iNTERACTIVE )
import StringBuffer ( stringToStringBuffer )
-import SrcLoc ( noSrcLoc )
+import SrcLoc ( noSrcLoc, Located(..) )
+import Var ( Id )
import Name ( Name )
import CoreLint ( lintUnfolding )
import DsMeta ( templateHaskellNames )
import StringBuffer ( hGetStringBuffer )
import Parser
-import Lexer ( P(..), ParseResult(..), mkPState, showPFailed )
+import Lexer ( P(..), ParseResult(..), mkPState )
import SrcLoc ( mkSrcLoc )
import TcRnDriver ( tcRnModule, tcRnExtCore )
import TcIface ( typecheckIface )
import CmdLineOpts
import DriverPhases ( isExtCoreFilename )
-import ErrUtils ( dumpIfSet, dumpIfSet_dyn, showPass )
+import ErrUtils ( dumpIfSet, dumpIfSet_dyn, showPass, printError )
import UniqSupply ( mkSplitUniqSupply )
import Outputable
case unP parseModule (mkPState buf loc dflags) of {
- PFailed l1 l2 err -> do { hPutStrLn stderr (showSDoc (showPFailed l1 l2 err));
- return Nothing };
+ PFailed span err -> do { printError span err ;
+ return Nothing };
POk _ rdr_module -> do {
hscTcExpr hsc_env icontext expr
= do { maybe_stmt <- hscParseStmt (hsc_dflags hsc_env) expr
; case maybe_stmt of {
- Just (ExprStmt expr _ _)
+ Just (L _ (ExprStmt expr _))
-> tcRnExpr hsc_env icontext expr ;
Just other -> do { hPutStrLn stderr ("not an expression: `" ++ expr ++ "'") ;
return Nothing } ;
\end{code}
\begin{code}
-hscParseStmt :: DynFlags -> String -> IO (Maybe RdrNameStmt)
+hscParseStmt :: DynFlags -> String -> IO (Maybe (LStmt RdrName))
hscParseStmt dflags str
= do showPass dflags "Parser"
_scc_ "Parser" do
case unP parseStmt (mkPState buf loc dflags) of {
- PFailed l1 l2 err -> do { hPutStrLn stderr (showSDoc (showPFailed l1 l2 err));
- return Nothing };
+ PFailed span err -> do { printError span err;
+ return Nothing };
-- no stmt: the line consisted of just space or comments
POk _ Nothing -> return Nothing;
= do maybe_rdr_name <- myParseIdentifier (hsc_dflags hsc_env) str
case maybe_rdr_name of {
Nothing -> return [];
- Just rdr_name -> do
+ Just (L _ rdr_name) -> do
maybe_tc_result <- tcRnThing hsc_env ic rdr_name
let loc = mkSrcLoc FSLIT("<interactive>") 1 0
case unP parseIdentifier (mkPState buf loc dflags) of
- PFailed l1 l2 err -> do { hPutStrLn stderr (showSDoc (showPFailed l1 l2 err));
- return Nothing }
+ PFailed span err -> do { printError span err;
+ return Nothing }
POk _ rdr_name -> return (Just rdr_name)
#endif
#ifdef GHCI
compileExpr :: HscEnv
-> Module -> GlobalRdrEnv -> TypeEnv
- -> TypecheckedHsExpr
+ -> LHsExpr Id
-> IO HValue
compileExpr hsc_env this_mod rdr_env type_env tc_expr