husk-scheme 3.5.3 → 3.5.3.1
raw patch · 6 files changed
+28/−13 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- hs-src/Compiler/huskc.hs +9/−0
- hs-src/Interpreter/shell.hs +10/−10
- hs-src/Language/Scheme/Core.hs +1/−1
- hs-src/Language/Scheme/Numerical.hs +2/−0
- hs-src/Language/Scheme/Parser.hs +5/−1
- husk-scheme.cabal +1/−1
hs-src/Compiler/huskc.hs view
@@ -77,6 +77,7 @@ options = [ Option ['V'] ["version"] (NoArg showVersion) "show version number", Option ['h', '?'] ["help"] (NoArg showHelp) "show usage information",+ Option [] ["debug"] (NoArg showDebug) "show debug information", Option ['o'] ["output"] (ReqArg writeExec "FILE") "output file to write", Option ['d'] ["dynamic"] (NoArg getDynamic) "use dynamic linking for the compiled executable", Option ['x'] ["extra"] (ReqArg getExtraArgs "Args") "extra arguments to ghc"@@ -108,6 +109,14 @@ putStrLn " --dynamic Use dynamic Haskell libraries, if available" putStrLn " (Requires libraries built via --enable-shared)" putStrLn " --extra args Pass extra arguments directly to ghc"+ putStrLn ""+ exitWith ExitSuccess++-- |Print debug information+showDebug :: Options -> IO Options+showDebug _ = do+ stdlib <- getDataFileName "stdlib.scm"+ putStrLn $ "stdlib: " ++ stdlib putStrLn "" exitWith ExitSuccess
hs-src/Interpreter/shell.hs view
@@ -33,26 +33,26 @@ runOne :: [String] -> IO () runOne args = do- {- Use this to suppress unwanted output.- Makes this unix-specific, but as of now- everything else is anyway, so... -}- nullIO <- openFile "/dev/null" WriteMode- stdlib <- getDataFileName "stdlib.scm" env <- primitiveBindings >>= flip extendEnv [((varNamespace, "args"), List $ map String $ drop 1 args)] _ <- evalString env $ "(load \"" ++ stdlib ++ "\")" -- Load standard library- (runIOThrows $ liftM show $ evalLisp env (List [Atom "load", String (args !! 0)]))- >>= hPutStr nullIO+ result <- (runIOThrows $ liftM show $ evalLisp env (List [Atom "load", String (args !! 0)]))+ case result of+ "" -> putStr result+ _ -> putStrLn result -- Call into (main) if it exists... alreadyDefined <- liftIO $ isBound env "main" let argv = List $ map String $ args if alreadyDefined- then (runIOThrows $ liftM show $ evalLisp env- (List [Atom "main", List [Atom "quote", argv]])) >>= hPutStr stderr- else (runIOThrows $ liftM show $ evalLisp env (Nil "")) >>= hPutStr stderr+ then do + mainResult <- (runIOThrows $ liftM show $ evalLisp env (List [Atom "main", List [Atom "quote", argv]]))+ case mainResult of+ "" -> putStr mainResult+ _ -> putStrLn mainResult+ else putStr "" runRepl :: IO () runRepl = do
hs-src/Language/Scheme/Core.hs view
@@ -37,7 +37,7 @@ import System.IO version :: String-version = "3.5.3"+version = "3.5.3.1" showBanner :: IO () showBanner = do
hs-src/Language/Scheme/Numerical.hs view
@@ -69,6 +69,8 @@ doMul (List [(Complex a), (Complex b)]) = return $ Complex $ a * b doMul _ = throwError $ Default "Unexpected error in *" numDiv [] = throwError $ NumArgs 1 []+numDiv [Number 0] = throwError $ DivideByZero +numDiv [Rational 0] = throwError $ DivideByZero numDiv [Number n] = return $ Rational $ 1 / (fromInteger n) numDiv [Float n] = return $ Float $ 1.0 / n numDiv [Rational n] = return $ Rational $ 1 / n
hs-src/Language/Scheme/Parser.hs view
@@ -179,7 +179,11 @@ num <- many1 (digit) if (length sign) > 1 then pzero- else return $ Rational $ n % (read $ sign ++ num)+ else do+ let pdenominator = read $ sign ++ num+ if pdenominator == 0+ then return $ Number 0 -- TODO: Prevents a div-by-zero error, but not really correct either+ else return $ Rational $ n % pdenominator _ -> pzero parseComplexNumber :: Parser LispVal
husk-scheme.cabal view
@@ -1,5 +1,5 @@ Name: husk-scheme-Version: 3.5.3+Version: 3.5.3.1 Synopsis: R5RS Scheme interpreter, compiler, and library. Description: A dialect of R5RS Scheme written in Haskell. Provides advanced features including continuations, hygienic macros, a Haskell FFI,