ministg 0.2 → 0.3
raw patch · 7 files changed
+24/−19 lines, 7 filesdep −haskell98
Dependencies removed: haskell98
Files
- ministg.cabal +8/−4
- src/Main.hs +2/−2
- src/Ministg/Arity.hs +2/−1
- src/Ministg/Eval.hs +5/−1
- src/Ministg/Options.hs +2/−2
- test/fac_stack.stg +0/−9
- test/non_exhaustive_pattern.stg +5/−0
ministg.cabal view
@@ -1,5 +1,5 @@ name: ministg-version: 0.2+version: 0.3 cabal-version: >= 1.6 synopsis: an interpreter for an operational semantics for the STG machine. description: ministg is an interpreter for a simple high-level operational semantics for the STG machine. The@@ -11,19 +11,23 @@ category: Language license: BSD3 license-file: LICENSE-copyright: (c) 2009 Bernard James Pope+copyright: (c) 2009, 2010, 2011 Bernard James Pope author: Bernard James Pope -maintainer: bjpop@csse.unimelb.edu.au+maintainer: florbitous@gmail.com homepage: http://www.haskell.org/haskellwiki/Ministg build-type: Simple stability: experimental tested-with: GHC==6.10.4 extra-source-files: README.txt test/*.stg +source-repository head+ type: git+ location: https://github.com/bjpop/ministg.git + Executable ministg main-is: Main.hs hs-source-dirs: src- build-depends: base >= 3 && < 5, monads-tf, transformers, containers, parsec >= 3, pretty, haskell98, xhtml, directory, filepath+ build-depends: base >= 3 && < 5, monads-tf, transformers, containers, parsec >= 3, pretty, xhtml, directory, filepath other-modules: Ministg.AST Ministg.Lexer
src/Main.hs view
@@ -14,12 +14,12 @@ module Main where -import System (exitFailure)+import System.Exit (exitFailure) import Ministg.AST (Program (Program)) import Ministg.Parser (parser) import Ministg.Lexer (lexer, Token) import Control.Monad (when, unless)-import System (getArgs, exitFailure)+import System.Environment (getArgs) import System.Directory (doesDirectoryExist, createDirectory) import Ministg.Utils (safeReadFile) import Ministg.Arity (runArity)
src/Ministg/Arity.hs view
@@ -15,7 +15,8 @@ module Ministg.Arity (runArity, Arity) where -import Data.Map as Map+import qualified Data.Map as Map+import Data.Map (Map) import Control.Monad.Reader import Control.Applicative import Ministg.AST
src/Ministg/Eval.hs view
@@ -16,7 +16,8 @@ import Control.Monad.State (evalStateT, gets) import Control.Monad.Trans (liftIO)-import Data.Map as Map hiding (map)+import qualified Data.Map as Map+import Data.Map (Map) import Data.List (foldl') import Ministg.AST import Ministg.CallStack (CallStack, push, showCallStack)@@ -85,6 +86,9 @@ let newExp = subs (mkSub var (Variable newVar)) exp return $ Just (newExp, stack, newHeap) -- CASECON+-- We don't catch pattern match errors here because we assume+-- that the compiler will insert a default clause which will+-- fire if no previous pattern matches. smallStep _anyStyle (Case (Atom (Variable v)) alts) stack heap | Con constructor args <- lookupHeap v heap, Just (vars, exp) <- exactPatternMatch constructor alts = do
src/Ministg/Options.hs view
@@ -31,8 +31,8 @@ import Data.Maybe (fromMaybe) import Data.Char (toLower, isDigit) import Data.Maybe (catMaybes)-import IO (stderr, hPutStrLn)-import System+import System.IO (stderr, hPutStrLn)+import System.Exit programName :: String programName = "ministg"
− test/fac_stack.stg
@@ -1,9 +0,0 @@-fac = FUN (x -> stack "fac"- case eqInt x zero of {- True -> one;- False -> let { s = THUNK(subInt x one);- rec = THUNK(fac s) }- in multInt x rec- });--main = THUNK (stack "main" fac seven)
+ test/non_exhaustive_pattern.stg view
@@ -0,0 +1,5 @@+foo = CON(Foo);+end = CON(End);+main = THUNK(+ case foo of { Bar -> end; x -> error; }+);