demangler 1.1.0.0 → 1.2.0.0
raw patch · 5 files changed
+30/−23 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +5/−1
- demangler.cabal +1/−1
- src/Demangler.hs +21/−18
- src/Demangler/Structure.hs +2/−3
- test/initial-test-cases.txt +1/−0
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for demangler +## 1.2.0.0 -- 2023.10.29++* Updated support for local names.+ ## 1.1.0.0 -- 2023.10.23 * Added support for `ABI_Tags` on `SourceName`.@@ -16,6 +20,6 @@ * Parity with origin tests. -## 0.1.0.0 -- YYYY-mm-dd+## 0.1.0.0 -- 2023-10-15 * Initial version.
demangler.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: demangler-version: 1.1.0.0+version: 1.2.0.0 synopsis: Demangler for C++ mangled names. description: Provides a demangler (and mangler) for C++ names, with an intermediate
src/Demangler.hs view
@@ -25,7 +25,7 @@ where import Control.Applicative-import Control.Lens ( (&), (^.), view, (.~), (||~) )+import Control.Lens ( (&), (^.), (.~), (||~) ) import Control.Monad import Data.Char import Data.Either ( isRight )@@ -203,18 +203,19 @@ local_name :: AnyNext Name-local_name i = do f <- match "Z" i >>= function_encoding- c <- match "E" f- entity f c <|> stringlit f c- where- entity f c = do e <- entity_name c- discriminated f e- <|> ret e (LocalName (f ^. nVal) (e ^. nVal) Nothing)- stringlit f c = do s <- match "s" c- d <- optional (discriminator s)- ret (fromMaybe s d) $ StringLitName (f ^. nVal) (view nVal <$> d)- discriminated f e = do d <- discriminator e- ret d $ LocalName (f ^. nVal) (e ^. nVal) (Just $ d ^. nVal)+local_name = match "Z"+ >=> function_encoding+ >=> match "E"+ >=> asum' [ match "s"+ >=> rmap StringLitName+ >=> optional' discriminator+ >=> rmap (uncurry ($))+ , rmap LocalName+ >&=> name+ >=> rmap (uncurry ($))+ >=> optional' discriminator+ >=> rmap (uncurry ($))+ ] -- | Parse any CV qualifiers; always succeeds but might return an empty array.@@ -605,11 +606,13 @@ >=> rmap (uncurry (ArrayType . ExprBound)) ] -function_encoding :: AnyNext FunctionScope-function_encoding = tbd "function_encoding"--entity_name :: Next a FunctionEntity-entity_name = tbd "entity_name"+function_encoding :: AnyNext Encoding+function_encoding i = do e <- encoding i+ require $ case e ^. nVal of+ EncFunc {} -> True+ EncStaticFunc {} -> True+ _ -> False+ return e discriminator :: Next a Int discriminator = asum' [ match "_" >=> single_digit_num
src/Demangler/Structure.hs view
@@ -41,8 +41,8 @@ data Name = NameNested NestedName | UnscopedName Bool UnqualifiedName -- Bool is "std::" prefix | UnscopedTemplateName Name TemplateArgs- | LocalName FunctionScope FunctionEntity (Maybe Discriminator)- | StringLitName FunctionScope (Maybe Discriminator)+ | LocalName Encoding Name (Maybe Discriminator)+ | StringLitName Encoding (Maybe Discriminator) deriving (Eq, Show) data NestedName = NestedName Prefix UnqualifiedName@@ -51,7 +51,6 @@ [CVQualifier] (Maybe RefQualifier) deriving (Eq, Show) -type FunctionScope = Coord type FunctionEntity = Coord type Discriminator = Coord
test/initial-test-cases.txt view
@@ -46,3 +46,4 @@ _ZN10px4_daemon15get_socket_pathB5cxx11B3fooEi _ZN17PositionSmoothing18_generateSetpointsERKN6matrix7Vector3IfEERA3_S3_bS4_fbRNS_26PositionSmoothingSetpointsE _ZN17PositionSmoothing18_generateSetpointsERKN6matrix7Vector3IfEERA_S3_bS4_fbRNS_26PositionSmoothingSetpointsE+_ZZ23airship_att_recalibratevE4amsg