epic 0.1.5 → 0.1.7
raw patch · 23 files changed
+816/−2967 lines, 23 filesdep +epicsetup-changed
Dependencies added: epic
Files
- Epic/Bytecode.lhs +32/−12
- Epic/CodegenC.lhs +34/−5
- Epic/Compiler.lhs +3/−13
- Epic/Language.lhs +29/−1
- Epic/Lexer.lhs +27/−1
- Epic/Parser.y +37/−4
- Epic/Scopecheck.lhs +9/−9
- Main.lhs +0/−144
- Setup.hs +8/−6
- dist/build/Epic/Parser.hs +0/−1368
- dist/build/Epic/epic-tmp/Epic/Parser.hs +0/−1368
- epic.cabal +7/−8
- evm/Makefile +5/−4
- evm/closure.c +255/−2
- evm/closure.h +93/−12
- evm/emalloc.c +21/−0
- evm/emalloc.h +9/−0
- evm/gc_header.h +12/−0
- evm/libevm.a binary
- evm/mainprog.c +15/−9
- evm/stdfuns.c +62/−1
- evm/stdfuns.h +10/−0
- main/Main.lhs +148/−0
Epic/Bytecode.lhs view
@@ -20,6 +20,10 @@ > | ADDARGS TmpVar TmpVar [TmpVar] > | FOREIGN Type TmpVar String [(TmpVar, Type)] > | VAR TmpVar Local+> | GROWROOT Int+> | ADDVARROOT Local+> | ADDTMPROOT TmpVar+> | DROPROOTS Int > | ASSIGN Local TmpVar > | TMPASSIGN TmpVar TmpVar > | NOASSIGN Local TmpVar -- No-op, but flag not to eval the register@@ -44,6 +48,11 @@ > | LABEL Int > | WHILE Bytecode Bytecode > | WHILEACC Bytecode TmpVar Bytecode+> -- MEMORY allocates a pool of (2nd) TmpVar bytes, runs the +> -- code using that pool for allocation, then copies the +> -- result (1st TmpVar) into the previously active pool and +> -- deallocates the used pool.+> | MEMORY Allocator TmpVar TmpVar Bytecode > | BREAKFALSE TmpVar > | JFALSE TmpVar Int > | JUMP Int@@ -59,7 +68,7 @@ > type Bytecode = [ByteOp] -> data FunCode = Code [Type] Bytecode+> data FunCode = Code Int [Type] Bytecode > deriving Show > data CompileState = CS { arg_types :: [Type],@@ -72,9 +81,9 @@ > compile :: Context -> Name -> Func -> FunCode > compile ctxt fname fn@(Bind args locals def flags) = > let cs = (CS (map snd args) (length args) 1 [] 1 0)-> code = evalState (scompile ctxt fname fn) cs +> (code, state) = runState (scompile ctxt fname fn) cs > opt = peephole' evalled code in-> Code (map snd args) opt+> Code (num_locals state + next_tmp state) (map snd args) opt > where evalled | elem Strict flags = [] --take locals [0..] > | otherwise = [] @@ -86,7 +95,9 @@ > code <- ecomp (False, True) Tail def 0 (length args) > cs <- get > return $ (LOCALS (num_locals cs)):+> (GROWROOT (num_locals cs + next_tmp cs)): > (TRACE (show fname) [0..(length args)-1]):+> map ADDVARROOT [0..(length args)-1] ++ > (TMPS (max_tmp cs)):(CONSTS (string_pool cs)):code ++ > [RETURN 0] @@ -143,23 +154,24 @@ > savetmp <- get_tmp > code <- acomp tcall lazy (R x) [] reg vs > set_tmp savetmp-> return code+> return (code ++ [ADDTMPROOT reg]) > ecomp lazy tcall (App f as) reg vs = do > savetmp <- get_tmp > code <- acomp tcall lazy f as reg vs > set_tmp savetmp-> return code+> return (code ++ [ADDTMPROOT reg]) > ecomp (lazy, update) tcall (Lazy e) reg vs = ecomp (True, update) tcall e reg vs > ecomp (lazy, update) tcall (Effect e) reg vs = > do ecode <- ecomp (lazy, False) tcall e reg vs-> return (ecode ++ [EVAL reg False])+> return (ecode ++ [EVAL reg False, ADDTMPROOT reg]) > ecomp lazy tcall (Con t as) reg vs = > do (argcode, argregs) <- ecomps lazy as vs-> return $ argcode ++ [CON reg t argregs]+> return $ argcode ++ [CON reg t argregs, ADDTMPROOT reg] > ecomp lazy tcall (Proj con i) reg vs = > do reg' <- new_tmp > concode <- ecomp lazy Middle con reg' vs-> return $ concode ++ [EVAL reg' (snd lazy), PROJ reg reg' i]+> return $ concode ++ [EVAL reg' (snd lazy), PROJ reg reg' i,+> ADDTMPROOT reg] > ecomp lazy tcall (Const c) reg vs = ccomp c reg > ecomp lazy tcall (Case scrutinee alts) reg vs = > do screg <- new_tmp@@ -172,6 +184,11 @@ > tcode <- ecomp lazy tcall t reg vs > ecode <- ecomp lazy tcall e reg vs > return $ acode ++ [EVAL areg (snd lazy), IF areg tcode ecode]+> ecomp lazy tcall (WithMem a e val) reg vs =+> do ereg <- new_tmp+> ecode <- ecomp lazy Middle e ereg vs+> valcode <- ecomp lazy Middle val reg vs+> return $ ecode ++ [EVAL ereg (snd lazy), MEMORY a reg ereg valcode] > ecomp lazy tcall (While t b) reg vs = > do savetmp <- get_tmp > start <- new_label@@ -211,7 +228,8 @@ > rcode <- ecomp lazy Middle r rreg vs > set_tmp savetmp > return $ lcode ++ [EVAL lreg (snd lazy)] ++ -> rcode ++ [EVAL rreg (snd lazy), OP reg op lreg rreg]+> rcode ++ [EVAL rreg (snd lazy), OP reg op lreg rreg,+> ADDTMPROOT reg] > ecomp lazy tcall (Let nm ty val scope) reg vs = > do loc <- new_locals 1 > reg' <- new_tmp@@ -220,7 +238,7 @@ > let assigncode = case ty of > TyUnit -> [ASSIGN vs reg'] > _ -> [ASSIGN vs reg']-> return $ valcode ++ assigncode ++ scopecode+> return $ valcode ++ assigncode ++ (ADDVARROOT vs):scopecode > ecomp lazy tcall (Error str) reg vs = return [ERROR str] > ecomp lazy tcall Impossible reg vs = return [ERROR "The impossible happened."] > ecomp lazy tcall (ForeignCall ty fn argtypes) reg vs = do@@ -229,13 +247,15 @@ > (argcode, argregs) <- ecompsEv lazy args vs > -- let evalcode = if (snd lazy) then [] else map (\x -> EVAL x (snd lazy)) argregs > set_tmp savetmp-> return $ argcode ++ [FOREIGN ty reg fn (zip argregs types)]+> return $ argcode ++ [FOREIGN ty reg fn (zip argregs types),+> ADDTMPROOT reg] > ecomp lazy tcall (LazyForeignCall ty fn argtypes) reg vs = do > savetmp <- get_tmp > let (args,types) = unzip argtypes > (argcode, argregs) <- ecomps lazy args vs > set_tmp savetmp-> return $ argcode ++ [FOREIGN ty reg fn (zip argregs types)]+> return $ argcode ++ [FOREIGN ty reg fn (zip argregs types),+> ADDTMPROOT reg] > ecomps :: (Bool, Bool) -> [Expr] -> Int -> State CompileState (Bytecode, [TmpVar]) > ecomps lazy e vs = ecomps' lazy [] [] e vs
Epic/CodegenC.lhs view
@@ -65,6 +65,7 @@ > quickcall fname ++ "(" ++ > wrapperArgs (length args) ++ ");\n}\n\n" ++ > wrappers xs+> wrappers (decl@(CType n):xs) = exportC decl > wrappers (_:xs) = wrappers xs > wrapperArgs 0 = ""@@ -87,7 +88,7 @@ > thunk fn = "_wrap_" ++ showC fn > compileBody :: FunCode -> String-> compileBody (Code args bytecode) = +> compileBody (Code numlocs args bytecode) = > let (code, b) = runState (cgs bytecode) 0 in > if (b>0) then "void** block;\n" ++ code else code -- = EMALLOC("++show b++"*sizeof(void*));\n"++code else code > where@@ -102,8 +103,9 @@ > cg (CALL t fn args) = return $ tmp t ++ " = " ++ quickcall fn ++ > targs "(" args ++ ");"-> cg (TAILCALL t fn args) = return $ "return " ++ quickcall fn ++ -> targs "(" args ++ ");"+> cg (TAILCALL t fn args) +> = return $ "DROPROOTS; return " ++ +> quickcall fn ++ targs "(" args ++ ");" > cg (THUNK t ar fn []) = do > return $ tmp t ++ > " = (void*)CLOSURE(" ++ thunk fn ++ ", " ++ @@ -121,6 +123,10 @@ > (fn ++ "(" ++ foreignArgs args ++ ")") > ++ ";" > cg (VAR t l) = return $ tmp t ++ " = " ++ loc l ++ ";"+> cg (GROWROOT i) = return $ "GROWROOT;"+> cg (ADDVARROOT l) = return $ "ADDROOT(" ++ loc l ++ ");"+> cg (ADDTMPROOT l) = return $ "ADDROOT(" ++ tmp l ++ ");"+> cg (DROPROOTS i) = return $ "DROPROOTS;" > cg (ASSIGN l t) = return $ loc l ++ " = " ++ tmp t ++ ";" > cg (TMPASSIGN t1 t2) = return $ tmp t1 ++ " = " ++ tmp t2 ++ ";" > cg (NOASSIGN l t) = return $ "// " ++ loc l ++ " = " ++ tmp t ++ ";"@@ -143,6 +149,13 @@ > cg (BREAKFALSE t) > = return $ -- "assertInt(" ++ tmp t ++ ");\n" ++ > "if (!GETINT(" ++ tmp t ++ ")) break;"+> cg (MEMORY alloc r t b) = +> do bcode <- cgs b+> return $ pool alloc ++ "(" ++ tmp t ++ ");\n" +++> bcode +++> "CLEARPOOL(" ++ tmp r ++ ");\n"+> where pool FixedPool = "NEWFIXEDPOOL"+> pool GrowablePool = "NEWGROWABLEPOOL" > cg (WHILE t b) = do tcode <- cgs t > bcode <- cgs b > return $ "while (1) { " ++ tcode ++ "\n" ++ bcode ++ "}"@@ -178,8 +191,8 @@ > cg (EVAL v False) = return $ tmp v ++ "=(void*)EVAL_NOUP((VAL)"++tmp v++");" > cg (EVALINT v True) = return $ tmp v ++ "=(void*)EVALINT((VAL)"++tmp v++");" > cg (EVALINT v False) = return $ tmp v ++ "=(void*)EVALINT_NOUP((VAL)"++tmp v++");"-> cg (RETURN t) = return $ "return "++tmp t++";"-> cg DRETURN = return $ "return NULL;"+> cg (RETURN t) = return $ "DROPROOTS; return "++tmp t++";"+> cg DRETURN = return $ "DROPROOTS; return NULL;" > cg (ERROR s) = return $ "ERROR("++show s++");" > cg (COMMENT s) = return $ " // " ++ show s > cg (TRACE s args) = return $ "TRACE {\n\tprintf(\"%s\\n\", " ++ show s ++ ");\n" ++@@ -258,6 +271,7 @@ > cToEpic var TyInt = "MKINT(INTTOEINT(" ++ var ++ "))" > cToEpic var TyPtr = "MKPTR(" ++ var ++ ")" > cToEpic var TyBigInt = "MKBIGINT((mpz_t*)(" ++ var ++ "))"+> cToEpic var TyFloat = "MKFLOAT(" ++ var ++ ")" > cToEpic var TyUnit = "NULL" > cToEpic var _ = "(void*)(" ++ var ++")" @@ -275,7 +289,9 @@ > epicToC t TyInt = "EINTTOINT(GETINT("++ t ++"))" > epicToC t TyBigInt = "*(GETBIGINT("++ t ++"))" > epicToC t TyString = "GETSTR("++ t ++")"+> epicToC t TyFloat = "GETFLOAT(" ++ t ++ ")" > epicToC t TyPtr = "GETPTR("++ t ++")"+> epicToC t TyChar = "EINTTOINT(GETINT("++ t ++"))" > epicToC t _ = t > foreignArg (t, ty) = epicToC (tmp t) ty@@ -290,6 +306,10 @@ > doOp t Minus l r = tmp t ++ " = INTOP(-,"++tmp l ++ ", "++tmp r++");" > doOp t Times l r = tmp t ++ " = MULT("++tmp l ++ ", "++tmp r++");" > doOp t Divide l r = tmp t ++ " = INTOP(/,"++tmp l ++ ", "++tmp r++");"+> doOp t FPlus l r = tmp t ++ " = FLOATOP(+,"++tmp l ++ ", "++tmp r++");"+> doOp t FMinus l r = tmp t ++ " = FLOATOP(-,"++tmp l ++ ", "++tmp r++");"+> doOp t FTimes l r = tmp t ++ " = FLOATOP(*,"++tmp l ++ ", "++tmp r++");"+> doOp t FDivide l r = tmp t ++ " = FLOATOP(/,"++tmp l ++ ", "++tmp r++");" > doOp t ShL l r = tmp t ++ " = INTOP(<<,"++tmp l ++ ", "++tmp r++");" > doOp t ShR l r = tmp t ++ " = INTOP(>>,"++tmp l ++ ", "++tmp r++");" > doOp t OpEQ l r = tmp t ++ " = INTOP(==,"++tmp l ++ ", "++tmp r++");"@@ -297,6 +317,11 @@ > doOp t OpLT l r = tmp t ++ " = INTOP(<,"++tmp l ++ ", "++tmp r++");" > doOp t OpGE l r = tmp t ++ " = INTOP(>=,"++tmp l ++ ", "++tmp r++");" > doOp t OpLE l r = tmp t ++ " = INTOP(<=,"++tmp l ++ ", "++tmp r++");"+> doOp t OpFEQ l r = tmp t ++ " = FLOATBOP(==,"++tmp l ++ ", "++tmp r++");"+> doOp t OpFGT l r = tmp t ++ " = FLOATBOP(>,"++tmp l ++ ", "++tmp r++");"+> doOp t OpFLT l r = tmp t ++ " = FLOATBOP(<,"++tmp l ++ ", "++tmp r++");"+> doOp t OpFGE l r = tmp t ++ " = FLOATBOP(>=,"++tmp l ++ ", "++tmp r++");"+> doOp t OpFLE l r = tmp t ++ " = FLOATBOP(<=,"++tmp l ++ ", "++tmp r++");" Write out code for an export @@ -305,6 +330,7 @@ > cty TyBool = "int" > cty TyString = "char*" > cty TyUnit = "void"+> cty (TyCType n) = n > cty _ = "void*" > ctys [] = ""@@ -321,6 +347,7 @@ > ";\n\n" ++ > "}" > where conv (nm, ty) = cToEpic (showuser nm) ty+> exportC (CType n) = "typedef void* " ++ n ++ ";\n" > exportC _ = "" ... and in the header file@@ -328,4 +355,6 @@ > exportH :: Decl -> String > exportH (Decl nm rt (Bind args _ _ _) (Just cname) _) = > cty rt ++ " " ++ cname ++ "(" ++ ctys args ++ ");\n"+> exportH (CType n) = "typedef void* " ++ n ++ ";\n" > exportH _ = ""+
Epic/Compiler.lhs view
@@ -30,16 +30,6 @@ > import Paths_epic -> -- | (Debugging) options to give to compiler-> data CompileOptions = KeepC -- ^ Keep intermediate C file-> | Trace -- ^ Generate trace at run-time (debug)-> | ShowBytecode -- ^ Show generated code-> | ShowParseTree -- ^ Show parse tree-> | MakeHeader FilePath -- ^ Output a .h file too-> | GCCOpt String -- ^ Extra GCC option-> | Debug -- ^ Generate debug info-> deriving Eq- > addGCC :: [CompileOptions] -> String > addGCC [] = "" > addGCC ((GCCOpt s):xs) = s ++ " " ++ addGCC xs@@ -80,13 +70,13 @@ > Success ds -> do > (tmpn,tmph) <- tempfile > let hdr = outputHeader opts-> scchecked <- checkAll ds+> scchecked <- checkAll opts ds > let simplified = simplifyAll scchecked > checked <- compileDecls simplified tmph hdr > fp <- getDataFileName "evm/closure.h" > let libdir = trimLast fp > let dbg = if (elem Debug opts) then "-g" else "-O3"-> let cmd = "gcc -c " ++ dbg ++ " -foptimize-sibling-calls -x c " ++ tmpn ++ " -I" ++ libdir ++ " -o " ++ outf ++ " " ++ addGCC opts ++ doTrace opts+> let cmd = "gcc -DUSE_BOEHM -c " ++ dbg ++ " -foptimize-sibling-calls -x c " ++ tmpn ++ " -I" ++ libdir ++ " -o " ++ outf ++ " " ++ addGCC opts ++ doTrace opts > -- putStrLn $ cmd > -- putStrLn $ fp > exit <- system cmd@@ -130,7 +120,7 @@ > fp <- getDataFileName "evm/closure.h" > let libdir = trimLast fp > let dbg = if (elem Debug opts) then "-g" else "-O3"-> let cmd = "gcc -x c " ++ dbg ++ " -foptimize-sibling-calls " ++ mainprog ++ " -x none -L" +++> let cmd = "gcc -DUSE_BOEHM -x c " ++ dbg ++ " -foptimize-sibling-calls " ++ mainprog ++ " -x none -L" ++ > libdir++" -I"++libdir ++ " " ++ > (concat (map (++" ") infs)) ++ > " -levm -lgc -lpthread -lgmp -o "++outf
Epic/Language.lhs view
@@ -2,6 +2,17 @@ > import Control.Monad +> -- | (Debugging) options to give to compiler+> data CompileOptions = KeepC -- ^ Keep intermediate C file+> | Trace -- ^ Generate trace at run-time (debug)+> | ShowBytecode -- ^ Show generated code+> | ShowParseTree -- ^ Show parse tree+> | MakeHeader FilePath -- ^ Output a .h file too+> | GCCOpt String -- ^ Extra GCC option+> | Debug -- ^ Generate debug info+> | Checking Int -- ^ Checking level (0 none)+> deriving Eq+ Raw data types. Int, Char, Bool are unboxed. > data Type = TyInt@@ -15,6 +26,7 @@ > | TyUnit > | TyAny -- unchecked, polymorphic > | TyData -- generic data type+> | TyCType String -- Exported, C typedef > | TyFun -- any function > deriving Eq @@ -30,6 +42,7 @@ > show TyUnit = "Unit" > show TyAny = "Any" > show TyData = "Data"+> show (TyCType s) = "CType " ++ s > show TyFun = "Fun" > data Const = MkInt Int@@ -91,6 +104,7 @@ > | Let Name Type Expr Expr -- Let binding > | Error String -- Exit with error message > | Impossible -- Claimed impossible to reach code+> | WithMem Allocator Expr Expr -- evaluate with manual allocation > | ForeignCall Type String [(Expr, Type)] -- Foreign function call > | LazyForeignCall Type String [(Expr, Type)] -- Foreign function call > deriving Eq@@ -110,7 +124,12 @@ > compare (DefaultCase _) (Alt _ _ _) = GT > compare _ _ = EQ +> data Allocator = FixedPool | GrowablePool+> deriving Eq+ > data Op = Plus | Minus | Times | Divide | OpEQ | OpLT | OpLE | OpGT | OpGE+> | FPlus | FMinus | FTimes | FDivide+> | OpFEQ | OpFLT | OpFLE | OpFGT | OpFGE > | ShL | ShR > deriving (Show, Eq) @@ -138,10 +157,15 @@ > show v ++ " in " ++ show e > show (Error e) = "error(" ++ show e ++ ")" > show Impossible = "Impossible"+> show (WithMem a m e) = "%memory(" ++ show a ++ "," ++ show m ++ ", " ++ show e ++ ")" > show (ForeignCall t s as) = "foreign " ++ show t ++ " " ++ > show s ++ show as > show (LazyForeignCall t s as) = "lazy foreign " ++ show t ++ " " ++ > show s ++ show as++> instance Show Allocator where+> show FixedPool = "%fixed"+> show GrowablePool = "%growable" Supercombinator definitions @@ -164,7 +188,7 @@ > fargs :: [Type] } > | Include String > | Link String-> | CType Name+> | CType String > deriving Show > data CGFlag = Inline | Strict@@ -199,6 +223,10 @@ > appForm _ = False +> checkLevel :: [CompileOptions] -> Int+> checkLevel [] = 0+> checkLevel (Checking i:_) = i+> checkLevel (_:xs) = checkLevel xs Some tests
Epic/Lexer.lhs view
@@ -63,6 +63,7 @@ > | TokenUnitType > | TokenAnyType > | TokenDataType+> | TokenTyCType > | TokenFunType > | TokenForeign > | TokenCInclude@@ -78,12 +79,21 @@ > | TokenMinus > | TokenTimes > | TokenDivide+> | TokenFPlus+> | TokenFMinus+> | TokenFTimes+> | TokenFDivide > | TokenEquals > | TokenEQ > | TokenGE > | TokenLE > | TokenGT > | TokenLT+> | TokenFEQ+> | TokenFGE+> | TokenFLE+> | TokenFGT+> | TokenFLT > | TokenShL > | TokenShR > | TokenArrow@@ -112,6 +122,9 @@ > | TokenComma > | TokenBar > | TokenExtern+> | TokenMemory+> | TokenFixed+> | TokenGrowable > | TokenInclude > | TokenEOF > deriving (Show, Eq)@@ -136,10 +149,19 @@ > lexer cont ('}':cs) = cont TokenCCB cs > lexer cont ('[':cs) = cont TokenOSB cs > lexer cont (']':cs) = cont TokenCSB cs+> lexer cont ('+':'.':cs) = cont TokenFPlus cs+> lexer cont ('-':'.':cs) = cont TokenFMinus cs+> lexer cont ('*':'.':cs) = cont TokenFTimes cs+> lexer cont ('/':'.':cs) = cont TokenFDivide cs > lexer cont ('+':cs) = cont TokenPlus cs > lexer cont ('-':cs) = cont TokenMinus cs > lexer cont ('*':cs) = cont TokenTimes cs > lexer cont ('/':cs) = cont TokenDivide cs+> lexer cont ('=':'=':'.':cs) = cont TokenFEQ cs+> lexer cont ('>':'=':'.':cs) = cont TokenFGE cs+> lexer cont ('<':'=':'.':cs) = cont TokenFLE cs+> lexer cont ('>':'.':cs) = cont TokenFGT cs+> lexer cont ('<':'.':cs) = cont TokenFLT cs > lexer cont ('=':'=':cs) = cont TokenEQ cs > lexer cont ('>':'=':cs) = cont TokenGE cs > lexer cont ('<':'=':cs) = cont TokenLE cs@@ -156,7 +178,7 @@ > lexer cont ('%':cs) = lexSpecial cont cs > lexer cont (c:cs) = lexError c cs -> lexError c s l = failP (show l ++ ": Unrecognised token '" ++ [c] ++ "'\n") s l+> lexError c s f l = failP (show l ++ ": Unrecognised token '" ++ [c] ++ "'\n") s f l > lexerEatComment nls cont ('-':'}':cs) > = \fn line -> lexer cont cs fn (line+nls)@@ -219,6 +241,7 @@ > ("Ptr",rest) -> cont TokenPtrType rest > ("Unit",rest) -> cont TokenUnitType rest > ("Data",rest) -> cont TokenDataType rest+> ("CType",rest) -> cont TokenTyCType rest > ("Fun",rest) -> cont TokenFunType rest > ("Any",rest) -> cont TokenAnyType rest > -- values@@ -253,6 +276,9 @@ > ("effect",rest) -> cont TokenEffect rest > ("strict",rest) -> cont TokenStrict rest > ("while",rest) -> cont TokenWhile rest+> ("memory",rest) -> cont TokenMemory rest+> ("fixed",rest) -> cont TokenFixed rest+> ("growable",rest) -> cont TokenGrowable rest > ("unused", rest) -> cont TokenUnused rest > (thing,rest) -> lexError '%' rest
Epic/Parser.y view
@@ -38,6 +38,7 @@ unittype { TokenUnitType } funtype { TokenFunType } datatype { TokenDataType }+ tyctype { TokenTyCType } anytype { TokenAnyType } unit { TokenUnit } con { TokenCon }@@ -49,6 +50,9 @@ then { TokenThen } else { TokenElse } while { TokenWhile }+ memory { TokenMemory }+ fixed { TokenFixed }+ growable { TokenGrowable } unused { TokenUnused } in { TokenIn } lazy { TokenLazy }@@ -67,14 +71,23 @@ '-' { TokenMinus } '*' { TokenTimes } '/' { TokenDivide }+ fplus { TokenFPlus }+ fminus { TokenFMinus }+ ftimes { TokenFTimes }+ fdiv { TokenFDivide } '=' { TokenEquals } eq { TokenEQ } le { TokenLE } ge { TokenGE }+ feq { TokenFEQ }+ fle { TokenFLE }+ fge { TokenFGE } shl { TokenShL } shr { TokenShR } '<' { TokenLT } '>' { TokenGT }+ flt { TokenFLT }+ fgt { TokenFGT } ':' { TokenColon } '!' { TokenProj } ';' { TokenSemi }@@ -92,12 +105,12 @@ %nonassoc lazy %left LET %left IF-%left eq+%left eq feq %left ';'-%left '<' '>' le ge+%left '<' '>' le ge flt fgt fle fge %left shl shr-%left '+' '-'-%left '*' '/'+%left '+' '-' fplus fminus+%left '*' '/' ftimes fdiv %left NEG %left '!' %nonassoc '('@@ -128,6 +141,7 @@ | unittype { TyUnit } | anytype { TyAny } | datatype { TyData }+ | tyctype string { TyCType $2 } | funtype { TyFun } Declaration :: { Decl }@@ -136,6 +150,7 @@ | extern name '(' TypeList ')' arrow Type { mkExtern $2 (map snd $4) $7 (map fst $4) } | cinclude string { Include $2 }+ | ctype string { CType $2 } Flags :: { [CGFlag] } Flags : { [] }@@ -169,6 +184,7 @@ | if Expr then Expr else Expr %prec IF { If $2 $4 $6 } | while '(' Expr ',' Expr ')' { While $3 $5 } | while '(' Expr ',' Expr ',' Expr ')' { WhileAcc $3 $5 $7 }+ | memory '(' Allocator ',' Expr ',' Expr ')' { WithMem $3 $5 $7 } | CaseExpr { $1 } | MathExpr { $1 } | errorcode string { Error $2 }@@ -178,6 +194,10 @@ | lazy foreign Type string '(' ExprTypeList ')' { LazyForeignCall $3 $4 $6 } +Allocator :: { Allocator }+Allocator : fixed { FixedPool }+ | growable { GrowablePool }+ CaseExpr :: { Expr } CaseExpr : case Expr of '{' Alts '}' { Case $2 $5 } @@ -199,6 +219,13 @@ | '-' Expr %prec NEG { Op Minus (Const (MkInt 0)) $2 } | Expr '*' Expr { Op Times $1 $3 } | Expr '/' Expr { Op Divide $1 $3 }++ | Expr fplus Expr { Op FPlus $1 $3 }+ | Expr fminus Expr { Op FMinus $1 $3 }+ | fminus Expr %prec NEG { Op FMinus (Const (MkInt 0)) $2 }+ | Expr ftimes Expr { Op FTimes $1 $3 }+ | Expr fdiv Expr { Op FDivide $1 $3 }+ | Expr shl Expr { Op ShL $1 $3 } | Expr shr Expr { Op ShR $1 $3 } | Expr '<' Expr { Op OpLT $1 $3 }@@ -206,6 +233,12 @@ | Expr le Expr { Op OpLE $1 $3 } | Expr ge Expr { Op OpGE $1 $3 } | Expr eq Expr { Op OpEQ $1 $3 }++ | Expr flt Expr { Op OpFLT $1 $3 }+ | Expr fgt Expr { Op OpFGT $1 $3 }+ | Expr fle Expr { Op OpFLE $1 $3 }+ | Expr fge Expr { Op OpFGE $1 $3 }+ | Expr feq Expr { Op OpFEQ $1 $3 } ExprList :: { [Expr] } ExprList : { [] }
Epic/Scopecheck.lhs view
@@ -10,13 +10,13 @@ > import Debug.Trace -> checkAll :: Monad m => [Decl] -> m (Context, [Decl])-> checkAll xs = do let ctxt = mkContext xs-> ds <- ca (mkContext xs) xs-> return (mkContext ds,ds)+> checkAll :: Monad m => [CompileOptions] -> [Decl] -> m (Context, [Decl])+> checkAll opts xs = do let ctxt = mkContext xs+> ds <- ca (mkContext xs) xs+> return (mkContext ds,ds) > where ca ctxt [] = return [] > ca ctxt ((Decl nm rt fn exp fl):xs) = -> do (fn', newds) <- scopecheck ctxt nm fn+> do (fn', newds) <- scopecheck (checkLevel opts) ctxt nm fn > xs' <- ca ctxt (newds ++ xs) > return $ (Decl nm rt fn' exp fl):xs' > ca ctxt (x:xs) =@@ -35,8 +35,8 @@ a new function. Returns the modified function, and a list of new declarations. The new declarations will *not* have been scopechecked. -> scopecheck :: Monad m => Context -> Name -> Func -> m (Func, [Decl])-> scopecheck ctxt nm (Bind args locs exp fl) = do+> scopecheck :: Monad m => Int -> Context -> Name -> Func -> m (Func, [Decl])+> scopecheck checking ctxt nm (Bind args locs exp fl) = do > (exp', (locs', _, ds)) <- runStateT (tc (v_ise args 0) exp) (length args, 0, []) > return $ (Bind args locs' exp' fl, ds) > where@@ -44,8 +44,8 @@ > getRoot (MN nm i) = "_" ++ nm ++ "_" ++ show i > tc env (R n) = case lookup n env of > Nothing -> case lookup n ctxt of-> Nothing -> return $ Const (MkInt 1234567890)-> -- lift $ fail $ "Unknown name " ++ showuser n+> Nothing -> if (checking > 0) then lift $ fail $ "Unknown name " ++ showuser n+> else return $ Const (MkInt 1234567890) > (Just _) -> return $ R n > (Just i) -> return $ V i > tc env (Let n ty v sc) = do
− Main.lhs
@@ -1,144 +0,0 @@-> module Main where--> import System-> import System.Directory-> import System.Environment-> import System.IO-> import Distribution.Version-> import Monad--> import Epic.Compiler-> import Paths_epic--> versionString = showV (versionBranch version)-> where-> showV [] = ""-> showV [a] = show a-> showV (x:xs) = show x ++ "." ++ showV xs--> main = do args <- getArgs-> (fns, opts) <- getInput args-> outfile <- getOutput opts-> ofiles <- compileFiles fns (mkOpts opts)-> copts <- getCOpts opts-> extras <- getExtra opts-> if ((length ofiles) > 0 && (not (elem Obj opts)))-> then link (ofiles ++ copts) extras outfile (not (elem ExtMain opts)) (mkOpts opts)-> else return ()-> where mkOpts (KeepInt:xs) = KeepC:(mkOpts xs)-> mkOpts (TraceOn:xs) = Trace:(mkOpts xs)-> mkOpts (Header f:xs) = MakeHeader f:(mkOpts xs)-> mkOpts (_:xs) = mkOpts xs-> mkOpts [] = []--> compileFiles [] _ = return []-> compileFiles (fn:xs) opts-> | isDotE fn = do-> let ofile = getRoot fn ++ ".o"-> compileOpts fn ofile (Just (getRoot fn ++ ".ei")) opts-> rest <- compileFiles xs opts-> return (ofile:rest)-> | isDotO fn = do-> rest <- compileFiles xs opts-> return (fn:rest)-> | otherwise = do -- probably autogenerated, just build it.-> let ofile = fn ++ ".o"-> compileOpts fn ofile Nothing opts-> rest <- compileFiles xs opts-> return (ofile:rest)--> isDotE ('.':'e':[]) = True-> isDotE (_:xs) = isDotE xs-> isDotE [] = False--> isDotC ('.':'c':[]) = True-> isDotC (_:xs) = isDotC xs-> isDotC [] = False--> isDotO ('.':'o':[]) = True-> isDotO (_:xs) = isDotO xs-> isDotO [] = False--> mkExecname fn = case span (/='.') fn of-> (stem,".e") -> stem-> (stem,_) -> fn ++ ".exe"--> getRoot fn = case span (/='.') fn of-> (stem,_) -> stem--> getInput :: [String] -> IO ([FilePath],[Option])-> getInput args = do let opts = parseArgs args-> processFlags opts False-> fns <- getFile opts-> if (length fns == 0) -> then do showUsage-> return (fns,opts)-> else return (fns,opts)--> showUsage = do putStrLn $ "Epigram Supercombinator Compiler version " ++ versionString-> putStrLn "Usage:\n\tepic <input file> [options]"-> exitWith (ExitFailure 1)--> data Option = KeepInt -- Don't delete intermediate file-> | TraceOn -- Trace while running (debug option)-> | Obj -- Just make the .o, don't link-> | File String -- File to send the compiler-> | Output String -- Output filename-> | Header String -- Header output filename-> | ExtraInc String -- extra files to inlude-> | COpt String -- option to send straight to gcc-> | ExtMain -- external main (i.e. in a .o)-> | CFlags -- output include flags-> | LibFlags -- output linker flags-> | DbgInfo -- generate debug info-> deriving Eq--> parseArgs :: [String] -> [Option]-> parseArgs [] = []-> parseArgs ("-keepc":args) = KeepInt:(parseArgs args)-> parseArgs ("-trace":args) = TraceOn:(parseArgs args)-> parseArgs ("-c":args) = Obj:(parseArgs args)-> parseArgs ("-extmain":args) = ExtMain:(parseArgs args)-> parseArgs ("-o":name:args) = (Output name):(parseArgs args)-> parseArgs ("-h":name:args) = (Header name):(parseArgs args)-> parseArgs ("-i":inc:args) = (ExtraInc inc):(parseArgs args)-> parseArgs ("-includedirs":args) = CFlags:(parseArgs args)-> parseArgs ("-libdirs":args) = LibFlags:(parseArgs args)-> parseArgs ("-g":args) = DbgInfo:(parseArgs args)-> parseArgs (('$':x):args) = (COpt (x ++ concat (map (" "++) args))):[]-> parseArgs (('-':x):args) = (COpt x):(parseArgs args)-> parseArgs (x:args) = (File x):(parseArgs args)--> getFile :: [Option] -> IO [FilePath]-> getFile ((File x):xs) = do fns <- getFile xs-> return (x:fns)-> getFile (_:xs) = getFile xs-> getFile [] = return []--> getOutput :: [Option] -> IO FilePath-> getOutput ((Output fn):xs) = return fn-> getOutput (_:xs) = getOutput xs-> getOutput [] = return "a.out"--> getCOpts :: [Option] -> IO [String]-> getCOpts ((COpt x):xs) = do fns <- getCOpts xs-> return (x:fns)-> getCOpts (_:xs) = getCOpts xs-> getCOpts [] = return []--> getExtra :: [Option] -> IO [String]-> getExtra ((ExtraInc x):xs) = do fns <- getExtra xs-> return (x:fns)-> getExtra (_:xs) = getExtra xs-> getExtra [] = return []--> processFlags :: [Option] -> Bool -> IO ()-> processFlags [] True = do putStrLn ""; exitWith ExitSuccess-> processFlags [] False = return ()-> processFlags (LibFlags:xs) _ = do datadir <- getDataDir-> putStr $ "-L"++datadir++"/evm "-> processFlags xs True-> processFlags (CFlags:xs) _ = do datadir <- getDataDir-> putStr $ "-I"++datadir++"/evm "-> processFlags xs True-> processFlags (_:xs) quit = processFlags xs quit
Setup.hs view
@@ -7,12 +7,16 @@ -- After Epic is built, we need a run time system. +system' cmd = do + exit <- system cmd+ case exit of+ ExitSuccess -> return ()+ ExitFailure _ -> exitWith exit -- FIXME: This is probably all done the wrong way, I don't really understand -- Cabal properly... buildLib args flags desc local - = do exit <- system "make -C evm"- return ()+ = system' "make -C evm" -- This is a hack. I don't know how to tell cabal that a data file needs -- installing but shouldn't be in the distribution. And it won't make the@@ -20,15 +24,13 @@ -- the file after configure. postConfLib args flags desc local- = do exit <- system "make -C evm clean"- return ()+ = system' "make -C evm clean" addPrefix pfx var c = "export " ++ var ++ "=" ++ show pfx ++ "/" ++ c ++ ":$" ++ var postInstLib args flags desc local = do let pfx = prefix (installDirTemplates local)- exit <- system $ "make -C evm install PREFIX=" ++ show pfx- return ()+ system' $ "make -C evm install PREFIX=" ++ show pfx main = defaultMainWithHooks (simpleUserHooks { postBuild = buildLib, postConf = postConfLib,
− dist/build/Epic/Parser.hs
@@ -1,1368 +0,0 @@-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}-{-# OPTIONS -fglasgow-exts -cpp #-}--- -*-Haskell-*--{-# OPTIONS_GHC -fglasgow-exts #-}--module Epic.Parser where--import Char-import System.IO.Unsafe--import Epic.Language-import Epic.Lexer-#if __GLASGOW_HASKELL__ >= 503-import qualified Data.Array as Happy_Data_Array-#else-import qualified Array as Happy_Data_Array-#endif-#if __GLASGOW_HASKELL__ >= 503-import qualified GHC.Exts as Happy_GHC_Exts-#else-import qualified GlaExts as Happy_GHC_Exts-#endif---- parser produced by Happy Version 1.18.4--newtype HappyAbsSyn = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn4 :: ([Decl]) -> (HappyAbsSyn )-happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn4 #-}-happyOut4 :: (HappyAbsSyn ) -> ([Decl])-happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut4 #-}-happyIn5 :: (Type) -> (HappyAbsSyn )-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> (Type)-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (Decl) -> (HappyAbsSyn )-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (Decl)-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: ([CGFlag]) -> (HappyAbsSyn )-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> ([CGFlag])-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (CGFlag) -> (HappyAbsSyn )-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> (CGFlag)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (Maybe String) -> (HappyAbsSyn )-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> (Maybe String)-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: ([(Name,Type)]) -> (HappyAbsSyn )-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> ([(Name,Type)])-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Expr) -> (HappyAbsSyn )-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (Expr)-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (Expr) -> (HappyAbsSyn )-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> (Expr)-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: ([CaseAlt]) -> (HappyAbsSyn )-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> ([CaseAlt])-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (CaseAlt) -> (HappyAbsSyn )-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> (CaseAlt)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Expr) -> (HappyAbsSyn )-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (Expr)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: ([Expr]) -> (HappyAbsSyn )-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> ([Expr])-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: ([(Expr,Type)]) -> (HappyAbsSyn )-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> ([(Expr,Type)])-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Const) -> (HappyAbsSyn )-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> (Const)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (LineNumber) -> (HappyAbsSyn )-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> (LineNumber)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (String) -> (HappyAbsSyn )-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> (String)-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyInTok :: (Token) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x2d\x01\x1f\x00\x00\x00\xdf\xff\x52\x01\x4d\x01\x4b\x01\xfe\x00\xf5\x01\x40\x01\x2d\x01\x00\x00\x00\x00\x16\x01\x00\x00\x3b\x01\xdf\xff\x00\x00\x00\x00\x00\x00\x14\x01\x2a\x01\x00\x00\x00\x00\x08\x01\xf1\x00\x28\x01\xf0\x00\x69\x01\xdb\x00\x69\x01\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x69\x01\x15\x01\x00\x00\x00\x00\xe0\x00\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x01\x03\x01\x01\x00\x01\x00\xdc\x00\x00\x00\xf1\xff\xda\x00\x69\x01\x00\x01\x00\x00\x01\x00\x01\x00\x01\x00\xe7\xff\x86\x00\xd0\x00\xed\x00\x00\x00\xf2\x00\x01\x00\x69\x01\x01\x00\x01\x00\x18\x00\x03\x00\xb6\x00\xc5\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\xd7\x00\x01\x00\x23\x01\x00\x00\x35\x01\x35\x01\xe4\xff\xe4\xff\x35\x01\x35\x01\x11\x01\xe7\xff\xe7\xff\x37\x01\x37\x01\xc6\x00\x01\x00\x69\x01\xc4\x00\x01\x00\x74\x00\xd8\x00\xdd\x00\xc3\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xb1\x00\x00\x00\x01\x00\x34\x00\x2a\x00\x96\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x9b\x00\x8b\x00\x8f\x00\xbc\x00\x79\x00\x01\x00\x62\x00\x01\x00\xae\x00\x8a\x00\x00\x00\x69\x01\x89\x00\x00\x00\x01\x00\xff\x00\x01\x00\x7e\x00\x01\x00\x2a\x00\x00\x00\x4d\x00\x01\x00\x00\x00\xff\x00\x9f\x00\xff\x00\x9c\x00\x00\x00\x63\x00\x01\x00\x00\x00\x6b\x00\xff\x00\x50\x00\x00\x00\x01\x00\xff\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x37\x02\x0b\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x78\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x25\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x02\x1b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x19\x02\x97\x01\x11\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x02\x48\x00\x07\x02\x05\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x01\xfd\x01\xfb\x01\xf3\x01\xf1\x01\xe9\x01\xe7\x01\xdf\x01\xdd\x01\xd5\x01\xd3\x01\xcb\x01\x00\x00\xc9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x01\x43\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\xbf\x01\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\xad\x01\x00\x00\xab\x01\x00\x00\xa3\x01\x39\x00\x00\x00\x00\x00\xa1\x01\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xe8\xff\x00\x00\x00\x00\xec\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xff\x00\x00\xe8\xff\xfd\xff\xe7\xff\x00\x00\xed\xff\x00\x00\xec\xff\xe9\xff\xea\xff\xeb\xff\x00\x00\xe6\xff\xac\xff\xfc\xff\x00\x00\x00\x00\xe6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xfb\xff\xfa\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf0\xff\xf1\xff\xf2\xff\x00\x00\x00\x00\xe6\xff\xee\xff\xe4\xff\x00\x00\x00\x00\xef\xff\xd5\xff\xd4\xff\xdc\xff\xe3\xff\xb0\xff\xb6\xff\xb5\xff\xb3\xff\xb2\xff\xb1\xff\xb4\xff\xaf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\x00\x00\xbc\xff\x00\x00\xc6\xff\xbb\xff\x00\x00\x00\x00\xd3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xff\xdb\xff\xc0\xff\xc1\xff\xc2\xff\xc3\xff\xbe\xff\xbf\xff\xbd\xff\xc4\xff\xc5\xff\xc7\xff\xc8\xff\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xff\xe0\xff\xbc\xff\xba\xff\xb9\xff\xde\xff\x00\x00\xdf\xff\x00\x00\x00\x00\xce\xff\x00\x00\x00\x00\xe1\xff\xdd\xff\x00\x00\x00\x00\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\x00\x00\x00\x00\xd1\xff\x00\x00\x00\x00\xd7\xff\x00\x00\xd8\xff\x00\x00\x00\x00\x00\x00\xce\xff\xcf\xff\x00\x00\x00\x00\xcc\xff\xca\xff\xe6\xff\xc9\xff\x00\x00\xd0\xff\xb8\xff\xb9\xff\xd6\xff\x00\x00\xda\xff\x00\x00\xb7\xff\x00\x00\xcb\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x22\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x00\x00\x27\x00\x02\x00\x02\x00\x27\x00\x05\x00\x05\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x24\x00\x15\x00\x16\x00\x27\x00\x18\x00\x19\x00\x06\x00\x1b\x00\x1a\x00\x3a\x00\x1e\x00\x1f\x00\x3a\x00\x21\x00\x44\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x27\x00\x02\x00\x2b\x00\x03\x00\x05\x00\x2e\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x1c\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x01\x00\x3a\x00\x3b\x00\x27\x00\x16\x00\x17\x00\x09\x00\x0a\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x01\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x1d\x00\x3a\x00\x3b\x00\x09\x00\x0a\x00\x07\x00\x08\x00\x03\x00\x04\x00\x0b\x00\x27\x00\x0d\x00\x0e\x00\x3f\x00\x40\x00\x41\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x01\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x20\x00\x3a\x00\x3b\x00\x01\x00\x07\x00\x08\x00\x06\x00\x27\x00\x0b\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x10\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x06\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x03\x00\x04\x00\x06\x00\x3e\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x28\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x3c\x00\x3c\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x27\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x3c\x00\x28\x00\x28\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3e\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x03\x00\x3a\x00\x3b\x00\x3c\x00\x27\x00\x28\x00\x2a\x00\x28\x00\x31\x00\x3d\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3e\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x27\x00\x27\x00\x03\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x27\x00\x29\x00\x28\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x2c\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x27\x00\x02\x00\x27\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x03\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x31\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x01\x00\x3e\x00\x28\x00\x3e\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3c\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x01\x00\x39\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x28\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x27\x00\x01\x00\x27\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\x45\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x02\x00\x01\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x27\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x2f\x00\x30\x00\xff\xff\xff\xff\x35\x00\x36\x00\x3f\x00\x40\x00\x41\x00\x3a\x00\x43\x00\x3a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\xff\xff\x0d\x00\x0e\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\x0c\x00\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x43\x00\x02\x00\x45\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x12\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x16\x00\x5d\x00\x08\x00\x02\x00\x5d\x00\x03\x00\x03\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x56\x00\x40\x00\x41\x00\x57\x00\x42\x00\x43\x00\xb1\x00\x44\x00\x7b\x00\x69\x00\x45\x00\x46\x00\x69\x00\x47\x00\x13\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x0b\x00\x5d\x00\x08\x00\x4d\x00\x94\x00\x03\x00\x4e\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x7c\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\xae\x00\x69\x00\x6a\x00\x5d\x00\x95\x00\x96\x00\xa8\x00\x92\x00\x8c\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x7e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x97\x00\x69\x00\x6a\x00\x91\x00\x92\x00\x99\x00\x34\x00\x13\x00\x10\x00\x35\x00\x5d\x00\xb4\x00\x36\x00\x05\x00\x06\x00\x07\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x53\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\xa8\x00\x69\x00\x6a\x00\x31\x00\x99\x00\x34\x00\x30\x00\x5d\x00\x35\x00\x2f\x00\x9d\x00\x36\x00\x1f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x17\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x1b\x00\x69\x00\x6a\x00\x5d\x00\x9f\x00\x0f\x00\x10\x00\x18\x00\xb6\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xb4\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\xa0\x00\xb0\x00\x1a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xab\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x8a\x00\xae\x00\x9c\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa2\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\xa3\x00\x69\x00\x6a\x00\x84\x00\x5d\x00\xb1\x00\xa6\x00\x90\x00\x91\x00\xa5\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa4\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x99\x00\x86\x00\x6c\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x88\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x9d\x00\x69\x00\x6a\x00\x5d\x00\x87\x00\x79\x00\x8c\x00\x8f\x00\x7a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x81\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x83\x00\x69\x00\x6a\x00\x5d\x00\x89\x00\x55\x00\x53\x00\x58\x00\x5b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5c\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x33\x00\x69\x00\x6a\x00\x5d\x00\x82\x00\x1a\x00\x2e\x00\x2d\x00\x1f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x2f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x1a\x00\x1d\x00\x1a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x1b\x00\x15\x00\x16\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x0b\x00\xff\xff\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x0d\x00\x0e\x00\x00\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x0f\x00\x00\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x60\x00\x61\x00\x00\x00\x00\x00\x65\x00\x66\x00\x05\x00\x06\x00\x07\x00\x69\x00\x0a\x00\x69\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x99\x00\x34\x00\x00\x00\x00\x00\x35\x00\x00\x00\x9a\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x84\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x8d\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x77\x00\x00\x00\x36\x00\x4f\x00\x34\x00\xb6\x00\x34\x00\x35\x00\x50\x00\x35\x00\x36\x00\x00\x00\x36\x00\xb2\x00\x34\x00\xa9\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\xab\x00\x34\x00\xac\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\xa0\x00\x34\x00\xa6\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x97\x00\x34\x00\x8a\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6a\x00\x34\x00\x6c\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6d\x00\x34\x00\x6e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6f\x00\x34\x00\x70\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x71\x00\x34\x00\x72\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x73\x00\x34\x00\x74\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x75\x00\x34\x00\x76\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x7c\x00\x34\x00\x7d\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x7f\x00\x34\x00\x4e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x51\x00\x34\x00\x58\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x59\x00\x34\x00\x33\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x05\x00\x06\x00\x07\x00\x07\x00\x0a\x00\x08\x00\xfe\xff\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (1, 83) [- (1 , happyReduce_1),- (2 , happyReduce_2),- (3 , happyReduce_3),- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37),- (38 , happyReduce_38),- (39 , happyReduce_39),- (40 , happyReduce_40),- (41 , happyReduce_41),- (42 , happyReduce_42),- (43 , happyReduce_43),- (44 , happyReduce_44),- (45 , happyReduce_45),- (46 , happyReduce_46),- (47 , happyReduce_47),- (48 , happyReduce_48),- (49 , happyReduce_49),- (50 , happyReduce_50),- (51 , happyReduce_51),- (52 , happyReduce_52),- (53 , happyReduce_53),- (54 , happyReduce_54),- (55 , happyReduce_55),- (56 , happyReduce_56),- (57 , happyReduce_57),- (58 , happyReduce_58),- (59 , happyReduce_59),- (60 , happyReduce_60),- (61 , happyReduce_61),- (62 , happyReduce_62),- (63 , happyReduce_63),- (64 , happyReduce_64),- (65 , happyReduce_65),- (66 , happyReduce_66),- (67 , happyReduce_67),- (68 , happyReduce_68),- (69 , happyReduce_69),- (70 , happyReduce_70),- (71 , happyReduce_71),- (72 , happyReduce_72),- (73 , happyReduce_73),- (74 , happyReduce_74),- (75 , happyReduce_75),- (76 , happyReduce_76),- (77 , happyReduce_77),- (78 , happyReduce_78),- (79 , happyReduce_79),- (80 , happyReduce_80),- (81 , happyReduce_81),- (82 , happyReduce_82),- (83 , happyReduce_83)- ]--happy_n_terms = 70 :: Int-happy_n_nonterms = 17 :: Int--happyReduce_1 = happySpecReduce_1 0# happyReduction_1-happyReduction_1 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn4- ([happy_var_1]- )}--happyReduce_2 = happySpecReduce_2 0# happyReduction_2-happyReduction_2 happy_x_2- happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut4 happy_x_2 of { happy_var_2 -> - happyIn4- (happy_var_1:happy_var_2- )}}--happyReduce_3 = happyMonadReduce 4# 0# happyReduction_3-happyReduction_3 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - case happyOut4 happy_x_3 of { happy_var_3 -> - case happyOut20 happy_x_4 of { happy_var_4 -> - (- let rest = happy_var_3 in- let pt = unsafePerformIO (readFile happy_var_2) in- case (parse pt happy_var_4) of- Success x -> returnP (x ++ rest)- Failure err file ln -> failP err)}}}- ) (\r -> happyReturn (happyIn4 r))--happyReduce_4 = happySpecReduce_1 1# happyReduction_4-happyReduction_4 happy_x_1- = happyIn5- (TyInt- )--happyReduce_5 = happySpecReduce_1 1# happyReduction_5-happyReduction_5 happy_x_1- = happyIn5- (TyBigInt- )--happyReduce_6 = happySpecReduce_1 1# happyReduction_6-happyReduction_6 happy_x_1- = happyIn5- (TyChar- )--happyReduce_7 = happySpecReduce_1 1# happyReduction_7-happyReduction_7 happy_x_1- = happyIn5- (TyBool- )--happyReduce_8 = happySpecReduce_1 1# happyReduction_8-happyReduction_8 happy_x_1- = happyIn5- (TyFloat- )--happyReduce_9 = happySpecReduce_1 1# happyReduction_9-happyReduction_9 happy_x_1- = happyIn5- (TyBigFloat- )--happyReduce_10 = happySpecReduce_1 1# happyReduction_10-happyReduction_10 happy_x_1- = happyIn5- (TyString- )--happyReduce_11 = happySpecReduce_1 1# happyReduction_11-happyReduction_11 happy_x_1- = happyIn5- (TyPtr- )--happyReduce_12 = happySpecReduce_1 1# happyReduction_12-happyReduction_12 happy_x_1- = happyIn5- (TyUnit- )--happyReduce_13 = happySpecReduce_1 1# happyReduction_13-happyReduction_13 happy_x_1- = happyIn5- (TyAny- )--happyReduce_14 = happySpecReduce_1 1# happyReduction_14-happyReduction_14 happy_x_1- = happyIn5- (TyData- )--happyReduce_15 = happySpecReduce_1 1# happyReduction_15-happyReduction_15 happy_x_1- = happyIn5- (TyFun- )--happyReduce_16 = happyReduce 10# 2# happyReduction_16-happyReduction_16 (happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokenName happy_var_3) -> - case happyOut10 happy_x_5 of { happy_var_5 -> - case happyOut5 happy_x_8 of { happy_var_8 -> - case happyOut11 happy_x_10 of { happy_var_10 -> - happyIn6- (mkBind happy_var_3 (map snd happy_var_5) happy_var_8 (map fst happy_var_5) happy_var_10 happy_var_1 happy_var_2- ) `HappyStk` happyRest}}}}}}--happyReduce_17 = happyReduce 7# 2# happyReduction_17-happyReduction_17 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenName happy_var_2) -> - case happyOut10 happy_x_4 of { happy_var_4 -> - case happyOut5 happy_x_7 of { happy_var_7 -> - happyIn6- (mkExtern happy_var_2 (map snd happy_var_4) happy_var_7 (map fst happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_18 = happySpecReduce_2 2# happyReduction_18-happyReduction_18 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - happyIn6- (Include happy_var_2- )}--happyReduce_19 = happySpecReduce_0 3# happyReduction_19-happyReduction_19 = happyIn7- ([]- )--happyReduce_20 = happySpecReduce_2 3# happyReduction_20-happyReduction_20 happy_x_2- happy_x_1- = case happyOut8 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn7- (happy_var_1:happy_var_2- )}}--happyReduce_21 = happySpecReduce_1 4# happyReduction_21-happyReduction_21 happy_x_1- = happyIn8- (Inline- )--happyReduce_22 = happySpecReduce_1 4# happyReduction_22-happyReduction_22 happy_x_1- = happyIn8- (Strict- )--happyReduce_23 = happySpecReduce_0 5# happyReduction_23-happyReduction_23 = happyIn9- (Nothing- )--happyReduce_24 = happySpecReduce_2 5# happyReduction_24-happyReduction_24 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - happyIn9- (Just happy_var_2- )}--happyReduce_25 = happySpecReduce_0 6# happyReduction_25-happyReduction_25 = happyIn10- ([]- )--happyReduce_26 = happySpecReduce_3 6# happyReduction_26-happyReduction_26 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> - case happyOut5 happy_x_3 of { happy_var_3 -> - happyIn10- ([(happy_var_1,happy_var_3)]- )}}--happyReduce_27 = happyReduce 5# 6# happyReduction_27-happyReduction_27 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> - case happyOut5 happy_x_3 of { happy_var_3 -> - case happyOut10 happy_x_5 of { happy_var_5 -> - happyIn10- ((happy_var_1,happy_var_3):happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_28 = happySpecReduce_1 7# happyReduction_28-happyReduction_28 happy_x_1- = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> - happyIn11- (R happy_var_1- )}--happyReduce_29 = happySpecReduce_3 7# happyReduction_29-happyReduction_29 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_2 of { happy_var_2 -> - happyIn11- (happy_var_2- )}--happyReduce_30 = happyReduce 4# 7# happyReduction_30-happyReduction_30 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_3 of { happy_var_3 -> - happyIn11- (App happy_var_1 happy_var_3- ) `HappyStk` happyRest}}--happyReduce_31 = happySpecReduce_3 7# happyReduction_31-happyReduction_31 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn11- (Con 0 happy_var_2- )}--happyReduce_32 = happyReduce 4# 7# happyReduction_32-happyReduction_32 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn11- (Lazy happy_var_3- ) `HappyStk` happyRest}--happyReduce_33 = happyReduce 4# 7# happyReduction_33-happyReduction_33 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn11- (Effect happy_var_3- ) `HappyStk` happyRest}--happyReduce_34 = happyReduce 5# 7# happyReduction_34-happyReduction_34 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenInt happy_var_2) -> - case happyOut16 happy_x_4 of { happy_var_4 -> - happyIn11- (Con happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_35 = happySpecReduce_1 7# happyReduction_35-happyReduction_35 happy_x_1- = case happyOut18 happy_x_1 of { happy_var_1 -> - happyIn11- (Const happy_var_1- )}--happyReduce_36 = happySpecReduce_3 7# happyReduction_36-happyReduction_36 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> - happyIn11- (Proj happy_var_1 happy_var_3- )}}--happyReduce_37 = happyReduce 8# 7# happyReduction_37-happyReduction_37 (happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenName happy_var_2) -> - case happyOut5 happy_x_4 of { happy_var_4 -> - case happyOut11 happy_x_6 of { happy_var_6 -> - case happyOut11 happy_x_8 of { happy_var_8 -> - happyIn11- (Let happy_var_2 happy_var_4 happy_var_6 happy_var_8- ) `HappyStk` happyRest}}}}--happyReduce_38 = happySpecReduce_3 7# happyReduction_38-happyReduction_38 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn11- (Let (MN "unused" 0) TyUnit happy_var_1 happy_var_3- )}}--happyReduce_39 = happyReduce 6# 7# happyReduction_39-happyReduction_39 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_2 of { happy_var_2 -> - case happyOut11 happy_x_4 of { happy_var_4 -> - case happyOut11 happy_x_6 of { happy_var_6 -> - happyIn11- (If happy_var_2 happy_var_4 happy_var_6- ) `HappyStk` happyRest}}}--happyReduce_40 = happyReduce 6# 7# happyReduction_40-happyReduction_40 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - case happyOut11 happy_x_5 of { happy_var_5 -> - happyIn11- (While happy_var_3 happy_var_5- ) `HappyStk` happyRest}}--happyReduce_41 = happyReduce 8# 7# happyReduction_41-happyReduction_41 (happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - case happyOut11 happy_x_5 of { happy_var_5 -> - case happyOut11 happy_x_7 of { happy_var_7 -> - happyIn11- (WhileAcc happy_var_3 happy_var_5 happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_42 = happySpecReduce_1 7# happyReduction_42-happyReduction_42 happy_x_1- = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn11- (happy_var_1- )}--happyReduce_43 = happySpecReduce_1 7# happyReduction_43-happyReduction_43 happy_x_1- = case happyOut15 happy_x_1 of { happy_var_1 -> - happyIn11- (happy_var_1- )}--happyReduce_44 = happySpecReduce_2 7# happyReduction_44-happyReduction_44 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - happyIn11- (Error happy_var_2- )}--happyReduce_45 = happySpecReduce_1 7# happyReduction_45-happyReduction_45 happy_x_1- = happyIn11- (Impossible- )--happyReduce_46 = happyReduce 6# 7# happyReduction_46-happyReduction_46 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut5 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokenString happy_var_3) -> - case happyOut17 happy_x_5 of { happy_var_5 -> - happyIn11- (ForeignCall happy_var_2 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_47 = happyReduce 7# 7# happyReduction_47-happyReduction_47 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut5 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokenString happy_var_4) -> - case happyOut17 happy_x_6 of { happy_var_6 -> - happyIn11- (LazyForeignCall happy_var_3 happy_var_4 happy_var_6- ) `HappyStk` happyRest}}}--happyReduce_48 = happyReduce 6# 8# happyReduction_48-happyReduction_48 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_2 of { happy_var_2 -> - case happyOut13 happy_x_5 of { happy_var_5 -> - happyIn12- (Case happy_var_2 happy_var_5- ) `HappyStk` happyRest}}--happyReduce_49 = happySpecReduce_0 9# happyReduction_49-happyReduction_49 = happyIn13- ([]- )--happyReduce_50 = happySpecReduce_1 9# happyReduction_50-happyReduction_50 happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - happyIn13- ([happy_var_1]- )}--happyReduce_51 = happySpecReduce_3 9# happyReduction_51-happyReduction_51 happy_x_3- happy_x_2- happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - case happyOut13 happy_x_3 of { happy_var_3 -> - happyIn13- (happy_var_1:happy_var_3- )}}--happyReduce_52 = happyReduce 7# 10# happyReduction_52-happyReduction_52 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenInt happy_var_2) -> - case happyOut10 happy_x_4 of { happy_var_4 -> - case happyOut11 happy_x_7 of { happy_var_7 -> - happyIn14- (Alt happy_var_2 happy_var_4 happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_53 = happySpecReduce_3 10# happyReduction_53-happyReduction_53 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn14- (ConstAlt happy_var_1 happy_var_3- )}}--happyReduce_54 = happySpecReduce_3 10# happyReduction_54-happyReduction_54 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn14- (DefaultCase happy_var_3- )}--happyReduce_55 = happySpecReduce_3 11# happyReduction_55-happyReduction_55 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Plus happy_var_1 happy_var_3- )}}--happyReduce_56 = happySpecReduce_3 11# happyReduction_56-happyReduction_56 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Minus happy_var_1 happy_var_3- )}}--happyReduce_57 = happySpecReduce_2 11# happyReduction_57-happyReduction_57 happy_x_2- happy_x_1- = case happyOut11 happy_x_2 of { happy_var_2 -> - happyIn15- (Op Minus (Const (MkInt 0)) happy_var_2- )}--happyReduce_58 = happySpecReduce_3 11# happyReduction_58-happyReduction_58 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Times happy_var_1 happy_var_3- )}}--happyReduce_59 = happySpecReduce_3 11# happyReduction_59-happyReduction_59 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Divide happy_var_1 happy_var_3- )}}--happyReduce_60 = happySpecReduce_3 11# happyReduction_60-happyReduction_60 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op ShL happy_var_1 happy_var_3- )}}--happyReduce_61 = happySpecReduce_3 11# happyReduction_61-happyReduction_61 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op ShR happy_var_1 happy_var_3- )}}--happyReduce_62 = happySpecReduce_3 11# happyReduction_62-happyReduction_62 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpLT happy_var_1 happy_var_3- )}}--happyReduce_63 = happySpecReduce_3 11# happyReduction_63-happyReduction_63 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpGT happy_var_1 happy_var_3- )}}--happyReduce_64 = happySpecReduce_3 11# happyReduction_64-happyReduction_64 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpLE happy_var_1 happy_var_3- )}}--happyReduce_65 = happySpecReduce_3 11# happyReduction_65-happyReduction_65 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpGE happy_var_1 happy_var_3- )}}--happyReduce_66 = happySpecReduce_3 11# happyReduction_66-happyReduction_66 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpEQ happy_var_1 happy_var_3- )}}--happyReduce_67 = happySpecReduce_0 12# happyReduction_67-happyReduction_67 = happyIn16- ([]- )--happyReduce_68 = happySpecReduce_1 12# happyReduction_68-happyReduction_68 happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn16- ([happy_var_1]- )}--happyReduce_69 = happySpecReduce_3 12# happyReduction_69-happyReduction_69 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_3 of { happy_var_3 -> - happyIn16- (happy_var_1:happy_var_3- )}}--happyReduce_70 = happySpecReduce_0 13# happyReduction_70-happyReduction_70 = happyIn17- ([]- )--happyReduce_71 = happySpecReduce_3 13# happyReduction_71-happyReduction_71 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut5 happy_x_3 of { happy_var_3 -> - happyIn17- ([(happy_var_1,happy_var_3)]- )}}--happyReduce_72 = happyReduce 5# 13# happyReduction_72-happyReduction_72 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut5 happy_x_3 of { happy_var_3 -> - case happyOut17 happy_x_5 of { happy_var_5 -> - happyIn17- ((happy_var_1,happy_var_3):happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_73 = happySpecReduce_1 14# happyReduction_73-happyReduction_73 happy_x_1- = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> - happyIn18- (MkInt happy_var_1- )}--happyReduce_74 = happySpecReduce_1 14# happyReduction_74-happyReduction_74 happy_x_1- = case happyOutTok happy_x_1 of { (TokenBigInt happy_var_1) -> - happyIn18- (MkBigInt happy_var_1- )}--happyReduce_75 = happySpecReduce_1 14# happyReduction_75-happyReduction_75 happy_x_1- = case happyOutTok happy_x_1 of { (TokenChar happy_var_1) -> - happyIn18- (MkChar happy_var_1- )}--happyReduce_76 = happySpecReduce_1 14# happyReduction_76-happyReduction_76 happy_x_1- = case happyOutTok happy_x_1 of { (TokenBool happy_var_1) -> - happyIn18- (MkBool happy_var_1- )}--happyReduce_77 = happySpecReduce_1 14# happyReduction_77-happyReduction_77 happy_x_1- = case happyOutTok happy_x_1 of { (TokenFloat happy_var_1) -> - happyIn18- (MkFloat happy_var_1- )}--happyReduce_78 = happySpecReduce_1 14# happyReduction_78-happyReduction_78 happy_x_1- = case happyOutTok happy_x_1 of { (TokenBigFloat happy_var_1) -> - happyIn18- (MkBigFloat happy_var_1- )}--happyReduce_79 = happySpecReduce_1 14# happyReduction_79-happyReduction_79 happy_x_1- = case happyOutTok happy_x_1 of { (TokenString happy_var_1) -> - happyIn18- (MkString happy_var_1- )}--happyReduce_80 = happySpecReduce_1 14# happyReduction_80-happyReduction_80 happy_x_1- = happyIn18- (MkUnit- )--happyReduce_81 = happySpecReduce_1 14# happyReduction_81-happyReduction_81 happy_x_1- = happyIn18- (MkUnused- )--happyReduce_82 = happyMonadReduce 0# 15# happyReduction_82-happyReduction_82 (happyRest) tk- = happyThen (( getLineNo)- ) (\r -> happyReturn (happyIn19 r))--happyReduce_83 = happyMonadReduce 0# 16# happyReduction_83-happyReduction_83 (happyRest) tk- = happyThen (( getFileName)- ) (\r -> happyReturn (happyIn20 r))--happyNewToken action sts stk- = lexer(\tk -> - let cont i = happyDoAction i tk action sts stk in- case tk of {- TokenEOF -> happyDoAction 69# tk action sts stk;- TokenName happy_dollar_dollar -> cont 1#;- TokenString happy_dollar_dollar -> cont 2#;- TokenInt happy_dollar_dollar -> cont 3#;- TokenBigInt happy_dollar_dollar -> cont 4#;- TokenBool happy_dollar_dollar -> cont 5#;- TokenFloat happy_dollar_dollar -> cont 6#;- TokenBigFloat happy_dollar_dollar -> cont 7#;- TokenChar happy_dollar_dollar -> cont 8#;- TokenIntType -> cont 9#;- TokenBigIntType -> cont 10#;- TokenCharType -> cont 11#;- TokenBoolType -> cont 12#;- TokenFloatType -> cont 13#;- TokenBigFloatType -> cont 14#;- TokenStringType -> cont 15#;- TokenPtrType -> cont 16#;- TokenUnitType -> cont 17#;- TokenFunType -> cont 18#;- TokenDataType -> cont 19#;- TokenAnyType -> cont 20#;- TokenUnit -> cont 21#;- TokenCon -> cont 22#;- TokenDefault -> cont 23#;- TokenLet -> cont 24#;- TokenCase -> cont 25#;- TokenOf -> cont 26#;- TokenIf -> cont 27#;- TokenThen -> cont 28#;- TokenElse -> cont 29#;- TokenWhile -> cont 30#;- TokenUnused -> cont 31#;- TokenIn -> cont 32#;- TokenLazy -> cont 33#;- TokenStrict -> cont 34#;- TokenEffect -> cont 35#;- TokenForeign -> cont 36#;- TokenError -> cont 37#;- TokenImpossible -> cont 38#;- TokenOB -> cont 39#;- TokenCB -> cont 40#;- TokenOCB -> cont 41#;- TokenCCB -> cont 42#;- TokenOSB -> cont 43#;- TokenCSB -> cont 44#;- TokenPlus -> cont 45#;- TokenMinus -> cont 46#;- TokenTimes -> cont 47#;- TokenDivide -> cont 48#;- TokenEquals -> cont 49#;- TokenEQ -> cont 50#;- TokenLE -> cont 51#;- TokenGE -> cont 52#;- TokenShL -> cont 53#;- TokenShR -> cont 54#;- TokenLT -> cont 55#;- TokenGT -> cont 56#;- TokenColon -> cont 57#;- TokenProj -> cont 58#;- TokenSemi -> cont 59#;- TokenComma -> cont 60#;- TokenBar -> cont 61#;- TokenArrow -> cont 62#;- TokenCInclude -> cont 63#;- TokenExtern -> cont 64#;- TokenExport -> cont 65#;- TokenCType -> cont 66#;- TokenInclude -> cont 67#;- TokenInline -> cont 68#;- _ -> happyError' tk- })--happyError_ tk = happyError' tk--happyThen :: () => P a -> (a -> P b) -> P b-happyThen = (thenP)-happyReturn :: () => a -> P a-happyReturn = (returnP)-happyThen1 = happyThen-happyReturn1 :: () => a -> P a-happyReturn1 = happyReturn-happyError' :: () => (Token) -> P a-happyError' tk = (\token -> happyError) tk--mkparse = happySomeParser where- happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x))--happySeq = happyDontSeq---mkBind :: Name -> [Type] -> Type -> [Name] -> Expr -> Maybe String -> [CGFlag] -> Decl-mkBind n tys ret ns expr export fl = Decl n ret (Bind (zip ns tys) 0 expr fl) export fl--mkExtern :: Name -> [Type] -> Type -> [Name] -> Decl-mkExtern n tys ret ns = Extern n ret tys--parse :: String -> FilePath -> Result [Decl]-parse s fn = mkparse s fn 1--parseFile :: FilePath -> IO (Result [Decl])-parseFile fn = do s <- readFile fn- let x = parse s fn- return x-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 28 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 49 "templates/GenericTemplate.hs" #-}--{-# LINE 59 "templates/GenericTemplate.hs" #-}--{-# LINE 68 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser). We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =- happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st- = {- nothing -}--- case action of- 0# -> {- nothing -}- happyFail i tk st- -1# -> {- nothing -}- happyAccept i tk st- n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}-- (happyReduceArr Happy_Data_Array.! rule) i tk st- where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))- n -> {- nothing -}--- happyShift new_state i tk st- where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))- where off = indexShortOffAddr happyActOffsets st- off_i = (off Happy_GHC_Exts.+# i)- check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))- then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# i)- else False- action | check = indexShortOffAddr happyTable off_i- | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 127 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =-#if __GLASGOW_HASKELL__ > 500- Happy_GHC_Exts.narrow16Int# i-#elif __GLASGOW_HASKELL__ == 500- Happy_GHC_Exts.intToInt16# i-#else- Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16#-#endif- where-#if __GLASGOW_HASKELL__ >= 503- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)-#else- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low)-#endif- high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))- low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))- off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 170 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =- let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "shifting the error token" $- happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =- happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk- = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')- = let r = fn v1 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')- = let r = fn v1 v2 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')- = let r = fn v1 v2 v3 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk- = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of- sts1@((HappyCons (st1@(action)) (_))) ->- let r = fn stk in -- it doesn't hurt to always seq here...- happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =- happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))- where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk--happyMonad2Reduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =- happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))- where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk-- off = indexShortOffAddr happyGotoOffsets st1- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = - {- nothing -}- happyDoAction j tk new_state- where off = indexShortOffAddr happyGotoOffsets st- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk =--- trace "failing" $ - happyError_ tk--{- We don't need state discarding for our restricted implementation of- "error". In fact, it can cause some bogus parses, so I've disabled it- for now --SDM---- discard a state-happyFail 0# tk old_st (HappyCons ((action)) (sts)) - (saved_tok `HappyStk` _ `HappyStk` stk) =--- trace ("discarding state, depth " ++ show (length stk)) $- happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,--- save the old token and carry on.-happyFail i tk (action) sts stk =--- trace "entering error recovery" $- happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing. If the --strict flag is given, then Happy emits --- happySeq = happyDoSeq--- otherwise it emits--- happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template. GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.
− dist/build/Epic/epic-tmp/Epic/Parser.hs
@@ -1,1368 +0,0 @@-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}-{-# OPTIONS -fglasgow-exts -cpp #-}--- -*-Haskell-*--{-# OPTIONS_GHC -fglasgow-exts #-}--module Epic.Parser where--import Char-import System.IO.Unsafe--import Epic.Language-import Epic.Lexer-#if __GLASGOW_HASKELL__ >= 503-import qualified Data.Array as Happy_Data_Array-#else-import qualified Array as Happy_Data_Array-#endif-#if __GLASGOW_HASKELL__ >= 503-import qualified GHC.Exts as Happy_GHC_Exts-#else-import qualified GlaExts as Happy_GHC_Exts-#endif---- parser produced by Happy Version 1.18.4--newtype HappyAbsSyn = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn4 :: ([Decl]) -> (HappyAbsSyn )-happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn4 #-}-happyOut4 :: (HappyAbsSyn ) -> ([Decl])-happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut4 #-}-happyIn5 :: (Type) -> (HappyAbsSyn )-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> (Type)-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (Decl) -> (HappyAbsSyn )-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (Decl)-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: ([CGFlag]) -> (HappyAbsSyn )-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> ([CGFlag])-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (CGFlag) -> (HappyAbsSyn )-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> (CGFlag)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (Maybe String) -> (HappyAbsSyn )-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> (Maybe String)-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: ([(Name,Type)]) -> (HappyAbsSyn )-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> ([(Name,Type)])-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Expr) -> (HappyAbsSyn )-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (Expr)-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (Expr) -> (HappyAbsSyn )-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> (Expr)-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: ([CaseAlt]) -> (HappyAbsSyn )-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> ([CaseAlt])-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (CaseAlt) -> (HappyAbsSyn )-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> (CaseAlt)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Expr) -> (HappyAbsSyn )-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (Expr)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: ([Expr]) -> (HappyAbsSyn )-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> ([Expr])-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: ([(Expr,Type)]) -> (HappyAbsSyn )-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> ([(Expr,Type)])-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Const) -> (HappyAbsSyn )-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> (Const)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (LineNumber) -> (HappyAbsSyn )-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> (LineNumber)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (String) -> (HappyAbsSyn )-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> (String)-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyInTok :: (Token) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x2d\x01\x1f\x00\x00\x00\xdf\xff\x52\x01\x4d\x01\x4b\x01\xfe\x00\xf5\x01\x40\x01\x2d\x01\x00\x00\x00\x00\x16\x01\x00\x00\x3b\x01\xdf\xff\x00\x00\x00\x00\x00\x00\x14\x01\x2a\x01\x00\x00\x00\x00\x08\x01\xf1\x00\x28\x01\xf0\x00\x69\x01\xdb\x00\x69\x01\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x69\x01\x15\x01\x00\x00\x00\x00\xe0\x00\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x01\x03\x01\x01\x00\x01\x00\xdc\x00\x00\x00\xf1\xff\xda\x00\x69\x01\x00\x01\x00\x00\x01\x00\x01\x00\x01\x00\xe7\xff\x86\x00\xd0\x00\xed\x00\x00\x00\xf2\x00\x01\x00\x69\x01\x01\x00\x01\x00\x18\x00\x03\x00\xb6\x00\xc5\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\xd7\x00\x01\x00\x23\x01\x00\x00\x35\x01\x35\x01\xe4\xff\xe4\xff\x35\x01\x35\x01\x11\x01\xe7\xff\xe7\xff\x37\x01\x37\x01\xc6\x00\x01\x00\x69\x01\xc4\x00\x01\x00\x74\x00\xd8\x00\xdd\x00\xc3\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xb1\x00\x00\x00\x01\x00\x34\x00\x2a\x00\x96\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x9b\x00\x8b\x00\x8f\x00\xbc\x00\x79\x00\x01\x00\x62\x00\x01\x00\xae\x00\x8a\x00\x00\x00\x69\x01\x89\x00\x00\x00\x01\x00\xff\x00\x01\x00\x7e\x00\x01\x00\x2a\x00\x00\x00\x4d\x00\x01\x00\x00\x00\xff\x00\x9f\x00\xff\x00\x9c\x00\x00\x00\x63\x00\x01\x00\x00\x00\x6b\x00\xff\x00\x50\x00\x00\x00\x01\x00\xff\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x37\x02\x0b\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x78\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x25\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x02\x1b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x19\x02\x97\x01\x11\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x02\x48\x00\x07\x02\x05\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x01\xfd\x01\xfb\x01\xf3\x01\xf1\x01\xe9\x01\xe7\x01\xdf\x01\xdd\x01\xd5\x01\xd3\x01\xcb\x01\x00\x00\xc9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x01\x43\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\xbf\x01\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\xad\x01\x00\x00\xab\x01\x00\x00\xa3\x01\x39\x00\x00\x00\x00\x00\xa1\x01\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xe8\xff\x00\x00\x00\x00\xec\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xff\x00\x00\xe8\xff\xfd\xff\xe7\xff\x00\x00\xed\xff\x00\x00\xec\xff\xe9\xff\xea\xff\xeb\xff\x00\x00\xe6\xff\xac\xff\xfc\xff\x00\x00\x00\x00\xe6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xfb\xff\xfa\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf0\xff\xf1\xff\xf2\xff\x00\x00\x00\x00\xe6\xff\xee\xff\xe4\xff\x00\x00\x00\x00\xef\xff\xd5\xff\xd4\xff\xdc\xff\xe3\xff\xb0\xff\xb6\xff\xb5\xff\xb3\xff\xb2\xff\xb1\xff\xb4\xff\xaf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\x00\x00\xbc\xff\x00\x00\xc6\xff\xbb\xff\x00\x00\x00\x00\xd3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xff\xdb\xff\xc0\xff\xc1\xff\xc2\xff\xc3\xff\xbe\xff\xbf\xff\xbd\xff\xc4\xff\xc5\xff\xc7\xff\xc8\xff\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xff\xe0\xff\xbc\xff\xba\xff\xb9\xff\xde\xff\x00\x00\xdf\xff\x00\x00\x00\x00\xce\xff\x00\x00\x00\x00\xe1\xff\xdd\xff\x00\x00\x00\x00\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\x00\x00\x00\x00\xd1\xff\x00\x00\x00\x00\xd7\xff\x00\x00\xd8\xff\x00\x00\x00\x00\x00\x00\xce\xff\xcf\xff\x00\x00\x00\x00\xcc\xff\xca\xff\xe6\xff\xc9\xff\x00\x00\xd0\xff\xb8\xff\xb9\xff\xd6\xff\x00\x00\xda\xff\x00\x00\xb7\xff\x00\x00\xcb\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x22\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x00\x00\x27\x00\x02\x00\x02\x00\x27\x00\x05\x00\x05\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x24\x00\x15\x00\x16\x00\x27\x00\x18\x00\x19\x00\x06\x00\x1b\x00\x1a\x00\x3a\x00\x1e\x00\x1f\x00\x3a\x00\x21\x00\x44\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x27\x00\x02\x00\x2b\x00\x03\x00\x05\x00\x2e\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x1c\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x01\x00\x3a\x00\x3b\x00\x27\x00\x16\x00\x17\x00\x09\x00\x0a\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x01\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x1d\x00\x3a\x00\x3b\x00\x09\x00\x0a\x00\x07\x00\x08\x00\x03\x00\x04\x00\x0b\x00\x27\x00\x0d\x00\x0e\x00\x3f\x00\x40\x00\x41\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x01\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x20\x00\x3a\x00\x3b\x00\x01\x00\x07\x00\x08\x00\x06\x00\x27\x00\x0b\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x10\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x06\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x03\x00\x04\x00\x06\x00\x3e\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x28\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x3c\x00\x3c\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x27\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x3c\x00\x28\x00\x28\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3e\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x03\x00\x3a\x00\x3b\x00\x3c\x00\x27\x00\x28\x00\x2a\x00\x28\x00\x31\x00\x3d\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3e\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x27\x00\x27\x00\x03\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x27\x00\x29\x00\x28\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x2c\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x27\x00\x02\x00\x27\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x03\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x31\x00\x3a\x00\x3b\x00\x27\x00\x28\x00\x01\x00\x3e\x00\x28\x00\x3e\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3c\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x01\x00\x39\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x28\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x27\x00\x01\x00\x27\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\x45\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x3b\x00\x02\x00\x01\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x02\x00\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x27\x00\x3a\x00\x27\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x2f\x00\x30\x00\xff\xff\xff\xff\x35\x00\x36\x00\x3f\x00\x40\x00\x41\x00\x3a\x00\x43\x00\x3a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\xff\xff\x0d\x00\x0e\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x07\x00\x08\x00\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\x0c\x00\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0b\x00\xff\xff\x0b\x00\x0e\x00\xff\xff\x0e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x43\x00\x02\x00\x45\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x12\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x16\x00\x5d\x00\x08\x00\x02\x00\x5d\x00\x03\x00\x03\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x56\x00\x40\x00\x41\x00\x57\x00\x42\x00\x43\x00\xb1\x00\x44\x00\x7b\x00\x69\x00\x45\x00\x46\x00\x69\x00\x47\x00\x13\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x0b\x00\x5d\x00\x08\x00\x4d\x00\x94\x00\x03\x00\x4e\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x7c\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\xae\x00\x69\x00\x6a\x00\x5d\x00\x95\x00\x96\x00\xa8\x00\x92\x00\x8c\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x7e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x97\x00\x69\x00\x6a\x00\x91\x00\x92\x00\x99\x00\x34\x00\x13\x00\x10\x00\x35\x00\x5d\x00\xb4\x00\x36\x00\x05\x00\x06\x00\x07\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x53\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\xa8\x00\x69\x00\x6a\x00\x31\x00\x99\x00\x34\x00\x30\x00\x5d\x00\x35\x00\x2f\x00\x9d\x00\x36\x00\x1f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x17\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x1b\x00\x69\x00\x6a\x00\x5d\x00\x9f\x00\x0f\x00\x10\x00\x18\x00\xb6\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xb4\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\xa0\x00\xb0\x00\x1a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xab\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x8a\x00\xae\x00\x9c\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa2\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\xa3\x00\x69\x00\x6a\x00\x84\x00\x5d\x00\xb1\x00\xa6\x00\x90\x00\x91\x00\xa5\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa4\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x99\x00\x86\x00\x6c\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x88\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x9d\x00\x69\x00\x6a\x00\x5d\x00\x87\x00\x79\x00\x8c\x00\x8f\x00\x7a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x81\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x83\x00\x69\x00\x6a\x00\x5d\x00\x89\x00\x55\x00\x53\x00\x58\x00\x5b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5c\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x33\x00\x69\x00\x6a\x00\x5d\x00\x82\x00\x1a\x00\x2e\x00\x2d\x00\x1f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x2f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x1a\x00\x1d\x00\x1a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x1b\x00\x15\x00\x16\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x0b\x00\xff\xff\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x6a\x00\x0d\x00\x0e\x00\x00\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x0f\x00\x00\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x5d\x00\x69\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x60\x00\x61\x00\x00\x00\x00\x00\x65\x00\x66\x00\x05\x00\x06\x00\x07\x00\x69\x00\x0a\x00\x69\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x99\x00\x34\x00\x00\x00\x00\x00\x35\x00\x00\x00\x9a\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x84\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x8d\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x77\x00\x00\x00\x36\x00\x4f\x00\x34\x00\xb6\x00\x34\x00\x35\x00\x50\x00\x35\x00\x36\x00\x00\x00\x36\x00\xb2\x00\x34\x00\xa9\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\xab\x00\x34\x00\xac\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\xa0\x00\x34\x00\xa6\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x97\x00\x34\x00\x8a\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6a\x00\x34\x00\x6c\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6d\x00\x34\x00\x6e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6f\x00\x34\x00\x70\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x71\x00\x34\x00\x72\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x73\x00\x34\x00\x74\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x75\x00\x34\x00\x76\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x7c\x00\x34\x00\x7d\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x7f\x00\x34\x00\x4e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x51\x00\x34\x00\x58\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x59\x00\x34\x00\x33\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x05\x00\x06\x00\x07\x00\x07\x00\x0a\x00\x08\x00\xfe\xff\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (1, 83) [- (1 , happyReduce_1),- (2 , happyReduce_2),- (3 , happyReduce_3),- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37),- (38 , happyReduce_38),- (39 , happyReduce_39),- (40 , happyReduce_40),- (41 , happyReduce_41),- (42 , happyReduce_42),- (43 , happyReduce_43),- (44 , happyReduce_44),- (45 , happyReduce_45),- (46 , happyReduce_46),- (47 , happyReduce_47),- (48 , happyReduce_48),- (49 , happyReduce_49),- (50 , happyReduce_50),- (51 , happyReduce_51),- (52 , happyReduce_52),- (53 , happyReduce_53),- (54 , happyReduce_54),- (55 , happyReduce_55),- (56 , happyReduce_56),- (57 , happyReduce_57),- (58 , happyReduce_58),- (59 , happyReduce_59),- (60 , happyReduce_60),- (61 , happyReduce_61),- (62 , happyReduce_62),- (63 , happyReduce_63),- (64 , happyReduce_64),- (65 , happyReduce_65),- (66 , happyReduce_66),- (67 , happyReduce_67),- (68 , happyReduce_68),- (69 , happyReduce_69),- (70 , happyReduce_70),- (71 , happyReduce_71),- (72 , happyReduce_72),- (73 , happyReduce_73),- (74 , happyReduce_74),- (75 , happyReduce_75),- (76 , happyReduce_76),- (77 , happyReduce_77),- (78 , happyReduce_78),- (79 , happyReduce_79),- (80 , happyReduce_80),- (81 , happyReduce_81),- (82 , happyReduce_82),- (83 , happyReduce_83)- ]--happy_n_terms = 70 :: Int-happy_n_nonterms = 17 :: Int--happyReduce_1 = happySpecReduce_1 0# happyReduction_1-happyReduction_1 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn4- ([happy_var_1]- )}--happyReduce_2 = happySpecReduce_2 0# happyReduction_2-happyReduction_2 happy_x_2- happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut4 happy_x_2 of { happy_var_2 -> - happyIn4- (happy_var_1:happy_var_2- )}}--happyReduce_3 = happyMonadReduce 4# 0# happyReduction_3-happyReduction_3 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - case happyOut4 happy_x_3 of { happy_var_3 -> - case happyOut20 happy_x_4 of { happy_var_4 -> - (- let rest = happy_var_3 in- let pt = unsafePerformIO (readFile happy_var_2) in- case (parse pt happy_var_4) of- Success x -> returnP (x ++ rest)- Failure err file ln -> failP err)}}}- ) (\r -> happyReturn (happyIn4 r))--happyReduce_4 = happySpecReduce_1 1# happyReduction_4-happyReduction_4 happy_x_1- = happyIn5- (TyInt- )--happyReduce_5 = happySpecReduce_1 1# happyReduction_5-happyReduction_5 happy_x_1- = happyIn5- (TyBigInt- )--happyReduce_6 = happySpecReduce_1 1# happyReduction_6-happyReduction_6 happy_x_1- = happyIn5- (TyChar- )--happyReduce_7 = happySpecReduce_1 1# happyReduction_7-happyReduction_7 happy_x_1- = happyIn5- (TyBool- )--happyReduce_8 = happySpecReduce_1 1# happyReduction_8-happyReduction_8 happy_x_1- = happyIn5- (TyFloat- )--happyReduce_9 = happySpecReduce_1 1# happyReduction_9-happyReduction_9 happy_x_1- = happyIn5- (TyBigFloat- )--happyReduce_10 = happySpecReduce_1 1# happyReduction_10-happyReduction_10 happy_x_1- = happyIn5- (TyString- )--happyReduce_11 = happySpecReduce_1 1# happyReduction_11-happyReduction_11 happy_x_1- = happyIn5- (TyPtr- )--happyReduce_12 = happySpecReduce_1 1# happyReduction_12-happyReduction_12 happy_x_1- = happyIn5- (TyUnit- )--happyReduce_13 = happySpecReduce_1 1# happyReduction_13-happyReduction_13 happy_x_1- = happyIn5- (TyAny- )--happyReduce_14 = happySpecReduce_1 1# happyReduction_14-happyReduction_14 happy_x_1- = happyIn5- (TyData- )--happyReduce_15 = happySpecReduce_1 1# happyReduction_15-happyReduction_15 happy_x_1- = happyIn5- (TyFun- )--happyReduce_16 = happyReduce 10# 2# happyReduction_16-happyReduction_16 (happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokenName happy_var_3) -> - case happyOut10 happy_x_5 of { happy_var_5 -> - case happyOut5 happy_x_8 of { happy_var_8 -> - case happyOut11 happy_x_10 of { happy_var_10 -> - happyIn6- (mkBind happy_var_3 (map snd happy_var_5) happy_var_8 (map fst happy_var_5) happy_var_10 happy_var_1 happy_var_2- ) `HappyStk` happyRest}}}}}}--happyReduce_17 = happyReduce 7# 2# happyReduction_17-happyReduction_17 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenName happy_var_2) -> - case happyOut10 happy_x_4 of { happy_var_4 -> - case happyOut5 happy_x_7 of { happy_var_7 -> - happyIn6- (mkExtern happy_var_2 (map snd happy_var_4) happy_var_7 (map fst happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_18 = happySpecReduce_2 2# happyReduction_18-happyReduction_18 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - happyIn6- (Include happy_var_2- )}--happyReduce_19 = happySpecReduce_0 3# happyReduction_19-happyReduction_19 = happyIn7- ([]- )--happyReduce_20 = happySpecReduce_2 3# happyReduction_20-happyReduction_20 happy_x_2- happy_x_1- = case happyOut8 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn7- (happy_var_1:happy_var_2- )}}--happyReduce_21 = happySpecReduce_1 4# happyReduction_21-happyReduction_21 happy_x_1- = happyIn8- (Inline- )--happyReduce_22 = happySpecReduce_1 4# happyReduction_22-happyReduction_22 happy_x_1- = happyIn8- (Strict- )--happyReduce_23 = happySpecReduce_0 5# happyReduction_23-happyReduction_23 = happyIn9- (Nothing- )--happyReduce_24 = happySpecReduce_2 5# happyReduction_24-happyReduction_24 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - happyIn9- (Just happy_var_2- )}--happyReduce_25 = happySpecReduce_0 6# happyReduction_25-happyReduction_25 = happyIn10- ([]- )--happyReduce_26 = happySpecReduce_3 6# happyReduction_26-happyReduction_26 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> - case happyOut5 happy_x_3 of { happy_var_3 -> - happyIn10- ([(happy_var_1,happy_var_3)]- )}}--happyReduce_27 = happyReduce 5# 6# happyReduction_27-happyReduction_27 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> - case happyOut5 happy_x_3 of { happy_var_3 -> - case happyOut10 happy_x_5 of { happy_var_5 -> - happyIn10- ((happy_var_1,happy_var_3):happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_28 = happySpecReduce_1 7# happyReduction_28-happyReduction_28 happy_x_1- = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> - happyIn11- (R happy_var_1- )}--happyReduce_29 = happySpecReduce_3 7# happyReduction_29-happyReduction_29 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_2 of { happy_var_2 -> - happyIn11- (happy_var_2- )}--happyReduce_30 = happyReduce 4# 7# happyReduction_30-happyReduction_30 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_3 of { happy_var_3 -> - happyIn11- (App happy_var_1 happy_var_3- ) `HappyStk` happyRest}}--happyReduce_31 = happySpecReduce_3 7# happyReduction_31-happyReduction_31 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn11- (Con 0 happy_var_2- )}--happyReduce_32 = happyReduce 4# 7# happyReduction_32-happyReduction_32 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn11- (Lazy happy_var_3- ) `HappyStk` happyRest}--happyReduce_33 = happyReduce 4# 7# happyReduction_33-happyReduction_33 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn11- (Effect happy_var_3- ) `HappyStk` happyRest}--happyReduce_34 = happyReduce 5# 7# happyReduction_34-happyReduction_34 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenInt happy_var_2) -> - case happyOut16 happy_x_4 of { happy_var_4 -> - happyIn11- (Con happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_35 = happySpecReduce_1 7# happyReduction_35-happyReduction_35 happy_x_1- = case happyOut18 happy_x_1 of { happy_var_1 -> - happyIn11- (Const happy_var_1- )}--happyReduce_36 = happySpecReduce_3 7# happyReduction_36-happyReduction_36 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> - happyIn11- (Proj happy_var_1 happy_var_3- )}}--happyReduce_37 = happyReduce 8# 7# happyReduction_37-happyReduction_37 (happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenName happy_var_2) -> - case happyOut5 happy_x_4 of { happy_var_4 -> - case happyOut11 happy_x_6 of { happy_var_6 -> - case happyOut11 happy_x_8 of { happy_var_8 -> - happyIn11- (Let happy_var_2 happy_var_4 happy_var_6 happy_var_8- ) `HappyStk` happyRest}}}}--happyReduce_38 = happySpecReduce_3 7# happyReduction_38-happyReduction_38 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn11- (Let (MN "unused" 0) TyUnit happy_var_1 happy_var_3- )}}--happyReduce_39 = happyReduce 6# 7# happyReduction_39-happyReduction_39 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_2 of { happy_var_2 -> - case happyOut11 happy_x_4 of { happy_var_4 -> - case happyOut11 happy_x_6 of { happy_var_6 -> - happyIn11- (If happy_var_2 happy_var_4 happy_var_6- ) `HappyStk` happyRest}}}--happyReduce_40 = happyReduce 6# 7# happyReduction_40-happyReduction_40 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - case happyOut11 happy_x_5 of { happy_var_5 -> - happyIn11- (While happy_var_3 happy_var_5- ) `HappyStk` happyRest}}--happyReduce_41 = happyReduce 8# 7# happyReduction_41-happyReduction_41 (happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_3 of { happy_var_3 -> - case happyOut11 happy_x_5 of { happy_var_5 -> - case happyOut11 happy_x_7 of { happy_var_7 -> - happyIn11- (WhileAcc happy_var_3 happy_var_5 happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_42 = happySpecReduce_1 7# happyReduction_42-happyReduction_42 happy_x_1- = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn11- (happy_var_1- )}--happyReduce_43 = happySpecReduce_1 7# happyReduction_43-happyReduction_43 happy_x_1- = case happyOut15 happy_x_1 of { happy_var_1 -> - happyIn11- (happy_var_1- )}--happyReduce_44 = happySpecReduce_2 7# happyReduction_44-happyReduction_44 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> - happyIn11- (Error happy_var_2- )}--happyReduce_45 = happySpecReduce_1 7# happyReduction_45-happyReduction_45 happy_x_1- = happyIn11- (Impossible- )--happyReduce_46 = happyReduce 6# 7# happyReduction_46-happyReduction_46 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut5 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokenString happy_var_3) -> - case happyOut17 happy_x_5 of { happy_var_5 -> - happyIn11- (ForeignCall happy_var_2 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_47 = happyReduce 7# 7# happyReduction_47-happyReduction_47 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut5 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokenString happy_var_4) -> - case happyOut17 happy_x_6 of { happy_var_6 -> - happyIn11- (LazyForeignCall happy_var_3 happy_var_4 happy_var_6- ) `HappyStk` happyRest}}}--happyReduce_48 = happyReduce 6# 8# happyReduction_48-happyReduction_48 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_2 of { happy_var_2 -> - case happyOut13 happy_x_5 of { happy_var_5 -> - happyIn12- (Case happy_var_2 happy_var_5- ) `HappyStk` happyRest}}--happyReduce_49 = happySpecReduce_0 9# happyReduction_49-happyReduction_49 = happyIn13- ([]- )--happyReduce_50 = happySpecReduce_1 9# happyReduction_50-happyReduction_50 happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - happyIn13- ([happy_var_1]- )}--happyReduce_51 = happySpecReduce_3 9# happyReduction_51-happyReduction_51 happy_x_3- happy_x_2- happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - case happyOut13 happy_x_3 of { happy_var_3 -> - happyIn13- (happy_var_1:happy_var_3- )}}--happyReduce_52 = happyReduce 7# 10# happyReduction_52-happyReduction_52 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokenInt happy_var_2) -> - case happyOut10 happy_x_4 of { happy_var_4 -> - case happyOut11 happy_x_7 of { happy_var_7 -> - happyIn14- (Alt happy_var_2 happy_var_4 happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_53 = happySpecReduce_3 10# happyReduction_53-happyReduction_53 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn14- (ConstAlt happy_var_1 happy_var_3- )}}--happyReduce_54 = happySpecReduce_3 10# happyReduction_54-happyReduction_54 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn14- (DefaultCase happy_var_3- )}--happyReduce_55 = happySpecReduce_3 11# happyReduction_55-happyReduction_55 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Plus happy_var_1 happy_var_3- )}}--happyReduce_56 = happySpecReduce_3 11# happyReduction_56-happyReduction_56 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Minus happy_var_1 happy_var_3- )}}--happyReduce_57 = happySpecReduce_2 11# happyReduction_57-happyReduction_57 happy_x_2- happy_x_1- = case happyOut11 happy_x_2 of { happy_var_2 -> - happyIn15- (Op Minus (Const (MkInt 0)) happy_var_2- )}--happyReduce_58 = happySpecReduce_3 11# happyReduction_58-happyReduction_58 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Times happy_var_1 happy_var_3- )}}--happyReduce_59 = happySpecReduce_3 11# happyReduction_59-happyReduction_59 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op Divide happy_var_1 happy_var_3- )}}--happyReduce_60 = happySpecReduce_3 11# happyReduction_60-happyReduction_60 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op ShL happy_var_1 happy_var_3- )}}--happyReduce_61 = happySpecReduce_3 11# happyReduction_61-happyReduction_61 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op ShR happy_var_1 happy_var_3- )}}--happyReduce_62 = happySpecReduce_3 11# happyReduction_62-happyReduction_62 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpLT happy_var_1 happy_var_3- )}}--happyReduce_63 = happySpecReduce_3 11# happyReduction_63-happyReduction_63 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpGT happy_var_1 happy_var_3- )}}--happyReduce_64 = happySpecReduce_3 11# happyReduction_64-happyReduction_64 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpLE happy_var_1 happy_var_3- )}}--happyReduce_65 = happySpecReduce_3 11# happyReduction_65-happyReduction_65 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpGE happy_var_1 happy_var_3- )}}--happyReduce_66 = happySpecReduce_3 11# happyReduction_66-happyReduction_66 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn15- (Op OpEQ happy_var_1 happy_var_3- )}}--happyReduce_67 = happySpecReduce_0 12# happyReduction_67-happyReduction_67 = happyIn16- ([]- )--happyReduce_68 = happySpecReduce_1 12# happyReduction_68-happyReduction_68 happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn16- ([happy_var_1]- )}--happyReduce_69 = happySpecReduce_3 12# happyReduction_69-happyReduction_69 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut16 happy_x_3 of { happy_var_3 -> - happyIn16- (happy_var_1:happy_var_3- )}}--happyReduce_70 = happySpecReduce_0 13# happyReduction_70-happyReduction_70 = happyIn17- ([]- )--happyReduce_71 = happySpecReduce_3 13# happyReduction_71-happyReduction_71 happy_x_3- happy_x_2- happy_x_1- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut5 happy_x_3 of { happy_var_3 -> - happyIn17- ([(happy_var_1,happy_var_3)]- )}}--happyReduce_72 = happyReduce 5# 13# happyReduction_72-happyReduction_72 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut5 happy_x_3 of { happy_var_3 -> - case happyOut17 happy_x_5 of { happy_var_5 -> - happyIn17- ((happy_var_1,happy_var_3):happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_73 = happySpecReduce_1 14# happyReduction_73-happyReduction_73 happy_x_1- = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> - happyIn18- (MkInt happy_var_1- )}--happyReduce_74 = happySpecReduce_1 14# happyReduction_74-happyReduction_74 happy_x_1- = case happyOutTok happy_x_1 of { (TokenBigInt happy_var_1) -> - happyIn18- (MkBigInt happy_var_1- )}--happyReduce_75 = happySpecReduce_1 14# happyReduction_75-happyReduction_75 happy_x_1- = case happyOutTok happy_x_1 of { (TokenChar happy_var_1) -> - happyIn18- (MkChar happy_var_1- )}--happyReduce_76 = happySpecReduce_1 14# happyReduction_76-happyReduction_76 happy_x_1- = case happyOutTok happy_x_1 of { (TokenBool happy_var_1) -> - happyIn18- (MkBool happy_var_1- )}--happyReduce_77 = happySpecReduce_1 14# happyReduction_77-happyReduction_77 happy_x_1- = case happyOutTok happy_x_1 of { (TokenFloat happy_var_1) -> - happyIn18- (MkFloat happy_var_1- )}--happyReduce_78 = happySpecReduce_1 14# happyReduction_78-happyReduction_78 happy_x_1- = case happyOutTok happy_x_1 of { (TokenBigFloat happy_var_1) -> - happyIn18- (MkBigFloat happy_var_1- )}--happyReduce_79 = happySpecReduce_1 14# happyReduction_79-happyReduction_79 happy_x_1- = case happyOutTok happy_x_1 of { (TokenString happy_var_1) -> - happyIn18- (MkString happy_var_1- )}--happyReduce_80 = happySpecReduce_1 14# happyReduction_80-happyReduction_80 happy_x_1- = happyIn18- (MkUnit- )--happyReduce_81 = happySpecReduce_1 14# happyReduction_81-happyReduction_81 happy_x_1- = happyIn18- (MkUnused- )--happyReduce_82 = happyMonadReduce 0# 15# happyReduction_82-happyReduction_82 (happyRest) tk- = happyThen (( getLineNo)- ) (\r -> happyReturn (happyIn19 r))--happyReduce_83 = happyMonadReduce 0# 16# happyReduction_83-happyReduction_83 (happyRest) tk- = happyThen (( getFileName)- ) (\r -> happyReturn (happyIn20 r))--happyNewToken action sts stk- = lexer(\tk -> - let cont i = happyDoAction i tk action sts stk in- case tk of {- TokenEOF -> happyDoAction 69# tk action sts stk;- TokenName happy_dollar_dollar -> cont 1#;- TokenString happy_dollar_dollar -> cont 2#;- TokenInt happy_dollar_dollar -> cont 3#;- TokenBigInt happy_dollar_dollar -> cont 4#;- TokenBool happy_dollar_dollar -> cont 5#;- TokenFloat happy_dollar_dollar -> cont 6#;- TokenBigFloat happy_dollar_dollar -> cont 7#;- TokenChar happy_dollar_dollar -> cont 8#;- TokenIntType -> cont 9#;- TokenBigIntType -> cont 10#;- TokenCharType -> cont 11#;- TokenBoolType -> cont 12#;- TokenFloatType -> cont 13#;- TokenBigFloatType -> cont 14#;- TokenStringType -> cont 15#;- TokenPtrType -> cont 16#;- TokenUnitType -> cont 17#;- TokenFunType -> cont 18#;- TokenDataType -> cont 19#;- TokenAnyType -> cont 20#;- TokenUnit -> cont 21#;- TokenCon -> cont 22#;- TokenDefault -> cont 23#;- TokenLet -> cont 24#;- TokenCase -> cont 25#;- TokenOf -> cont 26#;- TokenIf -> cont 27#;- TokenThen -> cont 28#;- TokenElse -> cont 29#;- TokenWhile -> cont 30#;- TokenUnused -> cont 31#;- TokenIn -> cont 32#;- TokenLazy -> cont 33#;- TokenStrict -> cont 34#;- TokenEffect -> cont 35#;- TokenForeign -> cont 36#;- TokenError -> cont 37#;- TokenImpossible -> cont 38#;- TokenOB -> cont 39#;- TokenCB -> cont 40#;- TokenOCB -> cont 41#;- TokenCCB -> cont 42#;- TokenOSB -> cont 43#;- TokenCSB -> cont 44#;- TokenPlus -> cont 45#;- TokenMinus -> cont 46#;- TokenTimes -> cont 47#;- TokenDivide -> cont 48#;- TokenEquals -> cont 49#;- TokenEQ -> cont 50#;- TokenLE -> cont 51#;- TokenGE -> cont 52#;- TokenShL -> cont 53#;- TokenShR -> cont 54#;- TokenLT -> cont 55#;- TokenGT -> cont 56#;- TokenColon -> cont 57#;- TokenProj -> cont 58#;- TokenSemi -> cont 59#;- TokenComma -> cont 60#;- TokenBar -> cont 61#;- TokenArrow -> cont 62#;- TokenCInclude -> cont 63#;- TokenExtern -> cont 64#;- TokenExport -> cont 65#;- TokenCType -> cont 66#;- TokenInclude -> cont 67#;- TokenInline -> cont 68#;- _ -> happyError' tk- })--happyError_ tk = happyError' tk--happyThen :: () => P a -> (a -> P b) -> P b-happyThen = (thenP)-happyReturn :: () => a -> P a-happyReturn = (returnP)-happyThen1 = happyThen-happyReturn1 :: () => a -> P a-happyReturn1 = happyReturn-happyError' :: () => (Token) -> P a-happyError' tk = (\token -> happyError) tk--mkparse = happySomeParser where- happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x))--happySeq = happyDontSeq---mkBind :: Name -> [Type] -> Type -> [Name] -> Expr -> Maybe String -> [CGFlag] -> Decl-mkBind n tys ret ns expr export fl = Decl n ret (Bind (zip ns tys) 0 expr fl) export fl--mkExtern :: Name -> [Type] -> Type -> [Name] -> Decl-mkExtern n tys ret ns = Extern n ret tys--parse :: String -> FilePath -> Result [Decl]-parse s fn = mkparse s fn 1--parseFile :: FilePath -> IO (Result [Decl])-parseFile fn = do s <- readFile fn- let x = parse s fn- return x-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 28 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 49 "templates/GenericTemplate.hs" #-}--{-# LINE 59 "templates/GenericTemplate.hs" #-}--{-# LINE 68 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser). We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =- happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st- = {- nothing -}--- case action of- 0# -> {- nothing -}- happyFail i tk st- -1# -> {- nothing -}- happyAccept i tk st- n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}-- (happyReduceArr Happy_Data_Array.! rule) i tk st- where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))- n -> {- nothing -}--- happyShift new_state i tk st- where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))- where off = indexShortOffAddr happyActOffsets st- off_i = (off Happy_GHC_Exts.+# i)- check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))- then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# i)- else False- action | check = indexShortOffAddr happyTable off_i- | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 127 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =-#if __GLASGOW_HASKELL__ > 500- Happy_GHC_Exts.narrow16Int# i-#elif __GLASGOW_HASKELL__ == 500- Happy_GHC_Exts.intToInt16# i-#else- Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16#-#endif- where-#if __GLASGOW_HASKELL__ >= 503- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)-#else- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low)-#endif- high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))- low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))- off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 170 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =- let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "shifting the error token" $- happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =- happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk- = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')- = let r = fn v1 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')- = let r = fn v1 v2 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')- = let r = fn v1 v2 v3 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk- = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of- sts1@((HappyCons (st1@(action)) (_))) ->- let r = fn stk in -- it doesn't hurt to always seq here...- happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =- happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))- where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk--happyMonad2Reduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =- happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))- where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk-- off = indexShortOffAddr happyGotoOffsets st1- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = - {- nothing -}- happyDoAction j tk new_state- where off = indexShortOffAddr happyGotoOffsets st- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk =--- trace "failing" $ - happyError_ tk--{- We don't need state discarding for our restricted implementation of- "error". In fact, it can cause some bogus parses, so I've disabled it- for now --SDM---- discard a state-happyFail 0# tk old_st (HappyCons ((action)) (sts)) - (saved_tok `HappyStk` _ `HappyStk` stk) =--- trace ("discarding state, depth " ++ show (length stk)) $- happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,--- save the old token and carry on.-happyFail i tk (action) sts stk =--- trace "entering error recovery" $- happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing. If the --strict flag is given, then Happy emits --- happySeq = happyDoSeq--- otherwise it emits--- happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template. GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.
epic.cabal view
@@ -1,5 +1,5 @@ Name: epic-Version: 0.1.5+Version: 0.1.7 Author: Edwin Brady License: BSD3 License-file: LICENSE@@ -16,10 +16,10 @@ (<http://www.cs.st-and.ac.uk/~eb/Idris>). It can be invoked either as a library or an application. -Data-files: evm/libevm.a evm/closure.h evm/stdfuns.h evm/stdfuns.c evm/mainprog.c -Extra-source-files: evm/closure.c evm/closure.h evm/stdfuns.h evm/mainprog.c evm/stdfuns.c evm/Makefile +Data-files: evm/libevm.a evm/closure.h evm/stdfuns.h evm/stdfuns.c evm/mainprog.c evm/emalloc.h evm/gc_header.h+Extra-source-files: evm/closure.c evm/closure.h evm/stdfuns.h evm/mainprog.c evm/stdfuns.c evm/Makefile evm/emalloc.c evm/emalloc.h evm/gc_header.h -Cabal-Version: >= 1.2.3+Cabal-Version: >= 1.8.0.4 Build-type: Custom Library@@ -32,8 +32,7 @@ Executable epic Main-is: Main.lhs- Other-modules: Epic.Bytecode Epic.Parser Epic.Scopecheck- Epic.Language Epic.Lexer Epic.CodegenC- Epic.OTTLang Epic.Simplify Paths_epic- Build-depends: base >=4 && <5, haskell98, mtl, Cabal, array, directory+ hs-source-dirs: main+ Other-modules: Paths_epic+ Build-depends: base >=4 && <5, haskell98, Cabal, directory, epic
evm/Makefile view
@@ -1,7 +1,7 @@ CC = gcc #CFLAGS = -Wall -g-CFLAGS = -Wall -O3-OBJS = closure.o stdfuns.o+CFLAGS = -Wall -O3 -DUSE_BOEHM+OBJS = closure.o stdfuns.o emalloc.o INSTALLDIR = ${PREFIX}/lib/evm TARGET = libevm.a@@ -19,5 +19,6 @@ clean: rm -f ${OBJS} ${TARGET} -closure.o : closure.h-stdfuns.o : stdfuns.h closure.h+closure.o : closure.h emalloc.h+stdfuns.o : stdfuns.h closure.h emalloc.h+emalloc.o : closure.h emalloc.h
evm/closure.c view
@@ -1,4 +1,6 @@ #include "closure.h"+#include "emalloc.h"+ #include <assert.h> #include <string.h> #include <stdio.h>@@ -7,6 +9,14 @@ VAL one; VAL* zcon;+int v_argc;+VAL* v_argv;++ALLOCATOR allocate;+REALLOCATOR reallocate;+pool_t** pools = NULL;+pool_t* pool = NULL;+ //void* blob = NULL; //int blobnext = 0; @@ -96,6 +106,177 @@ if (!ISINT(c)) { dumpClosure(c); assert(0); } } +void* pool_malloc(size_t size) {+ if ((size & 7)!=0) {+ size = 8 + ((size >> 3) << 3);+ }+ *((size_t*)(pool->block_loc)) = size;+ void* mem = (void*)(((size_t*)(pool->block_loc))+2);+ pool->block_loc = pool->block_loc+size+sizeof(size_t)*2;++ return mem;+}++void* pool_realloc(void* ptr, size_t size) {+ if ((size & 7)!=0) {+ size = 8 + ((size >> 3) << 3);+ }+ *((size_t*)(pool->block_loc)) = size;+ void* mem = (void*)(((size_t*)(pool->block_loc))+2);+ pool->block_loc = pool->block_loc+size+sizeof(size_t)*2;++ size_t orig_size = *(((size_t*)ptr)-2);+ memcpy(mem, ptr, orig_size);++ return mem;+}++void* pool_grow_malloc(size_t size) {+ // TODO: if we're out of space, make a new pool, with a pointer to+ // the old pool so we can free it when we're ready.++ if ((size & 7)!=0) {+ size = 8 + ((size >> 3) << 3);+ }+ *((size_t*)(pool->block_loc)) = size;+ void* mem = (void*)(((size_t*)(pool->block_loc))+2);+ pool->block_loc = pool->block_loc+size+sizeof(size_t)*2;++ return mem;+}++void* pool_grow_realloc(void* ptr, size_t size) {+ if ((size & 7)!=0) {+ size = 8 + ((size >> 3) << 3);+ }+ *((size_t*)(pool->block_loc)) = size;+ void* mem = (void*)(((size_t*)(pool->block_loc))+2);+ pool->block_loc = pool->block_loc+size+sizeof(size_t)*2;++ size_t orig_size = *(((size_t*)ptr)-2);+ memcpy(mem, ptr, orig_size);++ return mem;+}++void freePool(pool_t* pool)+{+ free(pool->block);+ if (pool->grow!=NULL) {+ freePool((pool_t*)(pool->grow));+ }+ free(pool);+}+++VAL copyFun(fun* f, pool_t* oldpool) {+ VAL c = EMALLOC(sizeof(Closure)+sizeof(fun));+ fun* fn = (fun*)(c+1);+ fn->fn = f->fn;+ fn->arity = f->arity;+ int args = f->arg_end - f->args;+ fn->args = MKARGS(args);+ fn->arg_end = fn->args + args;+ void** p = fn->args;+ void** a;++ for(a = f->args; a < f->arg_end; ++a, ++p) {+ *p = copy((VAL)(*a), oldpool);+ }+ + SETTY(c, FUN);+ c->info = (void*)fn;+ EREADY(c);+ return c;+}++VAL copyThunk(thunk* t, pool_t* oldpool) {+ VAL c = EMALLOC(sizeof(Closure)+sizeof(fun));+ thunk* fn = (thunk*)(c+1);+ + fn->fn = t->fn;+ fn->args = MKARGS(t->numargs);+ fn->numargs = t->numargs;++ void** a = t->args;+ void** p = fn->args;+ int i;++ for(i=0; i < t->numargs; ++i, ++a, ++p) {+ *p = copy((VAL)(*a), oldpool);+ }++ SETTY(c,THUNK);+ c->info = (void*)fn;+ EREADY(c);+ return c;+}++VAL copyCon(con* c, pool_t* oldpool) {+ int arity = c->tag >> 16;+// printf("COPY CON %d %d\n", c->tag & 65535, arity);++ VAL nc = EMALLOC(sizeof(Closure)+sizeof(con));+ con* cn = (con*)(nc+1);++ cn->tag = c->tag;+ cn->args = MKARGS(arity);+ + void** a = c->args;+ void** p = cn->args;+ int i;++ for(i=0; i<arity; ++i, ++a, ++p) {+// printf("COPY ARG %d\n", *a);+ *p = copy((VAL)(*a), oldpool);+ }++ SETTY(nc, CON);+ nc->info = (void*)cn;+ EREADY(nc);+ return nc;+}+++// TODO: Preserve sharing. But this function isn't really intended for that+// sort of thing.++VAL copy(VAL x, pool_t* oldpool) {+ // only copy things that were allocated in the given pool.+ // TODO: also need to check whether it was allocated in pool->grow++ if (x>=(VAL)(oldpool->block) && x<(VAL)(oldpool->block_end)) {+ switch(GETTY(x)) {+ case FUN:+ return copyFun((fun*)x->info, oldpool);+ case THUNK:+ return copyThunk((thunk*)x->info, oldpool);+ case CON:+ return copyCon((con*)x->info, oldpool);+ case INT:+ return x;+ case BIGINT:+ return MKBIGINT((mpz_t*)(x->info));+ case FLOAT:+ return MKFLOAT(*((double*)x->info));+ case BIGFLOAT:+ assert(0); // NOT IMPLEMENTED YET+ case STRING:+ return MKSTR((char*)x->info);+ case UNIT:+ return MKUNIT;+ case PTR:+ return MKPTR(x->info);+ case FREEVAR:+ assert(0); // NOT IMPLEMENTED+ }+ return x;+ }+ else {+ return x;+ }+}+ inline VAL CLOSURE(func x, int arity, int args, void** block) { VAL c = EMALLOC(sizeof(Closure)+sizeof(fun)); // MKCLOSURE;@@ -158,6 +339,7 @@ SETTY(c,CON); c->info = (void*)cn; EREADY(c);+ return c; } @@ -702,6 +884,21 @@ return c; } +void* MKFLOAT(double f)+{+ VAL c = EMALLOC(sizeof(Closure)+sizeof(double));+ double* num = (double*)(c+1);+ *num = f;++ SETTY(c, FLOAT);+ c->info = (void*)num;+ EREADY(c);++ return c;+}+++ /* int GETINT(void* x) {@@ -711,9 +908,13 @@ mpz_t* GETBIGINT(void* x) {- return ((mpz_t*)(((VAL)x)->info));+ return (mpz_t*)(((VAL)x)->info); } +double GETFLOAT(void* x)+{+ return *((double*)(((VAL)x)->info));+} void* MKSTR(char* x) {@@ -760,8 +961,29 @@ return c; } -void init_evm()+VAL evm_getArg(int i) {+ if (i>=0 && i<v_argc) + return v_argv[i];+ else+ return MKSTR("");+}++int evm_numArgs() {+ return v_argc;+}++VMState* init_evm(int argc, char* argv[]) {+ allocate = GC_malloc;+ reallocate = GC_realloc;++ pools = malloc(sizeof(pool_t*)*1024);+ pool = malloc(sizeof(pool_t));+ *pools = pool;+ pool->block = NULL;+ pool->allocate = GC_malloc;+ pool->reallocate = GC_realloc;+ int i; one = MKINT(1); zcon = EMALLOC(sizeof(Closure)*255);@@ -769,4 +991,35 @@ zcon[i] = CONSTRUCTORn(i,0,0); } EREADY(zcon);++ v_argc = argc;+ v_argv = EMALLOC(sizeof(Closure)*v_argc);++ for(i=0;i<=argc;++i) {+ v_argv[i] = MKSTR(argv[i]);+ }+ EREADY(v_argv);++/*+ VMState* vm = malloc(sizeof(VMState));+ vm->roots = malloc(sizeof(VAL)*1024);+ vm->start_roots = vm->roots;++ vm->from_space = malloc(INIT_HEAP_SIZE*2);+ vm->to_space = malloc(INIT_HEAP_SIZE*2);+ vm->nursery = malloc(INIT_HEAP_SIZE);+ vm->heap_size = INIT_HEAP_SIZE;+ vm->next_nursery = 0;+ vm->next = 0;+*/+ return NULL;+}++void close_evm(VMState* vm)+{+ /* free(vm->from_space);+ free(vm->to_space);+ free(vm->nursery);+ free(vm->roots);+ free(vm);*/ }
evm/closure.h view
@@ -1,14 +1,7 @@ #ifndef _CLOSURE_H #define _CLOSURE_H -# ifndef WIN32-# include <pthread.h>-# define GC_THREADS-# else-# define GC_WIN32_THREADS-# endif--#include <gc/gc.h>+#include "gc_header.h" //#include <emalloc.h> #include <gmp.h>@@ -16,11 +9,54 @@ #include <stdlib.h> #include <stdint.h> -#define EMALLOC GC_malloc+typedef void*(*ALLOCATOR)(size_t);+typedef void*(*REALLOCATOR)(void*,size_t);++typedef struct {+ char* block;+ char* block_loc;+ char* block_end;+ ALLOCATOR allocate;+ REALLOCATOR reallocate;+ void* grow;+} pool_t;++extern ALLOCATOR allocate;+extern REALLOCATOR reallocate;+extern pool_t** pools;+extern pool_t* pool;++#define EMALLOC(x) pool->allocate(x) #define EREADY(x) -#define EREALLOC GC_realloc-#define EFREE GC_free+#define EREALLOC(ptr,x) pool->reallocate(ptr,x)+#define EFREE(x) +// Add a new memory pool to the pool stack, using the fixed size pool+// allocator+#define NEWFIXEDPOOL(x) \+ pool=malloc(sizeof(pool_t)); pools++; *pools = pool; \+ pool->allocate=pool_malloc; \+ pool->reallocate=pool_realloc; \+ pool->block = malloc(GETINT(x)); \+ pool->block_loc = pool->block; \+ pool->block_end = pool->block+GETINT(x); \+ pool->grow = NULL;+// Add a new memory pool to the pool stack, using the fixed size pool+// allocator+#define NEWGROWABLEPOOL(x) \+ pool=malloc(sizeof(pool_t)); pools++; *pools = pool; \+ pool->allocate=pool_grow_malloc; \+ pool->reallocate=pool_grow_realloc; \+ pool->block = malloc(GETINT(x)); \+ pool->block_loc = pool->block; \+ pool->block_end = pool->block+GETINT(x);+// Go back to the previous pool, copying the value x into it+#define CLEARPOOL(x) \+ pools--; \+ pool = *pools; \+ x=copy(x, *(pools+1)); \+ freePool(*(pools+1));+ typedef intptr_t eint; //#define EMALLOC malloc@@ -34,6 +70,8 @@ #define MKUNIT (void*)0 #define INTOP(op,x,y) MKINT((((eint)x)>>1) op (((eint)y)>>1))+#define FLOATOP(op,x,y) MKFLOAT(((GETFLOAT(x)) op (GETFLOAT(y))))+#define FLOATBOP(op,x,y) MKINT(((GETFLOAT(x)) op (GETFLOAT(y)))) #define ADD(x,y) (void*)(((eint)x)+(((eint)y)-1)) #define MULT(x,y) (MKINT((((eint)x)>>1) * (((eint)y)>>1))) #define CHECKEVALUATED(x) if(ISFUN(x) || ISTHUNK(x) \@@ -100,6 +138,33 @@ void** args; } con; +typedef struct {+ VAL* roots;+ VAL* start_roots;+ VAL* from_space;+ VAL* to_space;+ VAL* nursery;++ int heap_size;+ int next;+ int next_nursery;+} VMState;++extern void* e_malloc(VMState* vm, size_t size);+extern void* e_realloc(VMState* vm, void* ptr, size_t size);++// Allocate from a non-GCed region+void* pool_malloc(size_t size);+void* pool_realloc(void* ptr, size_t size);+void* pool_grow_malloc(size_t size);+void* pool_grow_realloc(void* ptr, size_t size);+// Copy value from the given pool into the currently active region+VAL copy(VAL x, pool_t* pool);++void freePool(pool_t* pool);++#define INIT_HEAP_SIZE 1000000+ #define UPDATE(x,res) if (ISINT(res)) { x = MKINT(GETINT(res)); } else { \ SETTY(x, GETTY(res)); x->info=res->info; } #define TAG(x) (((con*)((Closure*)x)->info)->tag & 65535)@@ -173,11 +238,21 @@ // array of zero arity constructors. We don't need more than one of each... extern VAL* zcon; +// Roots for the garbage collector+extern VMState* vm;+ #define MKINT(x) ((void*)((x)<<1)+1) #define GETINT(x) ((eint)(x)>>1) #define GETPTR(x) ((void*)(((VAL)(x))->info)) #define GETSTR(x) ((char*)(((VAL)(x))->info)) +#define GROWROOT +// VAL* rootbase = vm->roots;+#define ADDROOT(v) +// *(vm->roots)=v; vm->roots++;+#define DROPROOTS +// vm->roots=rootbase;+ #define INTTOEINT(x) ((eint)(x)) #define EINTTOINT(x) ((int)(x)) @@ -187,11 +262,13 @@ void* MKSTR(char* str); void* MKPTR(void* ptr);+void* MKFLOAT(double x); // Get values from a closure //int GETINT(void* x); mpz_t* GETBIGINT(void* x);+double GETFLOAT(void* x); //void* GETPTR(void* x); void* MKFREE(int x);@@ -199,8 +276,12 @@ // Exit with fatal error void ERROR(char* msg); +VAL evm_getArg(int i);+int evm_numArgs();+ // Initialise everything-void init_evm();+VMState* init_evm(int argc, char* argv[]);+void close_evm(VMState* vm); void* FASTMALLOC(int size);
+ evm/emalloc.c view
@@ -0,0 +1,21 @@+#include "emalloc.h"++// TMP++// Also make tmps roots when assigned to. Make enough room with GROWROOTS++// When copying, make sure that the addresses stored at the roots are updated.++// Actually, should the root set be the addresses of the local variables? Then+// when they are copied, they can be updated with the new location.++extern ALLOCATOR allocate;+extern REALLOCATOR reallocate;++void* e_malloc(VMState* vm, size_t size) {+ return (VAL)allocate(size);+}++void* e_realloc(VMState* vm, void* ptr, size_t size) {+ return (VAL)reallocate(ptr, size);+}
+ evm/emalloc.h view
@@ -0,0 +1,9 @@+#ifndef _EMALLOC_H+#define _EMALLOC_H++#include "closure.h"++void* e_malloc(VMState* vm, size_t size);+void* e_realloc(VMState* vm, void* ptr, size_t size);++#endif
+ evm/gc_header.h view
@@ -0,0 +1,12 @@+#ifdef USE_BOEHM++# ifndef WIN32+# include <pthread.h>+# define GC_THREADS+# else+# define GC_WIN32_THREADS+# endif++#include <gc/gc.h>++#endif
evm/libevm.a view
binary file changed (22608 → 30528 bytes)
evm/mainprog.c view
@@ -1,22 +1,19 @@-# ifndef WIN32-# include <pthread.h>-# define GC_THREADS-# else-# define GC_WIN32_THREADS-# endif-+#include <gc_header.h> #include "closure.h" void* _do__U_main(); void** _epic_top_of_stack; +VMState* vm;+ int main(int argc, char* argv[]) { void* stacktop = NULL; _epic_top_of_stack = (void**)&stacktop; GC_init();- init_evm();+ vm = init_evm(argc, argv);+ // GC_use_entire_heap = 1; // GC_free_space_divisor = 2; // GC_enable_incremental();@@ -31,10 +28,19 @@ _do___U__main(); - GC_gcollect();+// GC_gcollect(); /* fprintf(stderr, "%d\n", GC_gc_no); fprintf(stderr, "Heap: %d\n", GC_get_heap_size()); fprintf(stderr, "Free: %d\n", GC_get_free_bytes()); fprintf(stderr, "Total: %d\n", GC_get_total_bytes());*/++/*+ if (vm->start_roots!=vm->roots) {+ fprintf(stderr, "Warning: roots left %d\n", vm->roots-vm->start_roots);+ }+*/++ close_evm(vm);+ return 0; }
evm/stdfuns.c view
@@ -11,10 +11,13 @@ void printBigInt(mpz_t x) { printf("%s\n",mpz_get_str(NULL,10,x)); } void epicGC() {+#ifdef USE_BOEHM GC_gcollect();+#endif } void epicMemInfo() {+#ifdef USE_BOEHM GC_gcollect(); int heap = GC_get_heap_size(); int free = GC_get_free_bytes();@@ -23,6 +26,7 @@ printf("Heap size %d\n", heap); printf("Heap used %d\n", heap-free); printf("Total allocations %d\n", total);+#endif } int readInt() {@@ -47,8 +51,11 @@ FILE* f = (FILE*)h; fgets(bufin,128,f); int len = strlen(bufin);-+#ifdef USE_BOEHM VAL c = GC_MALLOC_ATOMIC(sizeof(Closure)+len*sizeof(char)+sizeof(char)+1);+#else+ VAL c = EMALLOC(sizeof(Closure)+len*sizeof(char)+sizeof(char)+1);+#endif SETTY(c, STRING); c->info = ((void*)(c+1)); char *buf = (char*)(c->info);@@ -84,6 +91,20 @@ return buf; } +double strToFloat(char* str)+{+// printf("%s, %f\n",str, strtod(str,NULL));+ return strtod(str,NULL);+}++char* floatToStr(double x)+{+// printf("%f\n",x);+ char* buf = EMALLOC(32);+ sprintf(buf,"%g",x);+ return buf;+}+ void* getNative(void * fn) { return fn; }@@ -112,6 +133,34 @@ return buf; } +char* strrev(char* str) {+ char* buf = EMALLOC((1+strlen(str))*sizeof(char));+ int x = strlen(str);+ buf[x+1]='\0';+ int y = 0; + while(x>0) {+ buf[y++] = str[--x];+ }+ return buf;+}++char* substr(char* str, int start, int len) {+ if (len<0) len=0;+ char* buf = EMALLOC((len+1)*sizeof(char));+ strncpy(buf, str+start, len);+ buf[len]='\0';+ return buf;+}++int strFind(char* str, char c) {+ int i = 0;+ while(*str!='\0') {+ if (*str==c) return i;+ ++i; ++str;+ }+ return -1;+}+ char* append(char* x, char* y) { char* buf = EMALLOC((strlen(x)+strlen(y))*sizeof(char)); strcpy(buf,x);@@ -337,4 +386,16 @@ int isNull(void* ptr) { return ptr==NULL;+}++// Command line arguments++int epic_numArgs()+{+ return evm_numArgs();+}++char* epic_getArg(int i)+{+ return GETSTR(evm_getArg(i)); }
evm/stdfuns.h view
@@ -36,6 +36,9 @@ int isNull(void* ptr); +int epic_numArgs();+char* epic_getArg(int i);+ // IORefs int newRef(); void* readRef(int r);@@ -53,6 +56,9 @@ int strToInt(char* str); char* intToStr(int x); +double strToFloat(char* str);+char* floatToStr(double x);+ mpz_t* strToBigInt(char* str); char* bigIntToStr(mpz_t x); @@ -65,6 +71,10 @@ int strHead(char* str); char* strTail(char* str); char* strCons(int h, char* str);+char* strrev(char* str);+char* substr(char* str, int start, int len);+int strFind(char* str, char c);+ char* append(char* x, char* y); // Big integer arithmetic
+ main/Main.lhs view
@@ -0,0 +1,148 @@+> module Main where++> import System+> import System.Directory+> import System.Environment+> import System.IO+> import Distribution.Version+> import Monad++> import Epic.Compiler+> import Paths_epic++> versionString = showV (versionBranch version)+> where+> showV [] = ""+> showV [a] = show a+> showV (x:xs) = show x ++ "." ++ showV xs++> main = do args <- getArgs+> (fns, opts) <- getInput args+> outfile <- getOutput opts+> ofiles <- compileFiles fns (mkOpts opts)+> copts <- getCOpts opts+> extras <- getExtra opts+> if ((length ofiles) > 0 && (not (elem Obj opts)))+> then link (ofiles ++ copts) extras outfile (not (elem ExtMain opts)) (mkOpts opts)+> else return ()+> where mkOpts (KeepInt:xs) = KeepC:(mkOpts xs)+> mkOpts (TraceOn:xs) = Trace:(mkOpts xs)+> mkOpts (Header f:xs) = MakeHeader f:(mkOpts xs)+> mkOpts (DbgInfo:xs) = Debug:(mkOpts xs)+> mkOpts (CheckLvl i:xs) = Checking i:(mkOpts xs)+> mkOpts (_:xs) = mkOpts xs+> mkOpts [] = []++> compileFiles [] _ = return []+> compileFiles (fn:xs) opts+> | isDotE fn = do+> let ofile = getRoot fn ++ ".o"+> compileOpts fn ofile (Just (getRoot fn ++ ".ei")) opts+> rest <- compileFiles xs opts+> return (ofile:rest)+> | isDotO fn = do+> rest <- compileFiles xs opts+> return (fn:rest)+> | otherwise = do -- probably autogenerated, just build it.+> let ofile = fn ++ ".o"+> compileOpts fn ofile Nothing opts+> rest <- compileFiles xs opts+> return (ofile:rest)++> isDotE ('.':'e':[]) = True+> isDotE (_:xs) = isDotE xs+> isDotE [] = False++> isDotC ('.':'c':[]) = True+> isDotC (_:xs) = isDotC xs+> isDotC [] = False++> isDotO ('.':'o':[]) = True+> isDotO (_:xs) = isDotO xs+> isDotO [] = False++> mkExecname fn = case span (/='.') fn of+> (stem,".e") -> stem+> (stem,_) -> fn ++ ".exe"++> getRoot fn = case span (/='.') fn of+> (stem,_) -> stem++> getInput :: [String] -> IO ([FilePath],[Option])+> getInput args = do let opts = parseArgs args+> processFlags opts False+> fns <- getFile opts+> if (length fns == 0) +> then do showUsage+> return (fns,opts)+> else return (fns,opts)++> showUsage = do putStrLn $ "Epigram Supercombinator Compiler version " ++ versionString+> putStrLn "Usage:\n\tepic <input file> [options]"+> exitWith (ExitFailure 1)++> data Option = KeepInt -- Don't delete intermediate file+> | TraceOn -- Trace while running (debug option)+> | Obj -- Just make the .o, don't link+> | File String -- File to send the compiler+> | Output String -- Output filename+> | Header String -- Header output filename+> | ExtraInc String -- extra files to inlude+> | COpt String -- option to send straight to gcc+> | ExtMain -- external main (i.e. in a .o)+> | CFlags -- output include flags+> | LibFlags -- output linker flags+> | DbgInfo -- generate debug info+> | CheckLvl Int -- Checking level, 0 for none, default none+> deriving Eq++> parseArgs :: [String] -> [Option]+> parseArgs [] = []+> parseArgs ("-keepc":args) = KeepInt:(parseArgs args)+> parseArgs ("-trace":args) = TraceOn:(parseArgs args)+> parseArgs ("-c":args) = Obj:(parseArgs args)+> parseArgs ("-extmain":args) = ExtMain:(parseArgs args)+> parseArgs ("-o":name:args) = (Output name):(parseArgs args)+> parseArgs ("-h":name:args) = (Header name):(parseArgs args)+> parseArgs ("-i":inc:args) = (ExtraInc inc):(parseArgs args)+> parseArgs ("-includedirs":args) = CFlags:(parseArgs args)+> parseArgs ("-libdirs":args) = LibFlags:(parseArgs args)+> parseArgs ("-g":args) = DbgInfo:(parseArgs args)+> parseArgs ("-checking":lvl:args) = CheckLvl (read lvl):(parseArgs args)+> parseArgs (('$':x):args) = (COpt (x ++ concat (map (" "++) args))):[]+> parseArgs (('-':x):args) = (COpt x):(parseArgs args)+> parseArgs (x:args) = (File x):(parseArgs args)++> getFile :: [Option] -> IO [FilePath]+> getFile ((File x):xs) = do fns <- getFile xs+> return (x:fns)+> getFile (_:xs) = getFile xs+> getFile [] = return []++> getOutput :: [Option] -> IO FilePath+> getOutput ((Output fn):xs) = return fn+> getOutput (_:xs) = getOutput xs+> getOutput [] = return "a.out"++> getCOpts :: [Option] -> IO [String]+> getCOpts ((COpt x):xs) = do fns <- getCOpts xs+> return (x:fns)+> getCOpts (_:xs) = getCOpts xs+> getCOpts [] = return []++> getExtra :: [Option] -> IO [String]+> getExtra ((ExtraInc x):xs) = do fns <- getExtra xs+> return (x:fns)+> getExtra (_:xs) = getExtra xs+> getExtra [] = return []++> processFlags :: [Option] -> Bool -> IO ()+> processFlags [] True = do putStrLn ""; exitWith ExitSuccess+> processFlags [] False = return ()+> processFlags (LibFlags:xs) _ = do datadir <- getDataDir+> putStr $ "-L"++datadir++"/evm "+> processFlags xs True+> processFlags (CFlags:xs) _ = do datadir <- getDataDir+> putStr $ "-I"++datadir++"/evm "+> processFlags xs True+> processFlags (_:xs) quit = processFlags xs quit