{-# LANGUAGE  MagicHash,
              UnboxedTuples,
              ScopedTypeVariables #-}

module UU.Scanner.GenTokenParser where

import GHC.Base
import UU.Parsing.Interface(IsParser(pCostSym, pSym), (<$>))
import UU.Scanner.GenToken(GenToken(..))
import UU.Scanner.Position(Pos, noPos)


pCostReserved'          :: IsParser p (GenToken key tp val) 
                        => Int -> key -> p (GenToken key tp val)
pCostReserved' :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> key -> p (GenToken key tp val)
pCostReserved' (I# Int#
c) key
key
                        =  let tok :: GenToken key tp val
tok = key -> Pos -> GenToken key tp val
forall key tp val. key -> Pos -> GenToken key tp val
Reserved key
key Pos
noPos 
                           in  Int#
-> GenToken key tp val
-> GenToken key tp val
-> p (GenToken key tp val)
forall (p :: * -> *) s. IsParser p s => Int# -> s -> s -> p s
pCostSym Int#
c GenToken key tp val
forall {tp} {val}. GenToken key tp val
tok GenToken key tp val
forall {tp} {val}. GenToken key tp val
tok 

pReserved'              :: IsParser p (GenToken key tp val) 
                        => key -> p (GenToken key tp val)
pReserved' :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
key -> p (GenToken key tp val)
pReserved' key
key          =  let tok :: GenToken key tp val
tok = key -> Pos -> GenToken key tp val
forall key tp val. key -> Pos -> GenToken key tp val
Reserved key
key Pos
noPos 
                           in  GenToken key tp val -> p (GenToken key tp val)
forall (p :: * -> *) s. IsParser p s => s -> p s
pSym GenToken key tp val
forall {tp} {val}. GenToken key tp val
tok 

pCostValToken'          :: IsParser p (GenToken key tp val) 
                        => Int -> tp -> val -> p (GenToken key tp val)
pCostValToken' :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> tp -> val -> p (GenToken key tp val)
pCostValToken' (I# Int#
c) tp
tp val
val
                        =  let tok :: GenToken key tp val
tok = tp -> val -> Pos -> GenToken key tp val
forall key tp val. tp -> val -> Pos -> GenToken key tp val
ValToken tp
tp val
val Pos
noPos 
                           in  Int#
-> GenToken key tp val
-> GenToken key tp val
-> p (GenToken key tp val)
forall (p :: * -> *) s. IsParser p s => Int# -> s -> s -> p s
pCostSym Int#
c GenToken key tp val
forall {key}. GenToken key tp val
tok GenToken key tp val
forall {key}. GenToken key tp val
tok 

pValToken'              :: IsParser p (GenToken key tp val) 
                        => tp -> val -> p (GenToken key tp val)
pValToken' :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
tp -> val -> p (GenToken key tp val)
pValToken' tp
tp val
val       =  let tok :: GenToken key tp val
tok = tp -> val -> Pos -> GenToken key tp val
forall key tp val. tp -> val -> Pos -> GenToken key tp val
ValToken tp
tp val
val Pos
noPos 
                           in  GenToken key tp val -> p (GenToken key tp val)
forall (p :: * -> *) s. IsParser p s => s -> p s
pSym GenToken key tp val
forall {key}. GenToken key tp val
tok 


pCostReserved           :: IsParser p (GenToken key tp val) 
                        => Int -> key -> p Pos
pCostReserved :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> key -> p Pos
pCostReserved Int
c key
key     =  let getPos :: GenToken key tp val -> Pos
getPos GenToken key tp val
x = case GenToken key tp val
x of
                                Reserved key
_   Pos
p -> Pos
p
                                ValToken tp
_ val
_ Pos
p -> Pos
p
                           in GenToken key tp val -> Pos
forall {key} {tp} {val}. GenToken key tp val -> Pos
getPos (GenToken key tp val -> Pos) -> p (GenToken key tp val) -> p Pos
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> key -> p (GenToken key tp val)
forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> key -> p (GenToken key tp val)
pCostReserved' Int
c key
key
                          
pCostValToken           :: IsParser p (GenToken key tp val) 
                        => Int -> tp -> val -> p (val,Pos)
pCostValToken :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> tp -> val -> p (val, Pos)
pCostValToken Int
c tp
tp val
val  =  let getVal :: GenToken key tp a -> (a, Pos)
getVal GenToken key tp a
x = case GenToken key tp a
x of
                                ValToken tp
_ a
v Pos
p -> (a
v,Pos
p)
                                GenToken key tp a
_              -> [Char] -> (a, Pos)
forall a. HasCallStack => [Char] -> a
error [Char]
"pValToken: cannot get value of Reserved"
                           in GenToken key tp val -> (val, Pos)
forall {key} {tp} {a}. GenToken key tp a -> (a, Pos)
getVal (GenToken key tp val -> (val, Pos))
-> p (GenToken key tp val) -> p (val, Pos)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> tp -> val -> p (GenToken key tp val)
forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> tp -> val -> p (GenToken key tp val)
pCostValToken' Int
c tp
tp val
val

pReserved               :: IsParser p (GenToken key tp val) 
                        => key -> p Pos
pReserved :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
key -> p Pos
pReserved               =  Int -> key -> p Pos
forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> key -> p Pos
pCostReserved Int
5

pValToken               :: IsParser p (GenToken key tp val) 
                        => tp -> val -> p (val,Pos)
pValToken :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
tp -> val -> p (val, Pos)
pValToken               =  Int -> tp -> val -> p (val, Pos)
forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
Int -> tp -> val -> p (val, Pos)
pCostValToken Int
5

pValTokenNoPos          :: IsParser p (GenToken key tp val) 
                        => tp -> val -> p val
pValTokenNoPos :: forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
tp -> val -> p val
pValTokenNoPos tp
tp val
val   =  (val, Pos) -> val
forall a b. (a, b) -> a
fst ((val, Pos) -> val) -> p (val, Pos) -> p val
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> tp -> val -> p (val, Pos)
forall (p :: * -> *) key tp val.
IsParser p (GenToken key tp val) =>
tp -> val -> p (val, Pos)
pValToken tp
tp val
val