@@ -9,10 +9,8 @@ Maintainer : The Idris Community.
99 PatternGuards, CPP #-}
1010
1111module Idris.REPL(
12− getClient, getPkg, getPkgCheck, getPkgClean, getPkgMkDoc
13− , getPkgREPL, getPkgTest, getPort, getIBCSubDir
14− , idris, idrisMain, loadInputs
15− , opt, runClient, runMain
12+ idris, idrisMain, loadInputs
13+ , runClient, runMain
1614 ) where
1715
1816import Idris.AbsSyntax
@@ -47,6 +45,7 @@ import Idris.TypeSearch (searchByType)
4745import Idris.IBC (loadPkgIndex, writePkgIndex)
4846
4947import Idris.REPL.Browse (namesInNS, namespacesInNS)
48+import Idris.REPL.Commands
5049
5150import Idris.ElabDecls
5251import Idris.Elab.Type
@@ -226,9 +225,10 @@ processNetCmd orig i h fn cmd
226225 IdeMode n _ -> ist {idris_outputmode = IdeMode n h}
227226
228227-- | Run a command on the server on localhost
229−runClient :: PortID -> String -> IO ()
228+runClient :: Maybe PortID -> String -> IO ()
230229runClient port str = withSocketsDo $ do
231− res <- X.try (connectTo "localhost" port)
230+ let port' = fromMaybe defaultPort port
231+ res <- X.try (connectTo "localhost" port')
232232 case res of
233233 Right h -> do
234234 hSetEncoding h utf8
@@ -1707,14 +1707,19 @@ idrisMain opts =
17071707 let cgFlags = opt getCodegenArgs opts
17081708
17091709 -- Now set/unset specifically chosen optimisations
1710− sequence_ (opt getOptimisation opts)
1710+ let os = opt getOptimisation opts
1711+
1712+ mapM_ processOptimisation os
1713+
17111714 script <- case opt getExecScript opts of
17121715 [] -> return Nothing
17131716 x:y:xs -> do iputStrLn "More than one interpreter expression found."
17141717 runIO $ exitWith (ExitFailure 1)
17151718 [expr] -> return (Just expr)
17161719 let immediate = opt getEvalExpr opts
1717− let port = getPort opts
1720+ let port = case getPort opts of
1721+ Nothing -> defaultPort
1722+ Just p -> p
17181723
17191724 when (DefaultTotal `elem` opts) $ do i <- getIState
17201725 putIState (i { default_total = DefaultCheckingTotal })
@@ -1829,6 +1834,10 @@ idrisMain opts =
18291834 makeOption ErrContext = setErrContext True
18301835 makeOption _ = return ()
18311836
1837+ processOptimisation :: (Bool,Optimisation) -> Idris ()
1838+ processOptimisation (True, p) = addOptimise p
1839+ processOptimisation (False, p) = removeOptimise p
1840+
18321841 addPkgDir :: String -> Idris ()
18331842 addPkgDir p = do ddir <- runIO getIdrisLibDir
18341843 addImportDir (ddir </> p)
@@ -1882,133 +1891,7 @@ initScript = do script <- runIO $ getIdrisInitScript
18821891 Success (Right cmd ) -> process [] cmd
18831892 Success (Left err) -> runIO $ print err
18841893
1885−getFile :: Opt -> Maybe String
1886−getFile (Filename str) = Just str
1887−getFile _ = Nothing
18881894
1889−getBC :: Opt -> Maybe String
1890−getBC (BCAsm str) = Just str
1891−getBC _ = Nothing
1892−
1893−getOutput :: Opt -> Maybe String
1894−getOutput (Output str) = Just str
1895−getOutput _ = Nothing
1896−
1897−getIBCSubDir :: Opt -> Maybe String
1898−getIBCSubDir (IBCSubDir str) = Just str
1899−getIBCSubDir _ = Nothing
1900−
1901−getImportDir :: Opt -> Maybe String
1902−getImportDir (ImportDir str) = Just str
1903−getImportDir _ = Nothing
1904−
1905−getPkgDir :: Opt -> Maybe String
1906−getPkgDir (Pkg str) = Just str
1907−getPkgDir _ = Nothing
1908−
1909−getPkg :: Opt -> Maybe (Bool, String)
1910−getPkg (PkgBuild str) = Just (False, str)
1911−getPkg (PkgInstall str) = Just (True, str)
1912−getPkg _ = Nothing
1913−
1914−getPkgClean :: Opt -> Maybe String
1915−getPkgClean (PkgClean str) = Just str
1916−getPkgClean _ = Nothing
1917−
1918−getPkgREPL :: Opt -> Maybe String
1919−getPkgREPL (PkgREPL str) = Just str
1920−getPkgREPL _ = Nothing
1921−
1922−getPkgCheck :: Opt -> Maybe String
1923−getPkgCheck (PkgCheck str) = Just str
1924−getPkgCheck _ = Nothing
1925−
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
1932−
1933−getPkgTest :: Opt -- ^ the option to extract
1934− -> Maybe String -- ^ the package file to test
1935−getPkgTest (PkgTest f) = Just f
1936−getPkgTest _ = Nothing
1937−
1938−getCodegen :: Opt -> Maybe Codegen
1939−getCodegen (UseCodegen x) = Just x
1940−getCodegen _ = Nothing
1941−
1942−getCodegenArgs :: Opt -> Maybe String
1943−getCodegenArgs (CodegenArgs args) = Just args
1944−getCodegenArgs _ = Nothing
1945−
1946−getConsoleWidth :: Opt -> Maybe ConsoleWidth
1947−getConsoleWidth (UseConsoleWidth x) = Just x
1948−getConsoleWidth _ = Nothing
1949−
1950−
1951−getExecScript :: Opt -> Maybe String
1952−getExecScript (InterpretScript expr) = Just expr
1953−getExecScript _ = Nothing
1954−
1955−getPkgIndex :: Opt -> Maybe FilePath
1956−getPkgIndex (PkgIndex file) = Just file
1957−getPkgIndex _ = Nothing
1958−
1959−getEvalExpr :: Opt -> Maybe String
1960−getEvalExpr (EvalExpr expr) = Just expr
1961−getEvalExpr _ = Nothing
1962−
1963−getOutputTy :: Opt -> Maybe OutputType
1964−getOutputTy (OutputTy t) = Just t
1965−getOutputTy _ = Nothing
1966−
1967−getLanguageExt :: Opt -> Maybe LanguageExt
1968−getLanguageExt (Extension e) = Just e
1969−getLanguageExt _ = Nothing
1970−
1971−getTriple :: Opt -> Maybe String
1972−getTriple (TargetTriple x) = Just x
1973−getTriple _ = Nothing
1974−
1975−getCPU :: Opt -> Maybe String
1976−getCPU (TargetCPU x) = Just x
1977−getCPU _ = Nothing
1978−
1979−getOptLevel :: Opt -> Maybe Int
1980−getOptLevel (OptLevel x) = Just x
1981−getOptLevel _ = Nothing
1982−
1983−getOptimisation :: Opt -> Maybe (Idris ())
1984−getOptimisation (AddOpt p) = Just $ addOptimise p
1985−getOptimisation (RemoveOpt p) = Just $ removeOptimise p
1986−getOptimisation _ = Nothing
1987−
1988−getColour :: Opt -> Maybe Bool
1989−getColour (ColourREPL b) = Just b
1990−getColour _ = Nothing
1991−
1992−getClient :: Opt -> Maybe String
1993−getClient (Client x) = Just x
1994−getClient _ = Nothing
1995−
1996−-- Get the first valid port
1997−getPort :: [Opt] -> PortID
1998−getPort [] = defaultPort
1999−getPort (Port p:xs)
2000− | all (`elem` ['0'..'9']) p = PortNumber $ fromIntegral (read p)
2001− | otherwise = getPort xs
2002−getPort (_:xs) = getPort xs
2003−
2004−opt :: (Opt -> Maybe a) -> [Opt] -> [a]
2005−opt = mapMaybe
2006−
2007−{-
2008−ver = showVersion version ++ suffix
2009− where
2010− suffix = if gitHash =="" then "" else "-" ++ gitHash
2011−-}
20121895defaultPort :: PortID
20131896defaultPort = PortNumber (fromIntegral 4294)
20141897