@@ -9,10 +9,8 @@ Maintainer : The Idris Community.
9 PatternGuards, CPP #-}
9 PatternGuards, CPP #-}
11module Idris.REPL(
11module Idris.REPL(
12− getClient, getPkg, getPkgCheck, getPkgClean, getPkgMkDoc
13− , getPkgREPL, getPkgTest, getPort, getIBCSubDir
14− , idris, idrisMain, loadInputs
12+ idris, idrisMain, loadInputs
15− , opt, runClient, runMain
13+ , runClient, runMain
18import Idris.AbsSyntax
16import Idris.AbsSyntax
@@ -47,6 +45,7 @@ import Idris.TypeSearch (searchByType)
47import Idris.IBC (loadPkgIndex, writePkgIndex)
45import Idris.IBC (loadPkgIndex, writePkgIndex)
49import Idris.REPL.Browse (namesInNS, namespacesInNS)
47import Idris.REPL.Browse (namesInNS, namespacesInNS)
48+import Idris.REPL.Commands
51import Idris.ElabDecls
50import Idris.ElabDecls
52import Idris.Elab.Type
51import Idris.Elab.Type
@@ -226,9 +225,10 @@ processNetCmd orig i h fn cmd
226 IdeMode n _ -> ist {idris_outputmode = IdeMode n h}
225 IdeMode n _ -> ist {idris_outputmode = IdeMode n h}
228-- | Run a command on the server on localhost
227-- | Run a command on the server on localhost
229−runClient :: PortID -> String -> IO ()
228+runClient :: Maybe PortID -> String -> IO ()
230runClient port str = withSocketsDo $ do
229runClient port str = withSocketsDo $ do
230+ let port' = fromMaybe defaultPort port
231− res <- X.try (connectTo "localhost" port)
231+ res <- X.try (connectTo "localhost" port')
232 case res of
232 case res of
233 Right h -> do
233 Right h -> do
234 hSetEncoding h utf8
234 hSetEncoding h utf8
@@ -1707,14 +1707,19 @@ idrisMain opts =
1707 let cgFlags = opt getCodegenArgs opts
1707 let cgFlags = opt getCodegenArgs opts
1709 -- Now set/unset specifically chosen optimisations
1709 -- Now set/unset specifically chosen optimisations
1710− sequence_ (opt getOptimisation opts)
1710+ let os = opt getOptimisation opts
1712+ mapM_ processOptimisation os
1711 script <- case opt getExecScript opts of
1714 script <- case opt getExecScript opts of
1712 [] -> return Nothing
1715 [] -> return Nothing
1713 x:y:xs -> do iputStrLn "More than one interpreter expression found."
1716 x:y:xs -> do iputStrLn "More than one interpreter expression found."
1714 runIO $ exitWith (ExitFailure 1)
1717 runIO $ exitWith (ExitFailure 1)
1715 [expr] -> return (Just expr)
1718 [expr] -> return (Just expr)
1716 let immediate = opt getEvalExpr opts
1719 let immediate = opt getEvalExpr opts
1717− let port = getPort opts
1720+ let port = case getPort opts of
1721+ Nothing -> defaultPort
1719 when (DefaultTotal `elem` opts) $ do i <- getIState
1724 when (DefaultTotal `elem` opts) $ do i <- getIState
1720 putIState (i { default_total = DefaultCheckingTotal })
1725 putIState (i { default_total = DefaultCheckingTotal })
@@ -1829,6 +1834,10 @@ idrisMain opts =
1829 makeOption ErrContext = setErrContext True
1834 makeOption ErrContext = setErrContext True
1830 makeOption _ = return ()
1835 makeOption _ = return ()
1837+ processOptimisation :: (Bool,Optimisation) -> Idris ()
1838+ processOptimisation (True, p) = addOptimise p
1839+ processOptimisation (False, p) = removeOptimise p
1832 addPkgDir :: String -> Idris ()
1841 addPkgDir :: String -> Idris ()
1833 addPkgDir p = do ddir <- runIO getIdrisLibDir
1842 addPkgDir p = do ddir <- runIO getIdrisLibDir
1834 addImportDir (ddir </> p)
1843 addImportDir (ddir </> p)
@@ -1882,133 +1891,7 @@ initScript = do script <- runIO $ getIdrisInitScript
1882 Success (Right cmd ) -> process [] cmd
1891 Success (Right cmd ) -> process [] cmd
1883 Success (Left err) -> runIO $ print err
1892 Success (Left err) -> runIO $ print err
1885−getFile :: Opt -> Maybe String
1886−getFile (Filename str) = Just str
1889−getBC :: Opt -> Maybe String
1890−getBC (BCAsm str) = Just str
1893−getOutput :: Opt -> Maybe String
1894−getOutput (Output str) = Just str
1895−getOutput _ = Nothing
1897−getIBCSubDir :: Opt -> Maybe String
1898−getIBCSubDir (IBCSubDir str) = Just str
1899−getIBCSubDir _ = Nothing
1901−getImportDir :: Opt -> Maybe String
1902−getImportDir (ImportDir str) = Just str
1903−getImportDir _ = Nothing
1905−getPkgDir :: Opt -> Maybe String
1906−getPkgDir (Pkg str) = Just str
1907−getPkgDir _ = Nothing
1909−getPkg :: Opt -> Maybe (Bool, String)
1910−getPkg (PkgBuild str) = Just (False, str)
1911−getPkg (PkgInstall str) = Just (True, str)
1914−getPkgClean :: Opt -> Maybe String
1915−getPkgClean (PkgClean str) = Just str
1916−getPkgClean _ = Nothing
1918−getPkgREPL :: Opt -> Maybe String
1919−getPkgREPL (PkgREPL str) = Just str
1920−getPkgREPL _ = Nothing
1922−getPkgCheck :: Opt -> Maybe String
1923−getPkgCheck (PkgCheck str) = Just str
1924−getPkgCheck _ = Nothing
1926−-- | Returns None if given an Opt which is not PkgMkDoc
1927−-- Otherwise returns Just x, where x is the contents of PkgMkDoc
1928−getPkgMkDoc :: Opt -- ^ Opt to extract
1929− -> Maybe String -- ^ Result
1930−getPkgMkDoc (PkgMkDoc str) = Just str
1931−getPkgMkDoc _ = Nothing
1933−getPkgTest :: Opt -- ^ the option to extract
1934− -> Maybe String -- ^ the package file to test
1935−getPkgTest (PkgTest f) = Just f
1936−getPkgTest _ = Nothing
1938−getCodegen :: Opt -> Maybe Codegen
1939−getCodegen (UseCodegen x) = Just x
1940−getCodegen _ = Nothing
1942−getCodegenArgs :: Opt -> Maybe String
1943−getCodegenArgs (CodegenArgs args) = Just args
1944−getCodegenArgs _ = Nothing
1946−getConsoleWidth :: Opt -> Maybe ConsoleWidth
1947−getConsoleWidth (UseConsoleWidth x) = Just x
1948−getConsoleWidth _ = Nothing
1951−getExecScript :: Opt -> Maybe String
1952−getExecScript (InterpretScript expr) = Just expr
1953−getExecScript _ = Nothing
1955−getPkgIndex :: Opt -> Maybe FilePath
1956−getPkgIndex (PkgIndex file) = Just file
1957−getPkgIndex _ = Nothing
1959−getEvalExpr :: Opt -> Maybe String
1960−getEvalExpr (EvalExpr expr) = Just expr
1961−getEvalExpr _ = Nothing
1963−getOutputTy :: Opt -> Maybe OutputType
1964−getOutputTy (OutputTy t) = Just t
1965−getOutputTy _ = Nothing
1967−getLanguageExt :: Opt -> Maybe LanguageExt
1968−getLanguageExt (Extension e) = Just e
1969−getLanguageExt _ = Nothing
1971−getTriple :: Opt -> Maybe String
1972−getTriple (TargetTriple x) = Just x
1973−getTriple _ = Nothing
1975−getCPU :: Opt -> Maybe String
1976−getCPU (TargetCPU x) = Just x
1979−getOptLevel :: Opt -> Maybe Int
1980−getOptLevel (OptLevel x) = Just x
1981−getOptLevel _ = Nothing
1983−getOptimisation :: Opt -> Maybe (Idris ())
1984−getOptimisation (AddOpt p) = Just $ addOptimise p
1985−getOptimisation (RemoveOpt p) = Just $ removeOptimise p
1986−getOptimisation _ = Nothing
1988−getColour :: Opt -> Maybe Bool
1989−getColour (ColourREPL b) = Just b
1990−getColour _ = Nothing
1992−getClient :: Opt -> Maybe String
1993−getClient (Client x) = Just x
1994−getClient _ = Nothing
1996−-- Get the first valid port
1997−getPort :: [Opt] -> PortID
1998−getPort [] = defaultPort
2000− | all (`elem` ['0'..'9']) p = PortNumber $ fromIntegral (read p)
2001− | otherwise = getPort xs
2002−getPort (_:xs) = getPort xs
2004−opt :: (Opt -> Maybe a) -> [Opt] -> [a]
2008−ver = showVersion version ++ suffix
2010− suffix = if gitHash =="" then "" else "-" ++ gitHash
2012defaultPort :: PortID
1895defaultPort :: PortID
2013defaultPort = PortNumber (fromIntegral 4294)
1896defaultPort = PortNumber (fromIntegral 4294)