ptera-th 0.6.1.0 → 0.7.0.0
raw patch · 5 files changed
+48/−51 lines, 5 filesdep +enummapsetdep −enummapset-thdep ~ghc-primdep ~pteradep ~ptera-corePVP ok
version bump matches the API change (PVP)
Dependencies added: enummapset
Dependencies removed: enummapset-th
Dependency ranges changed: ghc-prim, ptera, ptera-core, template-haskell
API changes (from Hackage documentation)
- Language.Parser.Ptera.TH: TExpQ :: Q (TExp a) -> TExpQ a
- Language.Parser.Ptera.TH: [$sel:unTExpQ:TExpQ] :: TExpQ a -> Q (TExp a)
- Language.Parser.Ptera.TH: newtype TExpQ a
- Language.Parser.Ptera.TH.Class.LiftType: instance Language.Parser.Ptera.TH.Class.LiftType.LiftType GHC.Integer.Type.Integer
- Language.Parser.Ptera.TH.Syntax: TExpQ :: Q (TExp a) -> TExpQ a
- Language.Parser.Ptera.TH.Syntax: [$sel:unTExpQ:TExpQ] :: TExpQ a -> Q (TExp a)
- Language.Parser.Ptera.TH.Syntax: newtype TExpQ a
+ Language.Parser.Ptera.TH.Class.LiftType: instance Language.Parser.Ptera.TH.Class.LiftType.LiftType GHC.Num.Integer.Integer
- Language.Parser.Ptera.TH: (<::>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH: (<::>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Code Q (ActionTask ctx a)) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH: (<:>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp a)) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH: (<:>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Code Q a) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH: [DictF] :: forall k (a :: k -> Constraint) (b :: k). a b => DictF a b
+ Language.Parser.Ptera.TH: [DictF] :: forall {k} (a :: k -> Constraint) (b :: k). a b => DictF a b
- Language.Parser.Ptera.TH: [HFCons] :: forall k (a :: k -> Type) (x :: k) (xs :: [k]). a x -> HFList a xs -> HFList a (x : xs)
+ Language.Parser.Ptera.TH: [HFCons] :: forall {k} (a :: k -> Type) (x :: k) (xs :: [k]). a x -> HFList a xs -> HFList a (x : xs)
- Language.Parser.Ptera.TH: [HFNil] :: forall k (a :: k -> Type). HFList a ('[] :: [k])
+ Language.Parser.Ptera.TH: [HFNil] :: forall {k} (a :: k -> Type). HFList a ('[] :: [k])
- Language.Parser.Ptera.TH: pattern (:*) :: Q (TExp u) -> HTExpList us -> HTExpList (u : us)
+ Language.Parser.Ptera.TH: pattern (:*) :: Code Q u -> HTExpList us -> HTExpList (u : us)
- Language.Parser.Ptera.TH: type HTExpList = T TExpQ
+ Language.Parser.Ptera.TH: type HTExpList = T (Code Q)
- Language.Parser.Ptera.TH.Syntax: (<::>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH.Syntax: (<::>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Code Q (ActionTask ctx a)) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH.Syntax: (<:>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp a)) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH.Syntax: (<:>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Code Q a) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH.Syntax: [DictF] :: forall k (a :: k -> Constraint) (b :: k). a b => DictF a b
+ Language.Parser.Ptera.TH.Syntax: [DictF] :: forall {k} (a :: k -> Constraint) (b :: k). a b => DictF a b
- Language.Parser.Ptera.TH.Syntax: [HFCons] :: forall k (a :: k -> Type) (x :: k) (xs :: [k]). a x -> HFList a xs -> HFList a (x : xs)
+ Language.Parser.Ptera.TH.Syntax: [HFCons] :: forall {k} (a :: k -> Type) (x :: k) (xs :: [k]). a x -> HFList a xs -> HFList a (x : xs)
- Language.Parser.Ptera.TH.Syntax: [HFNil] :: forall k (a :: k -> Type). HFList a ('[] :: [k])
+ Language.Parser.Ptera.TH.Syntax: [HFNil] :: forall {k} (a :: k -> Type). HFList a ('[] :: [k])
- Language.Parser.Ptera.TH.Syntax: pattern (:*) :: Q (TExp u) -> HTExpList us -> HTExpList (u : us)
+ Language.Parser.Ptera.TH.Syntax: pattern (:*) :: Code Q u -> HTExpList us -> HTExpList (u : us)
- Language.Parser.Ptera.TH.Syntax: semAct :: T ctx => T a => (HTExpList us -> Q (TExp a)) -> T TTypeQ us -> SemActM ctx us a
+ Language.Parser.Ptera.TH.Syntax: semAct :: T ctx => T a => (HTExpList us -> Code Q a) -> T TTypeQ us -> SemActM ctx us a
- Language.Parser.Ptera.TH.Syntax: semActM :: forall ctx us a. T ctx => T a => (HTExpList us -> Q (TExp (ActionTask ctx a))) -> T TTypeQ us -> SemActM ctx us a
+ Language.Parser.Ptera.TH.Syntax: semActM :: forall ctx us a. T ctx => T a => (HTExpList us -> Code Q (ActionTask ctx a)) -> T TTypeQ us -> SemActM ctx us a
- Language.Parser.Ptera.TH.Syntax: type HTExpList = T TExpQ
+ Language.Parser.Ptera.TH.Syntax: type HTExpList = T (Code Q)
Files
- ptera-th.cabal +15/−15
- src/Language/Parser/Ptera/TH.hs +1/−1
- src/Language/Parser/Ptera/TH/ParserLib.hs +9/−8
- src/Language/Parser/Ptera/TH/Pipeline/SRB2ParserDec.hs +14/−13
- src/Language/Parser/Ptera/TH/Syntax.hs +9/−14
ptera-th.cabal view
@@ -2,12 +2,12 @@ build-type: Custom name: ptera-th-version: 0.6.1.0+version: 0.7.0.0 license: Apache-2.0 OR MPL-2.0 license-file: LICENSE copyright: (c) 2021 Mizunashi Mana author: Mizunashi Mana-maintainer: mizunashi-mana@noreply.git+maintainer: contact@mizunashi.work category: Parsing homepage: https://github.com/mizunashi-mana/ptera@@ -89,18 +89,18 @@ -dcore-lint build-depends:- base >= 4.14.0 && < 5,+ base >= 4.14.0 && < 5, -- project depends- ptera-core >= 0.1.0 && < 0.2,- ptera >= 0.3.0 && < 0.4,- ghc-prim >= 0.6.1 && < 0.7,- containers >= 0.6.0 && < 0.7,- unordered-containers >= 0.2.0 && < 0.3,- array >= 0.5.4 && < 0.6,- membership >= 0.0.1 && < 0.1,- enummapset-th >= 0.6.0 && < 0.7,- template-haskell >= 2.16.0 && < 2.17,+ ptera-core >= 0.2.0 && < 0.3,+ ptera >= 0.4.0 && < 0.5,+ ghc-prim >= 0.8.0 && < 1,+ containers >= 0.6.0 && < 0.7,+ unordered-containers >= 0.2.0 && < 0.3,+ array >= 0.5.4 && < 0.6,+ membership >= 0.0.1 && < 0.1,+ enummapset >= 0.7.1 && < 1,+ template-haskell >= 2.17.0 && < 3, autogen-modules: Paths_ptera_th@@ -109,9 +109,9 @@ custom-setup setup-depends:- base,- Cabal,- cabal-doctest,+ base >= 4.14.0 && < 5,+ Cabal >= 3.6 && < 4,+ cabal-doctest >= 1.0.9 && < 2, library import:
src/Language/Parser/Ptera/TH.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TemplateHaskellQuotes #-} module Language.Parser.Ptera.TH ( module Language.Parser.Ptera.TH.Syntax,
src/Language/Parser/Ptera/TH/ParserLib.hs view
@@ -54,9 +54,9 @@ ST.runST do ST.ST \s0# -> do let !(# s1#, r# #) = Prim.readWord8OffAddr# table# i# s0#- case r# of- 255## -> (# s1#, -1 #)- _ -> (# s1#, Types.I# do Prim.word2Int# r# #)+ case Prim.word2Int# do Prim.word8ToWord# r# of+ 255# -> (# s1#, -1 #)+ ri# -> (# s1#, Types.I# ri# #) pteraTHLookupTable16 :: Int -> Prim.Addr# -> Int -> Int -> Int pteraTHLookupTable16 offset table# s c = do@@ -64,9 +64,9 @@ ST.runST do ST.ST \s0# -> do let !(# s1#, r# #) = Prim.readWord16OffAddr# table# i# s0#- case r# of- 65535## -> (# s1#, -1 #)- _ -> (# s1#, Types.I# do Prim.word2Int# r# #)+ case Prim.word2Int# do Prim.word16ToWord# r# of+ 65535# -> (# s1#, -1 #)+ ri# -> (# s1#, Types.I# ri# #) pteraTHLookupTable32 :: Int -> Prim.Addr# -> Int -> Int -> Int pteraTHLookupTable32 offset table# s c = do@@ -74,10 +74,11 @@ ST.runST do ST.ST \s0# -> do let !(# s1#, r# #) = Prim.readInt32OffAddr# table# i# s0#- (# s1#, Types.I# r# #)+ (# s1#, Types.I# do Prim.int32ToInt# r# #) pteraTHUnsafeExtractReduceArgument :: ReduceArgument -> a-pteraTHUnsafeExtractReduceArgument (ReduceArgument x) = Unsafe.unsafeCoerce x+pteraTHUnsafeExtractReduceArgument = \case+ ReduceArgument x -> Unsafe.unsafeCoerce x pteraTHUnsafeRunner :: RunnerParser ctx elem () -> Parser ctx rules elem initials pteraTHUnsafeRunner p = Runner.UnsafeRunnerM p
src/Language/Parser/Ptera/TH/Pipeline/SRB2ParserDec.hs view
@@ -253,11 +253,11 @@ | n == -1 = replicate unitSize 0xFF | otherwise = error "unsupported" where- mod8bit = case Bits.bitSizeMaybe n of- Nothing -> \x -> x Bits..&. 0xFF+ mod8bit x = case Bits.bitSizeMaybe n of+ Nothing -> x Bits..&. 0xFF Just bs- | bs <= 8 -> \x -> x- | otherwise -> \x -> x Bits..&. 0xFF+ | bs <= 8 -> x+ | otherwise -> x Bits..&. 0xFF toTransOpsExp :: OutTransOpsRepr -> TH.Q TH.Exp toTransOpsExp = \case@@ -387,15 +387,16 @@ outputRunnerFn :: TH.Name -> TH.Name -> TH.Name -> TH.Name -> TH.Name -> TH.Name -> TH.Name -> TH.Name -> TH.Q TH.Dec-outputRunnerFn runnerFnName = \- parserInitialFnName- parserGetTokenNumFnName- parserTransFnName- parserAltKindFnName- parserStateHelpFnName- parserAltHelpFnName- parserActionFnName- -> TH.ValD do TH.VarP runnerFnName+outputRunnerFn+ runnerFnName+ parserInitialFnName+ parserGetTokenNumFnName+ parserTransFnName+ parserAltKindFnName+ parserStateHelpFnName+ parserAltHelpFnName+ parserActionFnName+ = TH.ValD do TH.VarP runnerFnName <$> fmap TH.NormalB [e|pteraTHUnsafeRunner parser|] <*> [d| parser = RunnerParser
src/Language/Parser/Ptera/TH/Syntax.hs view
@@ -23,7 +23,6 @@ HTExpList, pattern HNil, pattern (:*),- TExpQ (..), Syntax.ActionTask (..), Syntax.ActionTaskResult (..), Syntax.getAction,@@ -107,7 +106,7 @@ :: LiftType.T ctx => LiftType.T a => TypedExpr rules tokens elem us- -> (HTExpList us -> TH.Q (TH.TExp a))+ -> (HTExpList us -> TH.Code TH.Q a) -> AltM ctx rules tokens elem a e <:> act = unTypedExpr e SafeGrammar.<:> semAct act do getTypesOfExpr e @@ -117,7 +116,7 @@ :: LiftType.T ctx => LiftType.T a => TypedExpr rules tokens elem us- -> (HTExpList us -> TH.Q (TH.TExp (ActionTask ctx a)))+ -> (HTExpList us -> TH.Code TH.Q (ActionTask ctx a)) -> AltM ctx rules tokens elem a e <::> act = unTypedExpr e SafeGrammar.<:> semActM act do getTypesOfExpr e @@ -160,19 +159,15 @@ do SafeGrammar.tokensMembership do proxy# @'(tokens, t) -type HTExpList = HFList.T TExpQ--newtype TExpQ a = TExpQ- { unTExpQ :: TH.Q (TH.TExp a)- }+type HTExpList = HFList.T (TH.Code TH.Q) pattern HNil :: HTExpList '[] pattern HNil = HFList.HFNil {-# COMPLETE HNil #-} -pattern (:*) :: TH.Q (TH.TExp u) -> HTExpList us -> HTExpList (u ': us)-pattern e :* es = HFList.HFCons (TExpQ e) es+pattern (:*) :: TH.Code TH.Q u -> HTExpList us -> HTExpList (u ': us)+pattern e :* es = HFList.HFCons e es infixr 6 :* @@ -189,7 +184,7 @@ semActM :: forall ctx us a . LiftType.T ctx => LiftType.T a- => (HTExpList us -> TH.Q (TH.TExp (ActionTask ctx a)))+ => (HTExpList us -> TH.Code TH.Q (ActionTask ctx a)) -> HFList.T TTypeQ us -> SemActM ctx us a semActM f xs0 = UnsafeSemActM go where go = do@@ -202,7 +197,7 @@ let lp0 = pure do TH.ListP [TH.VarP n | n <- ns] [e|\ $(lp) -> case $(le) of $(lp0) ->- $(TH.unType <$> f args) :: ActionTask $(tqCtx) $(tqA)+ $(TH.unTypeCode do f args) :: ActionTask $(tqCtx) $(tqA) _ -> error "unreachable: unexpected arguments" |]@@ -214,7 +209,7 @@ HFList.HFCons (TTypeQ t) xs -> do n <- TH.newName "pteraTHSemActArg" let e = pure do TH.VarE n- let arg = TH.unsafeTExpCoerce+ let arg = TH.unsafeCodeCoerce [|pteraTHUnsafeExtractReduceArgument $(e) :: $(t)|] (ns, args) <- actArgs xs pure (n:ns, arg :* args)@@ -222,6 +217,6 @@ semAct :: LiftType.T ctx => LiftType.T a- => (HTExpList us -> TH.Q (TH.TExp a))+ => (HTExpList us -> TH.Code TH.Q a) -> HFList.T TTypeQ us -> SemActM ctx us a semAct f = semActM do \us -> [||pteraTHActionTaskPure $$(f us)||]