epic 0.1.8 → 0.1.10
raw patch · 15 files changed
+1943/−50 lines, 15 files
Files
- Epic/Bytecode.lhs +9/−0
- Epic/CodegenC.lhs +3/−2
- Epic/Epic.lhs +95/−34
- Epic/Language.lhs +8/−1
- Epic/Lexer.lhs +4/−2
- Epic/Parser.y +12/−1
- Epic/Scopecheck.lhs +5/−0
- LICENSE +1/−1
- dist/build/Epic/Parser.hs +1587/−0
- epic.cabal +1/−1
- evm/closure.c +45/−7
- evm/closure.h +17/−1
- evm/libevm.a binary
- evm/stdfuns.c +138/−0
- evm/stdfuns.h +18/−0
Epic/Bytecode.lhs view
@@ -239,6 +239,15 @@ > TyUnit -> [ASSIGN vs reg'] > _ -> [ASSIGN vs reg'] > return $ valcode ++ assigncode ++ (ADDVARROOT vs):scopecode++As above, but don't create a new local++> ecomp lazy tcall (Update i val scope) reg vs =+> do reg' <- new_tmp+> valcode <- ecomp lazy Middle val reg' vs+> scopecode <- ecomp lazy tcall scope reg vs+> let assigncode = [ASSIGN i reg']+> return $ valcode ++ assigncode ++ 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
Epic/CodegenC.lhs view
@@ -270,7 +270,7 @@ > cToEpic var TyString = "MKSTR((char*)(" ++ var ++ "))" > cToEpic var TyInt = "MKINT(INTTOEINT(" ++ var ++ "))" > cToEpic var TyPtr = "MKPTR(" ++ var ++ ")"-> cToEpic var TyBigInt = "MKBIGINT((mpz_t*)(" ++ var ++ "))"+> -- cToEpic var TyBigInt = "MKBIGINT((mpz_t*)(" ++ var ++ "))" -- now just a VAL > cToEpic var TyFloat = "MKFLOAT(" ++ var ++ ")" > cToEpic var TyUnit = "NULL" > cToEpic var _ = "(void*)(" ++ var ++")"@@ -287,7 +287,7 @@ castFrom t _ rest = tmp t ++ " = (void*)(" ++ rest ++ ")" > epicToC t TyInt = "EINTTOINT(GETINT("++ t ++"))"-> epicToC t TyBigInt = "*(GETBIGINT("++ t ++"))"+> -- epicToC t TyBigInt = "*(GETBIGINT("++ t ++"))" -- now just a VAL > epicToC t TyString = "GETSTR("++ t ++")" > epicToC t TyFloat = "GETFLOAT(" ++ t ++ ")" > epicToC t TyPtr = "GETPTR("++ t ++")"@@ -306,6 +306,7 @@ > 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 Modulo 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++");"
Epic/Epic.lhs view
@@ -16,14 +16,20 @@ > Expr, Term, Name, name, > (@@), case_, con_, tuple_, con, tuple, > constcase, defaultcase,-> if_, while_, whileAcc_, error_, op_,+> if_, while_, whileAcc_, error_, > lazy_, effect_, > foreign_, foreignL_, foreignConst_, foreignConstL_,-> let_, letN_, Op(..),+> let_, letN_, update_, op_, > str, int, float, char, bool, unit_, (!.), fn, ref, (+>),+> malloc_, > -- * Types > Type, tyInt, tyChar, tyBool, tyFloat, tyString,-> tyPtr, tyUnit, tyAny, tyC, +> tyPtr, tyUnit, tyAny, tyC,+> -- * Operators+> plus_, minus_, times_, divide_, +> plusF_, minusF_, timesF_, divideF_,+> eq_, lt_, lte_, gt_, gte_, +> eqF_, ltF_, lteF_, gtF_, gteF_, shiftl_, shiftr_, > -- * Declarations and programs > EpicDecl(..), Program, > -- * Compiling and execution@@ -42,6 +48,7 @@ > import Epic.Language > import Epic.Compiler+> import Epic.Parser Allow Haskell functions to be used to build expressions. @@ -58,18 +65,21 @@ > instance EpicExpr Term where > term e = e -> instance (EpicExpr e) => EpicExpr (Expr -> e) where+> instance EpicExpr String where+> term s = case parseExpr s of+> Success t -> return t+> Failure err f l -> fail err++> instance EpicExpr e => EpicExpr (Expr -> e) where > term f = do var <- get > put (var+1) > let arg = MN "evar" var > e' <- term (f (R arg)) > return (Lam arg TyAny e') -> instance EpicExpr ([Name], Expr) where-> term (ns, e) = lam ns e where-> lam [] e = return e-> lam (n:ns) e = do e' <- lam ns e-> return (Lam n TyAny e')+> instance EpicExpr e => EpicExpr ([Name], e) where+> term (ns, e) = do e' <- term e+> foldM (\e n -> return (Lam n TyAny e)) e' ns > -- | Build a function definition, with a name supply > class EpicFn e where@@ -101,12 +111,34 @@ Binary operators -> eq = Op OpEQ-> lt = Op OpLT-> lte = Op OpLE-> gt = Op OpGT-> gte = Op OpGE+> plus_, minus_, times_, divide_, plusF_, minusF_, timesF_, divideF_ :: Op+> lt_, lte_, gt_, gte_, ltF_, lteF_, gtF_, gteF_, shiftl_, shiftr_ :: Op +> plus_ = Plus+> minus_ = Minus+> times_ = Times+> divide_ = Divide++> plusF_ = FPlus+> minusF_ = FMinus+> timesF_ = FTimes+> divideF_ = FDivide++> eq_ = OpEQ+> lt_ = OpLT+> lte_ = OpLE+> gt_ = OpGT+> gte_ = OpGE++> eqF_ = OpFEQ+> ltF_ = OpFLT+> lteF_ = OpFLE+> gtF_ = OpFGT+> gteF_ = OpFGE++> shiftl_ = ShL+> shiftr_ = ShR+ > mkFunc :: EpicFn e => e -> Func > mkFunc e = evalState (func e) 0 @@ -235,6 +267,15 @@ > foreignConst_ t str = term $ ForeignCall t str [] > foreignConstL_ t str = term $ LazyForeignCall t str [] +> -- | Evaluate an expression under manually allocated memory. Creates a pool+> -- of memory. All allocation is from this pool, and there is no garbage+> -- collection. The pool is freed after evaluation.+> malloc_ :: (EpicExpr a, EpicExpr b) => +> a -- ^ Size of block to allocate+> -> b -- ^ Expression to evaluate+> -> Term+> malloc_ = exp2 (WithMem FixedPool)+ mkCon :: Int -> [Term] -> Term mkCon tag args = do args' <- mapM expr args return (Con tag args')@@ -261,15 +302,34 @@ > sc' <- term sc > return $ Let n TyAny val' sc' +> -- | Build expressions, with a name supply+> class LetExpr e where+> let_ :: EpicExpr val => val -> e -> State Int Expr++> instance LetExpr (Expr -> Term) where+> let_ = letV_++> instance EpicExpr sc => LetExpr (Name, sc) where+> let_ val (n, sc) = letN_ n val sc+ > -- | Let bindings with higher order syntax-> let_ :: (EpicExpr e) =>+> letV_ :: (EpicExpr e) => > e -> (Expr -> Term) -> Term-> let_ e f = do e' <- term e-> f' <- f (R (MN "DUMMY" 0))-> let var = MN "loc" (topVar f')-> fv <- f (R var)-> return $ Let var TyAny e' fv+> letV_ e f = do e' <- term e+> f' <- f (R (MN "DUMMY" 0))+> let var = MN "loc" (topVar f')+> fv <- f (R var)+> return $ Let var TyAny e' fv +> -- | Update a local variable (could be an explicit name or bound with+> -- a lambda, so we let it be an 'Expr'.+> update_ :: (EpicExpr val, EpicExpr scope) =>+> Expr -> val -> scope -> Term+> update_ (R n) val sc = do val' <- term val+> sc' <- term sc+> return $ LetM n val' sc'+> update_ _ _ _ = fail "Can't update something which isn't a variable"+ > maxs = foldr max 0 > topVar (Let (MN "loc" x) _ _ _) = x+1@@ -320,7 +380,7 @@ > -- | Sequence terms --- evaluate the first then second > (+>) :: (EpicExpr c) => c -> Term -> Term-> (+>) c k = let_ c (\x -> k)+> (+>) c k = let_ c (\(x :: Expr) -> k) > tyInt, tyChar, tyBool, tyFloat, tyString, tyPtr, tyUnit, tyAny :: Type > tyC :: String -> Type@@ -364,25 +424,25 @@ > _ -> return $ App f' [a'] > -- | Top level declarations-> data EpicDecl = forall e. EpicFn e => EpicFn e -- ^ Normal function+> data EpicDecl = forall e. EpicFn e => EpicFn Name e -- ^ Normal function > | Include String -- ^ Include a C header > | Link String -- ^ Link to a C library > | CType String -- ^ Export a C type > instance Show EpicDecl where-> show (EpicFn e) = show (evalState (func e) 0)+> show (EpicFn n e) = show (n, evalState (func e) 0) -> type Program = [(Name, EpicDecl)]+> type Program = [EpicDecl] > name :: String -> Name > name = UN -> mkDecl :: (Name, EpicDecl) -> Decl-> mkDecl (n, EpicFn e) = Decl n TyAny (mkFunc e) Nothing []+> mkDecl :: EpicDecl -> Decl+> mkDecl (EpicFn n e) = Decl n TyAny (mkFunc e) Nothing [] > -- mkDecl (n, Epic.Epic.Extern nm ty tys) = Epic.Language.Extern nm ty tys-> mkDecl (n, Epic.Epic.Include f) = Epic.Language.Include f-> mkDecl (n, Epic.Epic.Link f) = Epic.Language.Link f-> mkDecl (n, Epic.Epic.CType f) = Epic.Language.CType f+> mkDecl (Epic.Epic.Include f) = Epic.Language.Include f+> mkDecl (Epic.Epic.Link f) = Epic.Language.Link f+> mkDecl (Epic.Epic.CType f) = Epic.Language.CType f > -- |Compile a program to an executable > compile :: Program -> FilePath -> IO ()@@ -438,9 +498,10 @@ > intToString_ x = foreign_ tyString "intToStr" [(x, tyInt)] > -- | Some default definitions: putStr, putStrLn, readStr, append, intToString-> basic_defs = [(name "putStr", EpicFn putStr_),-> (name "putStrLn", EpicFn putStrLn_),-> (name "readStr", EpicFn readStr_),-> (name "append", EpicFn append_),-> (name "intToString", EpicFn intToString_)]+> basic_defs :: [EpicDecl]+> basic_defs = [EpicFn (name "putStr") putStr_,+> EpicFn (name "putStrLn") putStrLn_,+> EpicFn (name "readStr") readStr_,+> EpicFn (name "append") append_,+> EpicFn (name "intToString") intToString_]
Epic/Language.lhs view
@@ -108,6 +108,8 @@ > | WhileAcc Expr Expr Expr > | Op Op Expr Expr -- Infix operator > | Let Name Type Expr Expr -- Let binding+> | LetM Name Expr Expr -- Update a variable+> | Update Int Expr Expr -- Update a variable (scope-checked) > | Lam Name Type Expr -- inner lambda > | Error String -- Exit with error message > | Impossible -- Claimed impossible to reach code@@ -134,7 +136,8 @@ > data Allocator = FixedPool | GrowablePool > deriving Eq -> data Op = Plus | Minus | Times | Divide | OpEQ | OpLT | OpLE | OpGT | OpGE+> data Op = Plus | Minus | Times | Divide | Modulo+> | OpEQ | OpLT | OpLE | OpGT | OpGE > | FPlus | FMinus | FTimes | FDivide > | OpFEQ | OpFLT | OpFLE | OpFGT | OpFGE > | ShL | ShR@@ -161,6 +164,10 @@ > ", " ++ show a ++ ")" > show (Op o l r) = "(" ++ show l ++ " " ++ show o ++ " " ++ show r ++")" > show (Let n t v e) = "let " ++ show n ++ ":" ++ show t ++ " = " +++> show v ++ " in " ++ show e+> show (LetM n v e) = "let! " ++ show n ++ " = " +++> show v ++ " in " ++ show e+> show (Update n v e) = "let! var" ++ show n ++ " = " ++ > show v ++ " in " ++ show e > show (Lam n t e) = "\\ " ++ show n ++ ":" ++ show t ++ " . " ++ > show e
Epic/Lexer.lhs view
@@ -79,6 +79,7 @@ > | TokenMinus > | TokenTimes > | TokenDivide+> | TokenMod > | TokenFPlus > | TokenFMinus > | TokenFTimes@@ -179,7 +180,8 @@ > lexer cont ('|':cs) = cont TokenBar cs > lexer cont ('.':cs) = cont TokenDot cs > lexer cont ('\\':cs) = cont TokenLam cs-> lexer cont ('%':cs) = lexSpecial cont cs+> lexer cont ('%':c:cs) | isAlpha c = lexSpecial cont (c:cs)+> lexer cont ('%':cs) = cont TokenMod cs > lexer cont (c:cs) = lexError c cs > lexError c s f l = failP (show l ++ ": Unrecognised token '" ++ [c] ++ "'\n") s f l@@ -284,7 +286,7 @@ > ("fixed",rest) -> cont TokenFixed rest > ("growable",rest) -> cont TokenGrowable rest > ("unused", rest) -> cont TokenUnused rest-> (thing,rest) -> lexError '%' rest+> (thing,rest) -> cont TokenMod (thing++rest) > mkname :: String -> Token > mkname c = TokenName (UN c)
Epic/Parser.y view
@@ -12,6 +12,8 @@ } %name mkparse Program+%name mkexpr Expr+%name mkdecl Declaration %tokentype { Token } %monad { P } { thenP } { returnP }@@ -71,6 +73,7 @@ '-' { TokenMinus } '*' { TokenTimes } '/' { TokenDivide }+ '%' { TokenMod } fplus { TokenFPlus } fminus { TokenFMinus } ftimes { TokenFTimes }@@ -112,7 +115,7 @@ %left '<' '>' le ge flt fgt fle fge %left shl shr %left '+' '-' fplus fminus-%left '*' '/' ftimes fdiv+%left '*' '/' ftimes fdiv '%' %left NEG %left '!' %nonassoc '('@@ -182,6 +185,7 @@ | Const { Const $1 } | Expr '!' int { Proj $1 $3 } | let name ':' Type '=' Expr in Expr %prec LET { Let $2 $4 $6 $8 }+ | let '!' name '=' Expr in Expr %prec LET { LetM $3 $5 $7 } | '\\' name ':' Type '.' Expr %prec LET { Lam $2 $4 $6 } | Expr ';' Expr { Let (MN "unused" 0) TyUnit $1 $3 } | if Expr then Expr else Expr %prec IF { If $2 $4 $6 }@@ -222,6 +226,7 @@ | '-' Expr %prec NEG { Op Minus (Const (MkInt 0)) $2 } | Expr '*' Expr { Op Times $1 $3 } | Expr '/' Expr { Op Divide $1 $3 }+ | Expr '%' Expr { Op Modulo $1 $3 } | Expr fplus Expr { Op FPlus $1 $3 } | Expr fminus Expr { Op FMinus $1 $3 }@@ -280,6 +285,12 @@ parse :: String -> FilePath -> Result [Decl] parse s fn = mkparse s fn 1++parseExpr :: String -> Result Expr+parseExpr s = mkexpr s "[expr]" 1++parseDecl :: String -> Result Decl+parseDecl s = mkdecl s "[decl]" 1 parseFile :: FilePath -> IO (Result [Decl]) parseFile fn = do s <- readFile fn
Epic/Scopecheck.lhs view
@@ -51,6 +51,11 @@ > else return $ Const (MkInt 1234567890) > (Just _) -> return $ R n > (Just i) -> return $ V i+> tc env (LetM n v sc) = case lookup n env of+> Nothing -> lift $ fail $ "Unknown local to update" ++ showuser n+> (Just i) -> do v' <- tc env v+> sc' <- tc env sc+> return $ Update i v' sc' > tc env (Let n ty v sc) = do > v' <- tc env v > sc' <- tc ((n,length env):env) sc
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2006 Edwin Brady+Copyright (c) 2006-10 Edwin Brady School of Computer Science, University of St Andrews All rights reserved.
+ dist/build/Epic/Parser.hs view
@@ -0,0 +1,1587 @@+{-# 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+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts++-- parser produced by Happy Version 1.18.5++newtype HappyAbsSyn = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+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 :: (Type) -> (HappyAbsSyn )+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (Type)+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Decl) -> (HappyAbsSyn )+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> (Decl)+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: ([CGFlag]) -> (HappyAbsSyn )+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> ([CGFlag])+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: (CGFlag) -> (HappyAbsSyn )+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> (CGFlag)+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (Maybe String) -> (HappyAbsSyn )+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (Maybe String)+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: ([(Name,Type)]) -> (HappyAbsSyn )+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> ([(Name,Type)])+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Expr) -> (HappyAbsSyn )+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (Expr)+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (Allocator) -> (HappyAbsSyn )+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> (Allocator)+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 :: ([CaseAlt]) -> (HappyAbsSyn )+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> ([CaseAlt])+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (CaseAlt) -> (HappyAbsSyn )+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (CaseAlt)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Expr) -> (HappyAbsSyn )+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Expr)+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ([Expr]) -> (HappyAbsSyn )+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> ([Expr])+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([(Expr,Type)]) -> (HappyAbsSyn )+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> ([(Expr,Type)])+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (Const) -> (HappyAbsSyn )+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn ) -> (Const)+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (LineNumber) -> (HappyAbsSyn )+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn ) -> (LineNumber)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: (String) -> (HappyAbsSyn )+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn ) -> (String)+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+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# "\x67\x03\x01\x00\x29\x00\x29\x00\x00\x00\xdb\xff\x3f\x02\x25\x02\x23\x02\x22\x02\xca\x01\x83\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\x0f\x02\x09\x00\x01\x00\x01\x00\xdd\x01\xdc\x01\x00\x00\x25\x00\xdb\x01\x34\x00\x03\x02\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\xff\x01\x75\x01\x52\x02\xf1\x01\x67\x03\x00\x00\xa2\x01\xe6\xff\xe6\xff\x3f\x01\xb8\x01\xf7\x01\x00\x00\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x01\x00\x00\x01\x00\x34\x00\x01\x00\xf7\x00\x01\x00\x4b\x00\x21\x00\x8d\x01\xc8\x01\x9d\x01\x01\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\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\xb5\x01\x01\x00\x00\x00\x00\x00\x83\x01\x00\x00\xac\x01\xdb\xff\x00\x00\x00\x00\x00\x00\x81\x01\xaa\x01\x4b\x02\x00\x00\x67\x02\x67\x02\x67\x02\x67\x02\x7f\x02\x7f\x02\x67\x02\x67\x02\x2f\x02\x67\x02\x67\x02\x2f\x02\xe6\xff\xe6\xff\x02\x00\x02\x00\xe6\xff\xe6\xff\xe6\xff\x02\x00\x02\x00\x6d\x01\x01\x00\x6c\x01\x34\x00\x62\x01\x01\x00\x23\x01\x44\x01\x00\x00\x00\x00\xd8\x01\x8b\x01\xb9\x01\x00\x00\x61\x01\x00\x00\x00\x00\x01\x00\x34\x00\x00\x00\x00\x00\x3a\x01\x00\x00\x01\x00\x00\x00\x4e\x01\x00\x00\x01\x00\x01\x00\x67\x00\x0b\x00\x35\x01\x01\x00\x42\x01\x00\x00\x31\x01\x0c\x01\x51\x01\x0b\x01\x34\x00\xd7\x00\x00\x00\xcc\x00\x01\x00\x08\x01\xf6\x00\xcd\x00\x17\x01\xc5\x00\x01\x00\xeb\x00\x07\x01\x01\x00\x9a\x01\xda\x00\x01\x00\x13\x02\x00\x00\x34\x00\xd0\x00\x01\x00\x00\x00\x01\x00\x13\x02\x01\x00\xcf\x00\x01\x00\x0b\x00\x00\x00\xa9\x00\x01\x00\x34\x00\xac\x00\xa6\x00\x34\x00\xe2\x00\x00\x00\x13\x02\x01\x00\x00\x00\x13\x02\xe2\x00\x13\x02\x7e\x01\x5f\x01\x00\x00\x8f\x00\x01\x00\x00\x00\x00\x00\xab\x00\x13\x02\x00\x00\x95\x00\x01\x00\x7c\x00\x00\x00\x01\x00\x13\x02\x13\x02\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xb0\x03\x9e\x03\x2f\x00\x0a\x00\x00\x00\xce\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\x95\x03\x94\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x8b\x03\xb9\x02\x8a\x03\x81\x03\x00\x00\x00\x00\xac\x03\x00\x00\xa6\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\x80\x03\xb2\x00\x77\x03\x99\x00\x76\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x02\x6d\x03\x6c\x03\x63\x03\x62\x03\x59\x03\x58\x03\x4f\x03\x4e\x03\x45\x03\x44\x03\x3b\x03\x3a\x03\x31\x03\x30\x03\x27\x03\x26\x03\x1d\x03\x1c\x03\x13\x03\x12\x03\x09\x03\x00\x00\x08\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\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\xec\x00\x00\x00\x6d\x00\x00\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x5a\x00\x5b\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xfe\x02\xf5\x02\x00\x00\x8b\x00\x00\x00\xf4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\xeb\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x02\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\xe1\x02\x00\x00\x00\x00\x38\x00\x00\x00\xe0\x02\x00\x00\xd7\x02\x00\x00\xd6\x02\x00\x00\xcd\x02\x14\x00\x00\x00\x00\x00\xcc\x02\x31\x00\x00\x00\x00\x00\x26\x00\x1f\x00\x00\x00\x00\x00\xc3\x02\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x02\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xe4\xff\x00\x00\xe4\xff\x00\x00\x00\x00\xe8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xff\xcd\xff\xd8\xff\xdf\xff\x9c\xff\xa2\xff\xa1\xff\x9f\xff\x9e\xff\x9d\xff\xa0\xff\x9b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xff\x00\x00\x00\x00\x00\x00\x00\x00\xcb\xff\x00\x00\xa8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe4\xff\x00\x00\xe4\xff\xfb\xff\x00\x00\xb7\xff\xbd\xff\xa7\xff\x00\x00\x00\x00\xcc\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xed\xff\xef\xff\x00\x00\xf0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xff\xe3\xff\x00\x00\xea\xff\x00\x00\xe8\xff\xe5\xff\xe6\xff\xe7\xff\x00\x00\xe2\xff\xd3\xff\xd7\xff\xac\xff\xad\xff\xb1\xff\xb2\xff\xb3\xff\xb4\xff\xaa\xff\xab\xff\xa9\xff\xaf\xff\xb0\xff\xae\xff\xb5\xff\xb6\xff\xb8\xff\xb9\xff\xba\xff\xbb\xff\xbc\xff\xbe\xff\xbf\xff\x00\x00\xa8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xff\xc7\xff\x00\x00\x00\x00\x00\x00\xee\xff\x00\x00\xde\xff\xdc\xff\xa8\xff\x00\x00\x98\xff\xfa\xff\x00\x00\xa6\xff\xa5\xff\xda\xff\x00\x00\xdb\xff\x00\x00\x00\x00\x00\x00\xc5\xff\x00\x00\x00\x00\x00\x00\xdd\xff\x00\x00\x00\x00\xe2\xff\x00\x00\x00\x00\x00\x00\xd9\xff\x00\x00\x00\x00\x00\x00\xc4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x00\x00\x00\x00\x00\x00\xd4\xff\xca\xff\x00\x00\x00\x00\x00\x00\xd1\xff\x00\x00\xd2\xff\x00\x00\x00\x00\x00\x00\xc5\xff\xc6\xff\x00\x00\x00\x00\x00\x00\xe1\xff\x00\x00\x00\x00\xe2\xff\xeb\xff\xd5\xff\x00\x00\xc3\xff\xc1\xff\xe2\xff\xc0\xff\x00\x00\x00\x00\xc9\xff\xa4\xff\xa5\xff\xcf\xff\xd0\xff\x00\x00\xd6\xff\xe0\xff\x00\x00\x00\x00\x00\x00\xa3\xff\x00\x00\xec\xff\xc2\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x26\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x01\x00\x07\x00\x02\x00\x09\x00\x03\x00\x05\x00\x0c\x00\x2b\x00\x0e\x00\x0f\x00\x07\x00\x06\x00\x09\x00\x16\x00\x17\x00\x0c\x00\x19\x00\x1a\x00\x0f\x00\x1c\x00\x0a\x00\x0b\x00\x1f\x00\x20\x00\x17\x00\x18\x00\x23\x00\x06\x00\x25\x00\x01\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2b\x00\x48\x00\x54\x00\x2f\x00\x02\x00\x01\x00\x32\x00\x05\x00\x33\x00\x34\x00\x35\x00\x37\x00\x01\x00\x38\x00\x39\x00\x1b\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\x15\x00\x48\x00\x01\x00\x2b\x00\x28\x00\x4d\x00\x06\x00\x2b\x00\x48\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x01\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x1d\x00\x48\x00\x49\x00\x07\x00\x11\x00\x09\x00\x01\x00\x07\x00\x0c\x00\x09\x00\x0e\x00\x0f\x00\x0c\x00\x0d\x00\x2b\x00\x0f\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x1e\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x0a\x00\x0b\x00\x06\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x08\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x03\x00\x04\x00\x01\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x01\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x4e\x00\x48\x00\x49\x00\x24\x00\x07\x00\x3a\x00\x09\x00\x03\x00\x04\x00\x0c\x00\x2b\x00\x0e\x00\x0f\x00\x2c\x00\x55\x00\x4a\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x01\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x24\x00\x48\x00\x49\x00\x07\x00\x4e\x00\x09\x00\x4a\x00\x2b\x00\x0c\x00\x0d\x00\x2b\x00\x0f\x00\x2c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2c\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x4e\x00\x48\x00\x49\x00\x2b\x00\x2c\x00\x21\x00\x22\x00\x03\x00\x4e\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x4e\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x4a\x00\x2e\x00\x2c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x4b\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x47\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2c\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x4a\x00\x2c\x00\x3a\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2b\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x4c\x00\x48\x00\x49\x00\x4a\x00\x2b\x00\x2c\x00\x2b\x00\x02\x00\x4a\x00\x2d\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2c\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x3a\x00\x48\x00\x49\x00\x2b\x00\x2c\x00\x01\x00\x2b\x00\x01\x00\x2b\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x03\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x2b\x00\x01\x00\x55\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x47\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x2b\x00\x2c\x00\x02\x00\x02\x00\x30\x00\x47\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x02\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x01\x00\x48\x00\x49\x00\x2b\x00\x2c\x00\x02\x00\x2b\x00\x2b\x00\x2b\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x03\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x55\x00\x48\x00\x49\x00\x2b\x00\x2c\x00\x02\x00\x02\x00\x01\x00\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\x02\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\xff\xff\x55\x00\x41\x00\x42\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x07\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x48\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x07\x00\x09\x00\x09\x00\xff\xff\x0c\x00\x0c\x00\xff\xff\x0f\x00\x0f\x00\x07\x00\x00\x00\x09\x00\x02\x00\xff\xff\x0c\x00\x05\x00\x00\x00\x0f\x00\x02\x00\xff\xff\x00\x00\x05\x00\x02\x00\xff\xff\xff\xff\x05\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\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\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\x6c\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x4b\x00\xbc\x00\x04\x00\x0c\x00\xb6\x00\x05\x00\x0d\x00\x4e\x00\xe7\x00\x0e\x00\xea\x00\xe1\x00\x0c\x00\x18\x00\x19\x00\x0d\x00\x1a\x00\x1b\x00\x0e\x00\x1c\x00\xd6\x00\xb4\x00\x1d\x00\x1e\x00\xb7\x00\xb8\x00\x1f\x00\xe3\x00\x20\x00\xe4\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x4e\x00\x64\x00\x6d\x00\x26\x00\x0a\x00\xd3\x00\x27\x00\x05\x00\x51\x00\x52\x00\x53\x00\x28\x00\xdd\x00\x56\x00\x57\x00\x8c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x64\x00\xcf\x00\x4e\x00\x45\x00\x29\x00\xad\x00\x46\x00\x4c\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x9c\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x8d\x00\x64\x00\x65\x00\xbc\x00\x9b\x00\x0c\x00\xa6\x00\x31\x00\x0d\x00\x0c\x00\xc2\x00\x0e\x00\x0d\x00\x9d\x00\x4e\x00\x0e\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xb9\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\xb3\x00\xb4\x00\xaa\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x8e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\x6d\x00\x6a\x00\x92\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x35\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xe9\x00\x64\x00\x65\x00\xd6\x00\xbc\x00\xe6\x00\x0c\x00\x69\x00\x6a\x00\x0d\x00\x4e\x00\xbd\x00\x0e\x00\xe7\x00\xff\xff\xdf\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xac\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xce\x00\x64\x00\x65\x00\x31\x00\xd2\x00\x0c\x00\xd3\x00\x4e\x00\x0d\x00\xa8\x00\xd9\x00\x0e\x00\xdd\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xc1\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xc8\x00\x64\x00\x65\x00\x4e\x00\xc5\x00\x90\x00\x91\x00\xc9\x00\xca\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xcf\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\xc6\x00\xcc\x00\xd1\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xcb\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\xc4\x00\xac\x00\xaf\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xb0\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\xa4\x00\xb1\x00\xb3\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xbc\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xbf\x00\x64\x00\x65\x00\x99\x00\x4e\x00\xe0\x00\x9f\x00\xa1\x00\xa3\x00\xa6\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\xaa\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xa8\x00\x64\x00\x65\x00\x4e\x00\xe1\x00\xac\x00\xad\x00\x6f\x00\x70\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x72\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\x89\x00\x8a\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x8b\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xc2\x00\x64\x00\x65\x00\x4e\x00\xa0\x00\x95\x00\x96\x00\x98\x00\x9a\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x2d\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x2f\x00\x64\x00\x65\x00\x4e\x00\xa2\x00\x35\x00\x44\x00\x47\x00\x48\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x4d\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\xff\xff\x64\x00\x65\x00\x4e\x00\x97\x00\x66\x00\x67\x00\x68\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x00\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\x69\x00\x00\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x00\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x00\x00\x00\x00\x59\x00\x5a\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x65\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x00\x00\x00\x00\x59\x00\x5a\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x4e\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x2c\x00\x00\x00\xfc\xff\x5e\x00\x5f\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x31\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x0d\x00\x87\x00\x31\x00\x0e\x00\x0c\x00\x00\x00\x00\x00\x0d\x00\x32\x00\x64\x00\x0e\x00\xe9\x00\xe2\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\xd4\x00\xd7\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\xd9\x00\xda\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\xdb\x00\xbf\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\xc6\x00\xcc\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\xb1\x00\xb9\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\xba\x00\xa4\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x70\x00\x72\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x73\x00\x74\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x75\x00\x76\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x77\x00\x78\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x79\x00\x7a\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x7b\x00\x7c\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x7d\x00\x7e\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x7f\x00\x80\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x81\x00\x82\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x83\x00\x84\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x85\x00\x86\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x8d\x00\x91\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x93\x00\x2f\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x30\x00\x33\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x48\x00\x49\x00\x0c\x00\x0c\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0e\x00\x0e\x00\x0b\x00\x9a\x00\x0c\x00\x2a\x00\x00\x00\x0d\x00\x05\x00\x2d\x00\x0e\x00\x2a\x00\x00\x00\x29\x00\x05\x00\x2a\x00\x00\x00\x00\x00\x05\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x2c\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\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 (3, 103) [+ (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),+ (84 , happyReduce_84),+ (85 , happyReduce_85),+ (86 , happyReduce_86),+ (87 , happyReduce_87),+ (88 , happyReduce_88),+ (89 , happyReduce_89),+ (90 , happyReduce_90),+ (91 , happyReduce_91),+ (92 , happyReduce_92),+ (93 , happyReduce_93),+ (94 , happyReduce_94),+ (95 , happyReduce_95),+ (96 , happyReduce_96),+ (97 , happyReduce_97),+ (98 , happyReduce_98),+ (99 , happyReduce_99),+ (100 , happyReduce_100),+ (101 , happyReduce_101),+ (102 , happyReduce_102),+ (103 , happyReduce_103)+ ]++happy_n_terms = 86 :: Int+happy_n_nonterms = 18 :: Int++happyReduce_3 = happySpecReduce_1 0# happyReduction_3+happyReduction_3 happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn6+ ([happy_var_1]+ )}++happyReduce_4 = happySpecReduce_2 0# happyReduction_4+happyReduction_4 happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut6 happy_x_2 of { happy_var_2 -> + happyIn6+ (happy_var_1:happy_var_2+ )}}++happyReduce_5 = happyMonadReduce 4# 0# happyReduction_5+happyReduction_5 (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 happyOut6 happy_x_3 of { happy_var_3 -> + case happyOut23 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 (happyIn6 r))++happyReduce_6 = happySpecReduce_1 1# happyReduction_6+happyReduction_6 happy_x_1+ = happyIn7+ (TyInt+ )++happyReduce_7 = happySpecReduce_1 1# happyReduction_7+happyReduction_7 happy_x_1+ = happyIn7+ (TyBigInt+ )++happyReduce_8 = happySpecReduce_1 1# happyReduction_8+happyReduction_8 happy_x_1+ = happyIn7+ (TyChar+ )++happyReduce_9 = happySpecReduce_1 1# happyReduction_9+happyReduction_9 happy_x_1+ = happyIn7+ (TyBool+ )++happyReduce_10 = happySpecReduce_1 1# happyReduction_10+happyReduction_10 happy_x_1+ = happyIn7+ (TyFloat+ )++happyReduce_11 = happySpecReduce_1 1# happyReduction_11+happyReduction_11 happy_x_1+ = happyIn7+ (TyBigFloat+ )++happyReduce_12 = happySpecReduce_1 1# happyReduction_12+happyReduction_12 happy_x_1+ = happyIn7+ (TyString+ )++happyReduce_13 = happySpecReduce_1 1# happyReduction_13+happyReduction_13 happy_x_1+ = happyIn7+ (TyPtr+ )++happyReduce_14 = happySpecReduce_1 1# happyReduction_14+happyReduction_14 happy_x_1+ = happyIn7+ (TyUnit+ )++happyReduce_15 = happySpecReduce_1 1# happyReduction_15+happyReduction_15 happy_x_1+ = happyIn7+ (TyAny+ )++happyReduce_16 = happySpecReduce_1 1# happyReduction_16+happyReduction_16 happy_x_1+ = happyIn7+ (TyData+ )++happyReduce_17 = happySpecReduce_2 1# happyReduction_17+happyReduction_17 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> + happyIn7+ (TyCType happy_var_2+ )}++happyReduce_18 = happySpecReduce_1 1# happyReduction_18+happyReduction_18 happy_x_1+ = happyIn7+ (TyFun+ )++happyReduce_19 = happyReduce 10# 2# happyReduction_19+happyReduction_19 (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 happyOut11 happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenName happy_var_3) -> + case happyOut12 happy_x_5 of { happy_var_5 -> + case happyOut7 happy_x_8 of { happy_var_8 -> + case happyOut13 happy_x_10 of { happy_var_10 -> + happyIn8+ (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_20 = happyReduce 7# 2# happyReduction_20+happyReduction_20 (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 happyOut12 happy_x_4 of { happy_var_4 -> + case happyOut7 happy_x_7 of { happy_var_7 -> + happyIn8+ (mkExtern happy_var_2 (map snd happy_var_4) happy_var_7 (map fst happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_21 = happySpecReduce_2 2# happyReduction_21+happyReduction_21 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> + happyIn8+ (Include happy_var_2+ )}++happyReduce_22 = happySpecReduce_2 2# happyReduction_22+happyReduction_22 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> + happyIn8+ (CType happy_var_2+ )}++happyReduce_23 = happySpecReduce_0 3# happyReduction_23+happyReduction_23 = happyIn9+ ([]+ )++happyReduce_24 = happySpecReduce_2 3# happyReduction_24+happyReduction_24 happy_x_2+ happy_x_1+ = case happyOut10 happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { happy_var_2 -> + happyIn9+ (happy_var_1:happy_var_2+ )}}++happyReduce_25 = happySpecReduce_1 4# happyReduction_25+happyReduction_25 happy_x_1+ = happyIn10+ (Inline+ )++happyReduce_26 = happySpecReduce_1 4# happyReduction_26+happyReduction_26 happy_x_1+ = happyIn10+ (Strict+ )++happyReduce_27 = happySpecReduce_0 5# happyReduction_27+happyReduction_27 = happyIn11+ (Nothing+ )++happyReduce_28 = happySpecReduce_2 5# happyReduction_28+happyReduction_28 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> + happyIn11+ (Just happy_var_2+ )}++happyReduce_29 = happySpecReduce_0 6# happyReduction_29+happyReduction_29 = happyIn12+ ([]+ )++happyReduce_30 = happySpecReduce_3 6# happyReduction_30+happyReduction_30 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> + case happyOut7 happy_x_3 of { happy_var_3 -> + happyIn12+ ([(happy_var_1,happy_var_3)]+ )}}++happyReduce_31 = happyReduce 5# 6# happyReduction_31+happyReduction_31 (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 happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut12 happy_x_5 of { happy_var_5 -> + happyIn12+ ((happy_var_1,happy_var_3):happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_32 = happySpecReduce_1 7# happyReduction_32+happyReduction_32 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenName happy_var_1) -> + happyIn13+ (R happy_var_1+ )}++happyReduce_33 = happySpecReduce_3 7# happyReduction_33+happyReduction_33 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_2 of { happy_var_2 -> + happyIn13+ (happy_var_2+ )}++happyReduce_34 = happyReduce 4# 7# happyReduction_34+happyReduction_34 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn13+ (App happy_var_1 happy_var_3+ ) `HappyStk` happyRest}}++happyReduce_35 = happySpecReduce_3 7# happyReduction_35+happyReduction_35 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut19 happy_x_2 of { happy_var_2 -> + happyIn13+ (Con 0 happy_var_2+ )}++happyReduce_36 = happyReduce 4# 7# happyReduction_36+happyReduction_36 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn13+ (Lazy happy_var_3+ ) `HappyStk` happyRest}++happyReduce_37 = happyReduce 4# 7# happyReduction_37+happyReduction_37 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn13+ (Effect happy_var_3+ ) `HappyStk` happyRest}++happyReduce_38 = happyReduce 5# 7# happyReduction_38+happyReduction_38 (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 happyOut19 happy_x_4 of { happy_var_4 -> + happyIn13+ (Con happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_39 = happySpecReduce_1 7# happyReduction_39+happyReduction_39 happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn13+ (Const happy_var_1+ )}++happyReduce_40 = happySpecReduce_3 7# happyReduction_40+happyReduction_40 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn13+ (Proj happy_var_1 happy_var_3+ )}}++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 happyOutTok happy_x_2 of { (TokenName happy_var_2) -> + case happyOut7 happy_x_4 of { happy_var_4 -> + case happyOut13 happy_x_6 of { happy_var_6 -> + case happyOut13 happy_x_8 of { happy_var_8 -> + happyIn13+ (Let happy_var_2 happy_var_4 happy_var_6 happy_var_8+ ) `HappyStk` happyRest}}}}++happyReduce_42 = happyReduce 7# 7# happyReduction_42+happyReduction_42 (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_3 of { (TokenName happy_var_3) -> + case happyOut13 happy_x_5 of { happy_var_5 -> + case happyOut13 happy_x_7 of { happy_var_7 -> + happyIn13+ (LetM happy_var_3 happy_var_5 happy_var_7+ ) `HappyStk` happyRest}}}++happyReduce_43 = happyReduce 6# 7# happyReduction_43+happyReduction_43 (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 happyOut7 happy_x_4 of { happy_var_4 -> + case happyOut13 happy_x_6 of { happy_var_6 -> + happyIn13+ (Lam happy_var_2 happy_var_4 happy_var_6+ ) `HappyStk` happyRest}}}++happyReduce_44 = happySpecReduce_3 7# happyReduction_44+happyReduction_44 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn13+ (Let (MN "unused" 0) TyUnit happy_var_1 happy_var_3+ )}}++happyReduce_45 = happyReduce 6# 7# happyReduction_45+happyReduction_45 (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 happyOut13 happy_x_2 of { happy_var_2 -> + case happyOut13 happy_x_4 of { happy_var_4 -> + case happyOut13 happy_x_6 of { happy_var_6 -> + happyIn13+ (If happy_var_2 happy_var_4 happy_var_6+ ) `HappyStk` happyRest}}}++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 happyOut13 happy_x_3 of { happy_var_3 -> + case happyOut13 happy_x_5 of { happy_var_5 -> + happyIn13+ (While happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}++happyReduce_47 = happyReduce 8# 7# happyReduction_47+happyReduction_47 (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 happyOut13 happy_x_3 of { happy_var_3 -> + case happyOut13 happy_x_5 of { happy_var_5 -> + case happyOut13 happy_x_7 of { happy_var_7 -> + happyIn13+ (WhileAcc happy_var_3 happy_var_5 happy_var_7+ ) `HappyStk` happyRest}}}++happyReduce_48 = happyReduce 8# 7# happyReduction_48+happyReduction_48 (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 happyOut14 happy_x_3 of { happy_var_3 -> + case happyOut13 happy_x_5 of { happy_var_5 -> + case happyOut13 happy_x_7 of { happy_var_7 -> + happyIn13+ (WithMem happy_var_3 happy_var_5 happy_var_7+ ) `HappyStk` happyRest}}}++happyReduce_49 = happySpecReduce_1 7# happyReduction_49+happyReduction_49 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn13+ (happy_var_1+ )}++happyReduce_50 = happySpecReduce_1 7# happyReduction_50+happyReduction_50 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn13+ (happy_var_1+ )}++happyReduce_51 = happySpecReduce_2 7# happyReduction_51+happyReduction_51 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (TokenString happy_var_2) -> + happyIn13+ (Error happy_var_2+ )}++happyReduce_52 = happySpecReduce_1 7# happyReduction_52+happyReduction_52 happy_x_1+ = happyIn13+ (Impossible+ )++happyReduce_53 = happyReduce 6# 7# happyReduction_53+happyReduction_53 (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 happyOut7 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenString happy_var_3) -> + case happyOut20 happy_x_5 of { happy_var_5 -> + happyIn13+ (ForeignCall happy_var_2 happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_54 = happyReduce 7# 7# happyReduction_54+happyReduction_54 (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 happyOut7 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokenString happy_var_4) -> + case happyOut20 happy_x_6 of { happy_var_6 -> + happyIn13+ (LazyForeignCall happy_var_3 happy_var_4 happy_var_6+ ) `HappyStk` happyRest}}}++happyReduce_55 = happySpecReduce_1 8# happyReduction_55+happyReduction_55 happy_x_1+ = happyIn14+ (FixedPool+ )++happyReduce_56 = happySpecReduce_1 8# happyReduction_56+happyReduction_56 happy_x_1+ = happyIn14+ (GrowablePool+ )++happyReduce_57 = happyReduce 6# 9# happyReduction_57+happyReduction_57 (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 happyOut13 happy_x_2 of { happy_var_2 -> + case happyOut16 happy_x_5 of { happy_var_5 -> + happyIn15+ (Case happy_var_2 happy_var_5+ ) `HappyStk` happyRest}}++happyReduce_58 = happySpecReduce_0 10# happyReduction_58+happyReduction_58 = happyIn16+ ([]+ )++happyReduce_59 = happySpecReduce_1 10# happyReduction_59+happyReduction_59 happy_x_1+ = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn16+ ([happy_var_1]+ )}++happyReduce_60 = happySpecReduce_3 10# happyReduction_60+happyReduction_60 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut17 happy_x_1 of { happy_var_1 -> + case happyOut16 happy_x_3 of { happy_var_3 -> + happyIn16+ (happy_var_1:happy_var_3+ )}}++happyReduce_61 = happyReduce 7# 11# happyReduction_61+happyReduction_61 (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 happyOut12 happy_x_4 of { happy_var_4 -> + case happyOut13 happy_x_7 of { happy_var_7 -> + happyIn17+ (Alt happy_var_2 happy_var_4 happy_var_7+ ) `HappyStk` happyRest}}}++happyReduce_62 = happySpecReduce_3 11# happyReduction_62+happyReduction_62 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn17+ (ConstAlt 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 happyOut13 happy_x_3 of { happy_var_3 -> + happyIn17+ (DefaultCase happy_var_3+ )}++happyReduce_64 = happySpecReduce_3 12# happyReduction_64+happyReduction_64 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op Plus happy_var_1 happy_var_3+ )}}++happyReduce_65 = happySpecReduce_3 12# happyReduction_65+happyReduction_65 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op Minus happy_var_1 happy_var_3+ )}}++happyReduce_66 = happySpecReduce_2 12# happyReduction_66+happyReduction_66 happy_x_2+ happy_x_1+ = case happyOut13 happy_x_2 of { happy_var_2 -> + happyIn18+ (Op Minus (Const (MkInt 0)) happy_var_2+ )}++happyReduce_67 = happySpecReduce_3 12# happyReduction_67+happyReduction_67 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op Times happy_var_1 happy_var_3+ )}}++happyReduce_68 = happySpecReduce_3 12# happyReduction_68+happyReduction_68 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op Divide happy_var_1 happy_var_3+ )}}++happyReduce_69 = happySpecReduce_3 12# happyReduction_69+happyReduction_69 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op Modulo happy_var_1 happy_var_3+ )}}++happyReduce_70 = happySpecReduce_3 12# happyReduction_70+happyReduction_70 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op FPlus happy_var_1 happy_var_3+ )}}++happyReduce_71 = happySpecReduce_3 12# happyReduction_71+happyReduction_71 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op FMinus happy_var_1 happy_var_3+ )}}++happyReduce_72 = happySpecReduce_2 12# happyReduction_72+happyReduction_72 happy_x_2+ happy_x_1+ = case happyOut13 happy_x_2 of { happy_var_2 -> + happyIn18+ (Op FMinus (Const (MkInt 0)) happy_var_2+ )}++happyReduce_73 = happySpecReduce_3 12# happyReduction_73+happyReduction_73 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op FTimes happy_var_1 happy_var_3+ )}}++happyReduce_74 = happySpecReduce_3 12# happyReduction_74+happyReduction_74 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op FDivide happy_var_1 happy_var_3+ )}}++happyReduce_75 = happySpecReduce_3 12# happyReduction_75+happyReduction_75 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op ShL happy_var_1 happy_var_3+ )}}++happyReduce_76 = happySpecReduce_3 12# happyReduction_76+happyReduction_76 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op ShR happy_var_1 happy_var_3+ )}}++happyReduce_77 = happySpecReduce_3 12# happyReduction_77+happyReduction_77 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpLT happy_var_1 happy_var_3+ )}}++happyReduce_78 = happySpecReduce_3 12# happyReduction_78+happyReduction_78 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpGT happy_var_1 happy_var_3+ )}}++happyReduce_79 = happySpecReduce_3 12# happyReduction_79+happyReduction_79 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpLE happy_var_1 happy_var_3+ )}}++happyReduce_80 = happySpecReduce_3 12# happyReduction_80+happyReduction_80 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpGE happy_var_1 happy_var_3+ )}}++happyReduce_81 = happySpecReduce_3 12# happyReduction_81+happyReduction_81 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpEQ happy_var_1 happy_var_3+ )}}++happyReduce_82 = happySpecReduce_3 12# happyReduction_82+happyReduction_82 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpFLT happy_var_1 happy_var_3+ )}}++happyReduce_83 = happySpecReduce_3 12# happyReduction_83+happyReduction_83 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpFGT happy_var_1 happy_var_3+ )}}++happyReduce_84 = happySpecReduce_3 12# happyReduction_84+happyReduction_84 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpFLE happy_var_1 happy_var_3+ )}}++happyReduce_85 = happySpecReduce_3 12# happyReduction_85+happyReduction_85 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpFGE happy_var_1 happy_var_3+ )}}++happyReduce_86 = happySpecReduce_3 12# happyReduction_86+happyReduction_86 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn18+ (Op OpFEQ happy_var_1 happy_var_3+ )}}++happyReduce_87 = happySpecReduce_0 13# happyReduction_87+happyReduction_87 = happyIn19+ ([]+ )++happyReduce_88 = happySpecReduce_1 13# happyReduction_88+happyReduction_88 happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + happyIn19+ ([happy_var_1]+ )}++happyReduce_89 = happySpecReduce_3 13# happyReduction_89+happyReduction_89 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn19+ (happy_var_1:happy_var_3+ )}}++happyReduce_90 = happySpecReduce_0 14# happyReduction_90+happyReduction_90 = happyIn20+ ([]+ )++happyReduce_91 = happySpecReduce_3 14# happyReduction_91+happyReduction_91 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + happyIn20+ ([(happy_var_1,happy_var_3)]+ )}}++happyReduce_92 = happyReduce 5# 14# happyReduction_92+happyReduction_92 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut20 happy_x_5 of { happy_var_5 -> + happyIn20+ ((happy_var_1,happy_var_3):happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_93 = happySpecReduce_1 15# happyReduction_93+happyReduction_93 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn21+ (MkInt happy_var_1+ )}++happyReduce_94 = happySpecReduce_1 15# happyReduction_94+happyReduction_94 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenBigInt happy_var_1) -> + happyIn21+ (MkBigInt happy_var_1+ )}++happyReduce_95 = happySpecReduce_1 15# happyReduction_95+happyReduction_95 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenChar happy_var_1) -> + happyIn21+ (MkChar happy_var_1+ )}++happyReduce_96 = happySpecReduce_1 15# happyReduction_96+happyReduction_96 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenBool happy_var_1) -> + happyIn21+ (MkBool happy_var_1+ )}++happyReduce_97 = happySpecReduce_1 15# happyReduction_97+happyReduction_97 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenFloat happy_var_1) -> + happyIn21+ (MkFloat happy_var_1+ )}++happyReduce_98 = happySpecReduce_1 15# happyReduction_98+happyReduction_98 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenBigFloat happy_var_1) -> + happyIn21+ (MkBigFloat happy_var_1+ )}++happyReduce_99 = happySpecReduce_1 15# happyReduction_99+happyReduction_99 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenString happy_var_1) -> + happyIn21+ (MkString happy_var_1+ )}++happyReduce_100 = happySpecReduce_1 15# happyReduction_100+happyReduction_100 happy_x_1+ = happyIn21+ (MkUnit+ )++happyReduce_101 = happySpecReduce_1 15# happyReduction_101+happyReduction_101 happy_x_1+ = happyIn21+ (MkUnused+ )++happyReduce_102 = happyMonadReduce 0# 16# happyReduction_102+happyReduction_102 (happyRest) tk+ = happyThen (( getLineNo)+ ) (\r -> happyReturn (happyIn22 r))++happyReduce_103 = happyMonadReduce 0# 17# happyReduction_103+happyReduction_103 (happyRest) tk+ = happyThen (( getFileName)+ ) (\r -> happyReturn (happyIn23 r))++happyNewToken action sts stk+ = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ TokenEOF -> happyDoAction 85# 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#;+ TokenTyCType -> cont 20#;+ TokenAnyType -> cont 21#;+ TokenUnit -> cont 22#;+ TokenCon -> cont 23#;+ TokenDefault -> cont 24#;+ TokenLet -> cont 25#;+ TokenCase -> cont 26#;+ TokenOf -> cont 27#;+ TokenIf -> cont 28#;+ TokenThen -> cont 29#;+ TokenElse -> cont 30#;+ TokenWhile -> cont 31#;+ TokenMemory -> cont 32#;+ TokenFixed -> cont 33#;+ TokenGrowable -> cont 34#;+ TokenUnused -> cont 35#;+ TokenIn -> cont 36#;+ TokenLazy -> cont 37#;+ TokenStrict -> cont 38#;+ TokenEffect -> cont 39#;+ TokenForeign -> cont 40#;+ TokenError -> cont 41#;+ TokenImpossible -> cont 42#;+ TokenOB -> cont 43#;+ TokenCB -> cont 44#;+ TokenOCB -> cont 45#;+ TokenCCB -> cont 46#;+ TokenOSB -> cont 47#;+ TokenCSB -> cont 48#;+ TokenPlus -> cont 49#;+ TokenMinus -> cont 50#;+ TokenTimes -> cont 51#;+ TokenDivide -> cont 52#;+ TokenMod -> cont 53#;+ TokenFPlus -> cont 54#;+ TokenFMinus -> cont 55#;+ TokenFTimes -> cont 56#;+ TokenFDivide -> cont 57#;+ TokenEquals -> cont 58#;+ TokenEQ -> cont 59#;+ TokenLE -> cont 60#;+ TokenGE -> cont 61#;+ TokenFEQ -> cont 62#;+ TokenFLE -> cont 63#;+ TokenFGE -> cont 64#;+ TokenShL -> cont 65#;+ TokenShR -> cont 66#;+ TokenLT -> cont 67#;+ TokenGT -> cont 68#;+ TokenFLT -> cont 69#;+ TokenFGT -> cont 70#;+ TokenColon -> cont 71#;+ TokenProj -> cont 72#;+ TokenSemi -> cont 73#;+ TokenComma -> cont 74#;+ TokenBar -> cont 75#;+ TokenDot -> cont 76#;+ TokenLam -> cont 77#;+ TokenArrow -> cont 78#;+ TokenCInclude -> cont 79#;+ TokenExtern -> cont 80#;+ TokenExport -> cont 81#;+ TokenCType -> cont 82#;+ TokenInclude -> cont 83#;+ TokenInline -> cont 84#;+ _ -> 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 (happyOut6 x))++mkexpr = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut13 x))++mkdecl = happySomeParser where+ happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut8 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++parseExpr :: String -> Result Expr+parseExpr s = mkexpr s "[expr]" 1++parseDecl :: String -> Result Decl+parseDecl s = mkdecl s "[decl]" 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 30 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 51 "templates/GenericTemplate.hs" #-}++{-# LINE 61 "templates/GenericTemplate.hs" #-}++{-# LINE 70 "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 130 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+ Happy_GHC_Exts.narrow16Int# i+ where+ !i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+ !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 163 "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.8+Version: 0.1.10 Author: Edwin Brady License: BSD3 License-file: LICENSE
evm/closure.c view
@@ -76,7 +76,7 @@ printf("BIGFLOAT["); break; case STRING:- printf("STRING[");+ printf("STRING[%s", ((char*)c->info)); break; case UNIT: printf("UNIT[");@@ -850,7 +850,7 @@ } */ - /*void* MKINT(int x)+/*void* MKINT(int x) { return (void*)((x<<1)+1); // VAL c = MKCLOSURE;@@ -859,6 +859,28 @@ // return c; }*/ +mpz_t* NEWBIGINTI(int val)+{+ mpz_t* bigint = EMALLOC(sizeof(mpz_t));+ mpz_init(*bigint);+ mpz_set_si(*bigint, val);+ return bigint;+}++void* NEWBIGINTVALI(int val)+{+ mpz_t* bigint;+ VAL c = EMALLOC(sizeof(Closure)+sizeof(mpz_t));+ bigint = (mpz_t*)(c+1);+ mpz_init(*bigint);+ mpz_set_si(*bigint, val);++ SETTY(c, BIGINT);+ c->info = (void*)bigint;+ EREADY(c);+ return c;+}+ void* NEWBIGINT(char* intstr) { mpz_t* bigint;@@ -911,7 +933,11 @@ mpz_t* GETBIGINT(void* x) {- return (mpz_t*)(((VAL)x)->info);+ if (ISINT(x)) {+ return NEWBIGINTI(GETINT(x));+ } else {+ return (mpz_t*)(((VAL)x)->info);+ } } double GETFLOAT(void* x)@@ -919,7 +945,7 @@ return *((double*)(((VAL)x)->info)); } -void* MKSTR(char* x)+void* MKSTR(const char* x) { // VAL c = EMALLOC(sizeof(Closure)+strlen(x)+sizeof(char)+1); //MKCLOSURE; VAL c = EMALLOC(sizeof(Closure));@@ -929,7 +955,7 @@ // Since MKSTR is used to build strings from foreign calls, the string // itself will already have been allocated so we just want the closure.- c->info=x;+ c->info=(void*)x; EREADY(c); return c; }@@ -964,6 +990,14 @@ return c; } +void slide(VMState* vm, int lose, int keep) {+ int i;+ for(i = 1; i <= keep; i++) {+ vm->stack_top[-(lose+i)] = *(vm->stack_top-i);+ }+ vm->stack_top-=lose;+}+ VAL evm_getArg(int i) { if (i>=0 && i<v_argc) return v_argv[i];@@ -1003,8 +1037,12 @@ } EREADY(v_argv); -/* VMState* vm = malloc(sizeof(VMState));+ vm->stack = malloc(sizeof(VAL)*STACK_INIT);+ vm->stack_top = vm->stack+STACK_INIT;+ vm->stack_top = vm->stack;++/* vm->roots = malloc(sizeof(VAL)*1024); vm->start_roots = vm->roots; @@ -1015,7 +1053,7 @@ vm->next_nursery = 0; vm->next = 0; */- return NULL;+ return vm; } void epic_main(int argc, char* argv[])
evm/closure.h view
@@ -145,11 +145,25 @@ VAL* to_space; VAL* nursery; + VAL* stack;+ VAL* stack_top;+ VAL* stack_limit;+ int heap_size; int next; int next_nursery; } VMState; +#define STACK_INIT 8192++#define STACK(x) (*(vm->stack_top-x))+#define PUSH(x) vm->stack_top=x; vm->stack_top++;+#define DROP(x) vm->stack_top-=x;+#define SLIDE1(x) vm->stack_top[-(x+1)]=*(vm->stack_top-1); vm->stack_top-=x;+#define SLIDE(x,keep) slide(vm,x,keep);++void slide(VMState* vm, int lose, int keep);+ extern void* e_malloc(VMState* vm, size_t size); extern void* e_realloc(VMState* vm, void* ptr, size_t size); @@ -257,10 +271,12 @@ #define EINTTOINT(x) ((int)(x)) //void* MKINT(int x);+mpz_t* NEWBIGINTI(int val);+void* NEWBIGINTVALI(int val); void* NEWBIGINT(char* bigint); void* MKBIGINT(mpz_t* bigint); -void* MKSTR(char* str);+void* MKSTR(const char* str); void* MKPTR(void* ptr); void* MKFLOAT(double x);
evm/libevm.a view
binary file changed (30952 → 34936 bytes)
evm/stdfuns.c view
@@ -9,6 +9,14 @@ void printInt(int x) { printf("%d\n",x); } void putStr(char* s) { printf("%s",s); } void printBigInt(mpz_t x) { printf("%s\n",mpz_get_str(NULL,10,x)); }+void printBig(VAL x) +{ + if (ISINT(x)) {+ printf("%ld INT\n", GETINT(x));+ } else {+ printBigInt(*(GETBIGINT(x)));+ }+} void epicGC() { #ifdef USE_BOEHM@@ -184,54 +192,171 @@ return answer; } +VAL addBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ int vx = GETINT(x);+ int vy = GETINT(y);+ if ((vx <= 0 && vy >=0) || (vx >=0 && vy <=0)) {+ return INTOP(+,x,y);+ }+ int res = vx + vy;+ if (res >= 1<<30 || res <= -(1 << 30)) {+ return MKBIGINT(addBigInt(*(NEWBIGINTI(vx)), *(NEWBIGINTI(vy))));+ } else {+ return MKINT(res);+ }+ } else {+ return MKBIGINT(addBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ mpz_t* subBigInt(mpz_t x, mpz_t y) { mpz_t* answer = EMALLOC(sizeof(mpz_t)); mpz_sub(*answer, x, y); return answer; } +VAL subBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ int vx = GETINT(x);+ int vy = GETINT(y);+ if ((vx <= 0 && vy <=0) || (vx >=0 && vy >=0)) {+ return INTOP(-,x,y);+ }+ int res = vx - vy;+ if (res >= 1<<30 || res <= -(1 << 30)) {+ return MKBIGINT(subBigInt(*(NEWBIGINTI(vx)), *(NEWBIGINTI(vy))));+ } else {+ return MKINT(res);+ }+ } else {+ return MKBIGINT(subBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ mpz_t* mulBigInt(mpz_t x, mpz_t y) { mpz_t* answer = EMALLOC(sizeof(mpz_t)); mpz_mul(*answer, x, y); return answer; } +VAL mulBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ int vx = abs(GETINT(x));+ int vy = abs(GETINT(y));+ // we could work out likelihood of overflow by checking the number+ // of necessary bits. Here's a quick conservative hack instead.+ if ((vx < (1<<15) && vy < (1<16)) ||+ (vx < (1<<16) && vy < (1<15)) ||+ (vx < (1<<20) && vy < (1<11)) ||+ (vx < (1<<11) && vy < (1<20)) ||+ (vx < (1<<23) && vy < (1<<8)) ||+ (vx < (1<<8) && vy < (1<<23))) { // ultra-conservative!+ return INTOP(*,x,y);+ } else {+ mpz_t *resb = mulBigInt(*(NEWBIGINTI(vx)), *(NEWBIGINTI(vy)));+ VAL res = MKBIGINT(resb);+ return res;+ }+ } else {+ return MKBIGINT(mulBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ mpz_t* divBigInt(mpz_t x, mpz_t y) { mpz_t* answer = EMALLOC(sizeof(mpz_t)); mpz_tdiv_q(*answer, x, y); return answer; } +VAL divBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ // always gets smaller, so it's safe+ return INTOP(/, x, y);+ } else {+ return MKBIGINT(divBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ mpz_t* modBigInt(mpz_t x, mpz_t y) { mpz_t* answer = EMALLOC(sizeof(mpz_t)); mpz_tdiv_r(*answer, x, y); return answer; } +VAL modBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ // always gets smaller, so it's safe+ return INTOP(%, x, y);+ } else {+ return MKBIGINT(modBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ int eqBigInt(mpz_t x, mpz_t y) { return mpz_cmp(x,y)==0; } +int eqBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ return (GETINT(x) == GETINT(y));+ } else {+ return (eqBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ int ltBigInt(mpz_t x, mpz_t y) { return mpz_cmp(x,y)<0; } +int ltBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ return (GETINT(x) < GETINT(y));+ } else {+ return (ltBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ int gtBigInt(mpz_t x, mpz_t y) { return mpz_cmp(x,y)>0; } +int gtBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ return (GETINT(x) > GETINT(y));+ } else {+ return (gtBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ int leBigInt(mpz_t x, mpz_t y) { return mpz_cmp(x,y)<=0; } +int leBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ return (GETINT(x) <= GETINT(y));+ } else {+ return (leBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ int geBigInt(mpz_t x, mpz_t y) { return mpz_cmp(x,y)>=0; } +int geBig(VAL x, VAL y) {+ if (ISINT(x) && ISINT(y)) {+ return (GETINT(x) >= GETINT(y));+ } else {+ return (geBigInt(*(GETBIGINT(x)), *(GETBIGINT(y))));+ }+}+ mpz_t* strToBigInt(char* str) { mpz_t* answer = EMALLOC(sizeof(mpz_t));@@ -248,6 +373,19 @@ free(str); return buf; }++VAL strToBig(char* str) {+ return MKBIGINT(strToBigInt(str));+}++char* bigToStr(VAL x) {+ if (ISINT(x)) {+ return intToStr(GETINT(x));+ } else {+ return bigIntToStr(*(GETBIGINT(x)));+ }+}+ // IORefs int numrefs = 0;
evm/stdfuns.h view
@@ -18,6 +18,7 @@ void putStr(char* str); void printInt(int x); void printBigInt(mpz_t x);+void printBig(VAL x); // dump memory usage (from libgc) void epicMemInfo();@@ -65,6 +66,9 @@ mpz_t* strToBigInt(char* str); char* bigIntToStr(mpz_t x); +VAL strToBig(char* str);+char* bigToStr(VAL x);+ // get a native representation of a value void* getNative(void * fn); @@ -93,6 +97,20 @@ int gtBigInt(mpz_t x, mpz_t y); int leBigInt(mpz_t x, mpz_t y); int geBigInt(mpz_t x, mpz_t y);++// VAL versions, which can also cope with INT and promote to BIGINT if necessary++VAL addBig(VAL x, VAL y);+VAL subBig(VAL x, VAL y);+VAL mulBig(VAL x, VAL y);+VAL divBig(VAL x, VAL y);+VAL modBig(VAL x, VAL y);++int eqBig(VAL x, VAL y);+int ltBig(VAL x, VAL y);+int gtBig(VAL x, VAL y);+int leBig(VAL x, VAL y);+int geBig(VAL x, VAL y); #endif