{-# LANGUAGE CPP #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Demangler.PPrint () where
import Control.Applicative
import Data.Char
import Data.List.NonEmpty ( NonEmpty((:|)) )
import qualified Data.List.NonEmpty as NEL
import Data.Text ( Text )
import qualified Data.Text as T
import Text.Sayable
import Demangler.Context
import Demangler.Engine
import Demangler.Structure
#ifdef MIN_VERSION_panic
import Panic
cannotSay :: PanicComponent a => a -> String -> [String] -> b
cannotSay = panic
#else
cannotSay :: a -> String -> [String] -> Saying saytag
cannotSay :: forall a (saytag :: Symbol).
a -> String -> [String] -> Saying saytag
cannotSay a
_ String
_ [String]
rsn = Text -> Text
t'Text
"OUTFMT?:{ " Text -> [String] -> Saying saytag
forall (tag :: Symbol) m e (t :: * -> *).
(Sayable tag m, Sayable tag e, Foldable t) =>
m -> t e -> Saying tag
&* [String]
rsn Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'}'
#endif
data PrefixUQN = PUC Prefix UnqualifiedName
data PrefixCDtor = PCDC Prefix CtorDtor
$(return [])
ctxLst :: forall saytag t a b .
Sayable saytag (WithContext a)
=> Functor t
=> Foldable t
=> t a -> WithContext b -> Saying saytag
ctxLst :: forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst t a
l WithContext b
wc = Text -> Text
t'Text
"" Text -> t (WithContext a) -> Saying saytag
forall (tag :: Symbol) m e (t :: * -> *).
(Sayable tag m, Sayable tag e, Foldable t) =>
m -> t e -> Saying tag
&+* t a -> WithContext b -> t (WithContext a)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx t a
l WithContext b
wc
ctxLst' :: Sayable saytag (WithContext a)
=> Functor t
=> Foldable t
=> t a -> WithContext b -> Text -> Saying saytag
ctxLst' :: forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' t a
l WithContext b
wc Text
sep = Text
sep Text -> t (WithContext a) -> Saying saytag
forall (tag :: Symbol) m e (t :: * -> *).
(Sayable tag m, Sayable tag e, Foldable t) =>
m -> t e -> Saying tag
&:* t a -> WithContext b -> t (WithContext a)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx t a
l WithContext b
wc
wCtx :: Functor t => t a -> WithContext b -> t (WithContext a)
wCtx :: forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx t a
a WithContext b
wc = WithContext b -> a -> WithContext a
forall a b. WithContext a -> b -> WithContext b
withContext WithContext b
wc (a -> WithContext a) -> t a -> t (WithContext a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> t a
a
instance {-# OVERLAPPING #-}
( Sayable "diagnostic" (WithContext Encoding)
) => Sayable "diagnostic" Result where
sayable :: Result -> Saying "diagnostic"
sayable = \case
(Original Coord
i, Context
c) -> WithContext () -> Coord -> Text
forall a. WithContext a -> Coord -> Text
contextStr (() -> Context -> WithContext ()
forall a. a -> Context -> WithContext a
addContext () Context
c) Coord
i Text -> Text -> Saying "diagnostic"
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"{orig}"
(Encoded Encoding
e, Context
c) -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @"diagnostic" (WithContext Encoding -> Saying "diagnostic")
-> WithContext Encoding -> Saying "diagnostic"
forall a b. (a -> b) -> a -> b
$ Encoding -> Context -> WithContext Encoding
forall a. a -> Context -> WithContext a
addContext Encoding
e Context
c
(VendorExtended Encoding
d Coord
i, Context
c) ->
let (Text
s1,Text
s2) = (Char -> Bool) -> Text -> (Text, Text)
T.span Char -> Bool
isAlphaNum (Text -> (Text, Text)) -> Text -> (Text, Text)
forall a b. (a -> b) -> a -> b
$ WithContext () -> Coord -> Text
forall a. WithContext a -> Coord -> Text
contextStr (() -> Context -> WithContext ()
forall a. a -> Context -> WithContext a
addContext () Context
c) Coord
i
in Encoding -> Context -> WithContext Encoding
forall a. a -> Context -> WithContext a
addContext Encoding
d Context
c WithContext Encoding -> Text -> Saying "diagnostic"
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"[clone" Saying "diagnostic" -> Text -> Saying "diagnostic"
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text
s1 Saying "diagnostic" -> Char -> Saying "diagnostic"
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']' Saying "diagnostic" -> Text -> Saying "diagnostic"
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text
s2
instance {-# OVERLAPPABLE #-}
( Sayable saytag (WithContext Encoding)
) => Sayable saytag Result where
sayable :: Result -> Saying saytag
sayable = \case
(Original Coord
i, Context
c) -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext () -> Coord -> Text
forall a. WithContext a -> Coord -> Text
contextStr (() -> Context -> WithContext ()
forall a. a -> Context -> WithContext a
addContext () Context
c) Coord
i
(Encoded Encoding
e, Context
c) -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Encoding -> Saying saytag)
-> WithContext Encoding -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Encoding -> Context -> WithContext Encoding
forall a. a -> Context -> WithContext a
addContext Encoding
e Context
c
(VendorExtended Encoding
d Coord
i, Context
c) ->
let (Text
s1,Text
s2) = (Char -> Bool) -> Text -> (Text, Text)
T.span Char -> Bool
isAlphaNum (Text -> (Text, Text)) -> Text -> (Text, Text)
forall a b. (a -> b) -> a -> b
$ WithContext () -> Coord -> Text
forall a. WithContext a -> Coord -> Text
contextStr (() -> Context -> WithContext ()
forall a. a -> Context -> WithContext a
addContext () Context
c) Coord
i
in Encoding -> Context -> WithContext Encoding
forall a. a -> Context -> WithContext a
addContext Encoding
d Context
c WithContext Encoding -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"[clone" Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'.' Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text
s1 Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']' Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text
s2
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Encoding
) => Sayable saytag (WithContext Encoding) where
sayable :: WithContext Encoding -> Saying saytag
sayable WithContext Encoding
wc =
case WithContext Encoding -> Encoding
forall a. WithContext a -> a
contextData WithContext Encoding
wc of
EncFunc FunctionName
f Maybe Type_
rty (BaseType BaseType
Void :| []) -> WithContext Encoding
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
forall (saytag :: Symbol) a.
Sayable saytag (WithContext Type_) =>
WithContext a
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
sayFunction WithContext Encoding
wc FunctionName
f Maybe Type_
rty []
EncFunc FunctionName
f Maybe Type_
rty NonEmpty Type_
t -> WithContext Encoding
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
forall (saytag :: Symbol) a.
Sayable saytag (WithContext Type_) =>
WithContext a
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
sayFunction WithContext Encoding
wc FunctionName
f Maybe Type_
rty ([Type_] -> Saying saytag) -> [Type_] -> Saying saytag
forall a b. (a -> b) -> a -> b
$ NonEmpty Type_ -> [Type_]
forall a. NonEmpty a -> [a]
NEL.toList NonEmpty Type_
t
EncStaticFunc FunctionName
f Maybe Type_
rty (BaseType BaseType
Void :| []) -> WithContext Encoding
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
forall (saytag :: Symbol) a.
Sayable saytag (WithContext Type_) =>
WithContext a
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
sayFunction WithContext Encoding
wc FunctionName
f Maybe Type_
rty []
EncStaticFunc FunctionName
f Maybe Type_
rty NonEmpty Type_
t -> WithContext Encoding
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
forall (saytag :: Symbol) a.
Sayable saytag (WithContext Type_) =>
WithContext a
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
sayFunction WithContext Encoding
wc FunctionName
f Maybe Type_
rty ([Type_] -> Saying saytag) -> [Type_] -> Saying saytag
forall a b. (a -> b) -> a -> b
$ NonEmpty Type_ -> [Type_]
forall a. NonEmpty a -> [a]
NEL.toList NonEmpty Type_
t
EncConstStructData UnqualifiedName
nm -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnqualifiedName -> Saying saytag)
-> WithContext UnqualifiedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Encoding
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Encoding
wc UnqualifiedName
nm
EncData Name
nm -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Name -> Saying saytag)
-> WithContext Name -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Encoding -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Encoding
wc Name
nm
EncSpecial SpecialName
sn -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext SpecialName -> Saying saytag)
-> WithContext SpecialName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Encoding -> SpecialName -> WithContext SpecialName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Encoding
wc SpecialName
sn
sayFunction :: Sayable saytag (WithContext Type_)
=> WithContext a -> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
sayFunction :: forall (saytag :: Symbol) a.
Sayable saytag (WithContext Type_) =>
WithContext a
-> FunctionName -> Maybe Type_ -> [Type_] -> Saying saytag
sayFunction WithContext a
wc FunctionName
fn Maybe Type_
mbRet [Type_]
args =
let (Name
nm,[CVQualifier]
q) = FunctionName -> (Name, [CVQualifier])
cleanFunctionName FunctionName
fn
part1 :: Saying saytag
part1 = case Maybe Type_
mbRet of
Maybe Type_
Nothing -> WithContext a -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext a
wc Name
nm WithContext Name -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
""
Just Type_
rty -> WithContext a -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext a
wc Type_
rty WithContext Type_ -> WithContext Name -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext a -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext a
wc Name
nm
part2 :: Saying saytag
part2 = if WithContext a -> Bool
forall a. WithContext a -> Bool
isTemplateArgContext WithContext a
wc
then Saying saytag
part1
else Saying saytag
part1 Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [Type_] -> WithContext a -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Type_]
args WithContext a
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
in if [CVQualifier] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [CVQualifier]
q then Saying saytag
part2 else Saying saytag
part2 Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- [CVQualifier] -> WithContext a -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [CVQualifier]
q WithContext a
wc Text
" "
instance Sayable saytag (WithContext a)
=> Sayable saytag (NonEmpty (WithContext a)) where
sayable :: NonEmpty (WithContext a) -> Saying saytag
sayable NonEmpty (WithContext a)
l = Text -> Text
t'Text
"" Text -> NonEmpty (WithContext a) -> Saying saytag
forall (tag :: Symbol) m e (t :: * -> *).
(Sayable tag m, Sayable tag e, Foldable t) =>
m -> t e -> Saying tag
&+* NonEmpty (WithContext a)
l
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext a)
=> Sayable saytag (WithContext (NonEmpty a)) where
sayable :: WithContext (NonEmpty a) -> Saying saytag
sayable WithContext (NonEmpty a)
wc = NonEmpty a -> WithContext (NonEmpty a) -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst (WithContext (NonEmpty a) -> NonEmpty a
forall a. WithContext a -> a
contextData WithContext (NonEmpty a)
wc) WithContext (NonEmpty a)
wc
cleanFunctionName :: FunctionName -> (Name, [CVQualifier])
cleanFunctionName :: FunctionName -> (Name, [CVQualifier])
cleanFunctionName (FunctionName Name
nm) =
case Name
nm of
NameNested (NestedName Prefix
p UnqualifiedName
u [CVQualifier]
cvq Maybe RefQualifier
mbrq) ->
(NestedName -> Name
NameNested (NestedName -> Name) -> NestedName -> Name
forall a b. (a -> b) -> a -> b
$ Prefix
-> UnqualifiedName
-> [CVQualifier]
-> Maybe RefQualifier
-> NestedName
NestedName Prefix
p UnqualifiedName
u [] Maybe RefQualifier
mbrq, [CVQualifier]
cvq)
NameNested (NestedTemplateName TemplatePrefix
tp TemplateArgs
ta [CVQualifier]
cvq Maybe RefQualifier
mbrq) ->
(NestedName -> Name
NameNested (NestedName -> Name) -> NestedName -> Name
forall a b. (a -> b) -> a -> b
$ TemplatePrefix
-> TemplateArgs
-> [CVQualifier]
-> Maybe RefQualifier
-> NestedName
NestedTemplateName TemplatePrefix
tp TemplateArgs
ta [] Maybe RefQualifier
mbrq, [CVQualifier]
cvq)
Name
_ -> (Name
nm, [])
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''SpecialName
) => Sayable saytag (WithContext SpecialName) where
sayable :: WithContext SpecialName -> Saying saytag
sayable WithContext SpecialName
wc =
case WithContext SpecialName -> SpecialName
forall a. WithContext a -> a
contextData WithContext SpecialName
wc of
VirtualTable Type_
ty -> Text -> Text
t'Text
"vtable for" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc Type_
ty
TemplateParameterObj TemplateArg
ta -> Text -> Text
t'Text
"template parameter object for" Text -> WithContext TemplateArg -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc TemplateArg
ta
VTT Type_
ty -> Text -> Text
t'Text
"VTT for" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc Type_
ty
TypeInfo Type_
ty -> Text -> Text
t'Text
"typeinfo for" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc Type_
ty
TypeInfoName Type_
ty -> Text -> Text
t'Text
"typeinfo name for" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc Type_
ty
CtorVTable ()
_ -> Text -> Text
t'Text
"construction vtable for" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"()"
Thunk (VirtualOffset Coord
_o1 Coord
_o2) Encoding
enc -> Text -> Text
t'Text
"virtual thunk to" Text -> WithContext Encoding -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> Encoding -> WithContext Encoding
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc Encoding
enc
Thunk (NonVirtualOffset Coord
_o1) Encoding
enc -> Text -> Text
t'Text
"non-virtual thunk to" Text -> WithContext Encoding -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SpecialName -> Encoding -> WithContext Encoding
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SpecialName
wc Encoding
enc
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''FunctionName
) => Sayable saytag (WithContext FunctionName) where
sayable :: WithContext FunctionName -> Saying saytag
sayable WithContext FunctionName
wc = let FunctionName Name
n = WithContext FunctionName -> FunctionName
forall a. WithContext a -> a
contextData WithContext FunctionName
wc
in forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Name -> Saying saytag)
-> WithContext Name -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext FunctionName -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext FunctionName
wc Name
n
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Name
) => Sayable saytag (WithContext Name) where
sayable :: WithContext Name -> Saying saytag
sayable WithContext Name
wc =
case WithContext Name -> Name
forall a. WithContext a -> a
contextData WithContext Name
wc of
NameNested NestedName
nn -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext NestedName -> Saying saytag)
-> WithContext NestedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Name -> NestedName -> WithContext NestedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc NestedName
nn
UnscopedName UnscopedName
usn -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnscopedName -> Saying saytag)
-> WithContext UnscopedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Name -> UnscopedName -> WithContext UnscopedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc UnscopedName
usn
UnscopedTemplateName Name
nn TemplateArgs
ta -> WithContext Name -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc Name
nn WithContext Name -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Name -> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc TemplateArgs
ta
LocalName Encoding
fs Name
fe Maybe Discriminator
_discr -> WithContext Name -> Encoding -> WithContext Encoding
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc Encoding
fs WithContext Encoding -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext Name -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Name -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc Name
fe
StringLitName Encoding
fs Maybe Discriminator
_discr -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Encoding -> Saying saytag)
-> WithContext Encoding -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Name -> Encoding -> WithContext Encoding
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Name
wc Encoding
fs
instance Sayable saytag Discriminator where
sayable :: Discriminator -> Saying saytag
sayable Discriminator
_ = forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
""
instance Sayable saytag (WithContext Discriminator) where
sayable :: WithContext Discriminator -> Saying saytag
sayable WithContext Discriminator
_ = forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
""
instance
$(sayableConstraints ''UnscopedName
) => Sayable saytag (WithContext UnscopedName) where
sayable :: WithContext UnscopedName -> Saying saytag
sayable WithContext UnscopedName
wc =
case WithContext UnscopedName -> UnscopedName
forall a. WithContext a -> a
contextData WithContext UnscopedName
wc of
UnScName Bool
False UnqualifiedName
uqn -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnqualifiedName -> Saying saytag)
-> WithContext UnqualifiedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnscopedName
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnscopedName
wc UnqualifiedName
uqn
UnScName Bool
True UnqualifiedName
uqn -> Text -> Text
t'Text
"std::" Text -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnscopedName
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnscopedName
wc UnqualifiedName
uqn
UnScSubst Substitution
subs -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Substitution -> Saying saytag)
-> WithContext Substitution -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnscopedName
-> Substitution -> WithContext Substitution
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnscopedName
wc Substitution
subs
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext Coord) where
sayable :: WithContext Coord -> Saying saytag
sayable WithContext Coord
wc = forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Coord -> Coord -> Text
forall a. WithContext a -> Coord -> Text
contextStr WithContext Coord
wc (Coord -> Text) -> Coord -> Text
forall a b. (a -> b) -> a -> b
$ WithContext Coord -> Coord
forall a. WithContext a -> a
contextData WithContext Coord
wc
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''UnqualifiedName
) => Sayable saytag (WithContext UnqualifiedName) where
sayable :: WithContext UnqualifiedName -> Saying saytag
sayable WithContext UnqualifiedName
wc =
case WithContext UnqualifiedName -> UnqualifiedName
forall a. WithContext a -> a
contextData WithContext UnqualifiedName
wc of
SourceName SourceName
i [] -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext SourceName -> Saying saytag)
-> WithContext SourceName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnqualifiedName -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc SourceName
i
SourceName SourceName
i [ABI_Tag]
tags -> WithContext UnqualifiedName -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc SourceName
i WithContext SourceName -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [ABI_Tag] -> WithContext UnqualifiedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [ABI_Tag]
tags WithContext UnqualifiedName
wc Text
""
OperatorName Operator
op [] -> Text -> Text
t'Text
"operator" Text -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnqualifiedName -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc Operator
op
OperatorName Operator
op [ABI_Tag]
tags -> Text -> Text
t'Text
"operator" Text -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnqualifiedName -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc Operator
op Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [ABI_Tag] -> WithContext UnqualifiedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [ABI_Tag]
tags WithContext UnqualifiedName
wc Text
""
CtorDtorName CtorDtor
cd -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext CtorDtor -> Saying saytag)
-> WithContext CtorDtor -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnqualifiedName -> CtorDtor -> WithContext CtorDtor
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc CtorDtor
cd
StdSubst Substitution
subs -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Substitution -> Saying saytag)
-> WithContext Substitution -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnqualifiedName
-> Substitution -> WithContext Substitution
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc Substitution
subs
ModuleNamed [ModuleName]
mn UnqualifiedName
uqn -> [ModuleName]
-> WithContext UnqualifiedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [ModuleName]
mn WithContext UnqualifiedName
wc Text
"" Saying saytag -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnqualifiedName
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnqualifiedName
wc UnqualifiedName
uqn
UnnamedTypeName Maybe Natural
Nothing -> Text -> Text
t'Text
"{unnamed type#1" Text -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'}'
UnnamedTypeName (Just Natural
nt) -> Text -> Text
t'Text
"{unnamed type#" Text -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Natural
nt Natural -> Natural -> Natural
forall a. Num a => a -> a -> a
+ Natural
2 Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'}'
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''SourceName
) => Sayable saytag (WithContext SourceName) where
sayable :: WithContext SourceName -> Saying saytag
sayable WithContext SourceName
wc = let SrcName Coord
i = WithContext SourceName -> SourceName
forall a. WithContext a -> a
contextData WithContext SourceName
wc in forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext SourceName -> Coord -> Text
forall a. WithContext a -> Coord -> Text
contextStr WithContext SourceName
wc Coord
i
instance {-# OVERLAPPABLE #-}
($(sayableConstraints ''PrefixUQN)
, Sayable saytag (WithContext PrefixCDtor)
) => Sayable saytag (WithContext PrefixUQN) where
sayable :: WithContext PrefixUQN -> Saying saytag
sayable WithContext PrefixUQN
wc =
let PUC Prefix
p UnqualifiedName
n = WithContext PrefixUQN -> PrefixUQN
forall a. WithContext a -> a
contextData WithContext PrefixUQN
wc in
case UnqualifiedName
n of
CtorDtorName CtorDtor
cd -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext PrefixCDtor -> Saying saytag)
-> WithContext PrefixCDtor -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixUQN -> PrefixCDtor -> WithContext PrefixCDtor
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixUQN
wc (Prefix -> CtorDtor -> PrefixCDtor
PCDC Prefix
p CtorDtor
cd)
UnqualifiedName
_ -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnqualifiedName -> Saying saytag)
-> WithContext UnqualifiedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixUQN
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixUQN
wc UnqualifiedName
n
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''ModuleName
) => Sayable saytag (WithContext ModuleName) where
sayable :: WithContext ModuleName -> Saying saytag
sayable WithContext ModuleName
wc =
let ModuleName Bool
isP SourceName
sn = WithContext ModuleName -> ModuleName
forall a. WithContext a -> a
contextData WithContext ModuleName
wc
in if Bool
isP then WithContext ModuleName -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ModuleName
wc SourceName
sn WithContext SourceName -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
':' else WithContext ModuleName -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ModuleName
wc SourceName
sn WithContext SourceName -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'.'
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''CtorDtor
) => Sayable saytag (WithContext CtorDtor) where
sayable :: WithContext CtorDtor -> Saying saytag
sayable WithContext CtorDtor
wc =
case WithContext CtorDtor -> CtorDtor
forall a. WithContext a -> a
contextData WithContext CtorDtor
wc of
CtorDtor
CompleteCtor -> Char
'(' Char -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
CtorDtor
BaseCtor -> Char
'(' Char -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
CtorDtor
CompleteAllocatingCtor -> Char
'(' Char -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
CompleteInheritingCtor Type_
t -> WithContext CtorDtor -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext CtorDtor
wc Type_
t WithContext Type_ -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
BaseInheritingCtor Type_
t -> WithContext CtorDtor -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext CtorDtor
wc Type_
t WithContext Type_ -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
CtorDtor
DeletingDtor -> Char
'~' Char -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
CtorDtor
CompleteDtor -> Char
'~' Char -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
CtorDtor
BaseDtor -> Char
'~' Char -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
instance {-# OVERLAPPABLE #-}
($(sayableConstraints ''PrefixCDtor)
) => Sayable saytag (WithContext PrefixCDtor) where
sayable :: WithContext PrefixCDtor -> Saying saytag
sayable WithContext PrefixCDtor
wc =
let PCDC Prefix
p CtorDtor
n = WithContext PrefixCDtor -> PrefixCDtor
forall a. WithContext a -> a
contextData WithContext PrefixCDtor
wc
mb'ln :: Maybe UnqualifiedName
mb'ln = case Prefix
p of
Prefix PrefixR
pfxr -> PrefixR -> Maybe UnqualifiedName
pfxrLastUQName PrefixR
pfxr
Prefix
_ -> Demangler -> String -> [String] -> Maybe UnqualifiedName
forall a b. a -> String -> [String] -> Maybe b
cannot Demangler
Demangler String
"sayable"
[ String
"CTORDTOR UNK PFX: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Prefix -> String
forall a. Show a => a -> String
show Prefix
p ]
pfxrLastUQName :: PrefixR -> Maybe UnqualifiedName
pfxrLastUQName = \case
PrefixUQName (UnnamedTypeName Maybe Natural
_) PrefixR
PrefixEnd -> Maybe UnqualifiedName
forall a. Maybe a
Nothing
PrefixUQName (UnnamedTypeName Maybe Natural
_) (PrefixTemplateArgs TemplateArgs
_ PrefixR
PrefixEnd) -> Maybe UnqualifiedName
forall a. Maybe a
Nothing
PrefixUQName UnqualifiedName
unm PrefixR
PrefixEnd -> UnqualifiedName -> Maybe UnqualifiedName
forall a. a -> Maybe a
Just UnqualifiedName
unm
PrefixUQName UnqualifiedName
unm (PrefixTemplateArgs TemplateArgs
_ PrefixR
PrefixEnd) -> UnqualifiedName -> Maybe UnqualifiedName
forall a. a -> Maybe a
Just UnqualifiedName
unm
PrefixUQName UnqualifiedName
unm PrefixR
sp -> PrefixR -> Maybe UnqualifiedName
pfxrLastUQName PrefixR
sp Maybe UnqualifiedName
-> Maybe UnqualifiedName -> Maybe UnqualifiedName
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> UnqualifiedName -> Maybe UnqualifiedName
forall a. a -> Maybe a
Just UnqualifiedName
unm
PrefixTemplateArgs TemplateArgs
_ PrefixR
sp -> PrefixR -> Maybe UnqualifiedName
pfxrLastUQName PrefixR
sp
PrefixR
PrefixEnd -> Maybe UnqualifiedName
forall a. Maybe a
Nothing
in case Maybe UnqualifiedName
mb'ln of
Just UnqualifiedName
ln ->
case CtorDtor
n of
CtorDtor
CompleteCtor -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnqualifiedName -> Saying saytag)
-> WithContext UnqualifiedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixCDtor
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc UnqualifiedName
ln
CtorDtor
BaseCtor -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnqualifiedName -> Saying saytag)
-> WithContext UnqualifiedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixCDtor
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc UnqualifiedName
ln
CtorDtor
CompleteAllocatingCtor -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnqualifiedName -> Saying saytag)
-> WithContext UnqualifiedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixCDtor
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc UnqualifiedName
ln
CompleteInheritingCtor Type_
t -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Type_ -> Saying saytag)
-> WithContext Type_ -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixCDtor -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc Type_
t
BaseInheritingCtor Type_
t -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Type_ -> Saying saytag)
-> WithContext Type_ -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixCDtor -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc Type_
t
CtorDtor
DeletingDtor -> Char
'~' Char -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext PrefixCDtor
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc UnqualifiedName
ln
CtorDtor
CompleteDtor -> Char
'~' Char -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext PrefixCDtor
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc UnqualifiedName
ln
CtorDtor
BaseDtor -> Char
'~' Char -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext PrefixCDtor
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc UnqualifiedName
ln
Maybe UnqualifiedName
Nothing -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext CtorDtor -> Saying saytag)
-> WithContext CtorDtor -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext PrefixCDtor -> CtorDtor -> WithContext CtorDtor
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixCDtor
wc CtorDtor
n
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Operator
) => Sayable saytag (WithContext Operator) where
sayable :: WithContext Operator -> Saying saytag
sayable WithContext Operator
wc =
let op :: Operator
op = WithContext Operator -> Operator
forall a. WithContext a -> a
contextData WithContext Operator
wc in
case Operator
-> [(Operator, (Arity, (Text, Text)))]
-> Maybe (Arity, (Text, Text))
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup Operator
op [(Operator, (Arity, (Text, Text)))]
opTable of
Just (Arity
_, (Text
_, Text
o)) -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag Text
o
Maybe (Arity, (Text, Text))
Nothing ->
case Operator
op of
OpCast Type_
ty -> Char
' ' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Operator -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Operator
wc Type_
ty
OpString SourceName
snm -> Char
' ' Char -> WithContext SourceName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Operator -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Operator
wc SourceName
snm
OpVendor Natural
n SourceName
snm -> Text -> Text
t'Text
"vendor" Text -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Natural
n Saying saytag -> WithContext SourceName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Operator -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Operator
wc SourceName
snm
Operator
_ -> Demangler -> String -> [String] -> Saying saytag
forall a (saytag :: Symbol).
a -> String -> [String] -> Saying saytag
cannotSay Demangler
Demangler String
"sayable"
[ String
"Operator not in opTable or with a specific override:"
, Operator -> String
forall a. Show a => a -> String
show Operator
op
]
instance {-# OVERLAPPABLE #-}
($(sayableConstraints ''NestedName)
, Sayable saytag (WithContext PrefixCDtor)
) => Sayable saytag (WithContext NestedName) where
sayable :: WithContext NestedName -> Saying saytag
sayable WithContext NestedName
wc =
let qualrefs :: [CVQualifier] -> Maybe RefQualifier -> Saying saytag
qualrefs [CVQualifier]
q Maybe RefQualifier
r = [CVQualifier] -> WithContext NestedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [CVQualifier]
q WithContext NestedName
wc Text
" " Saying saytag -> Maybe (WithContext RefQualifier) -> Saying saytag
forall (tag :: Symbol) m e.
(Sayable tag m, Sayable tag e) =>
m -> Maybe e -> Saying tag
&? Maybe RefQualifier
-> WithContext NestedName -> Maybe (WithContext RefQualifier)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx Maybe RefQualifier
r WithContext NestedName
wc
in case WithContext NestedName -> NestedName
forall a. WithContext a -> a
contextData WithContext NestedName
wc of
NestedName Prefix
p (CtorDtorName CtorDtor
nm) [CVQualifier]
q Maybe RefQualifier
r ->
[CVQualifier] -> Maybe RefQualifier -> Saying saytag
qualrefs [CVQualifier]
q Maybe RefQualifier
r Saying saytag -> WithContext Prefix -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName -> Prefix -> WithContext Prefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc Prefix
p Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext PrefixCDtor -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName -> PrefixCDtor -> WithContext PrefixCDtor
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc (Prefix -> CtorDtor -> PrefixCDtor
PCDC Prefix
p CtorDtor
nm)
NestedName Prefix
EmptyPrefix UnqualifiedName
nm [CVQualifier]
q Maybe RefQualifier
r -> [CVQualifier] -> Maybe RefQualifier -> Saying saytag
qualrefs [CVQualifier]
q Maybe RefQualifier
r Saying saytag -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc UnqualifiedName
nm
NestedName Prefix
p UnqualifiedName
nm [CVQualifier]
q Maybe RefQualifier
r -> [CVQualifier] -> Maybe RefQualifier -> Saying saytag
qualrefs [CVQualifier]
q Maybe RefQualifier
r Saying saytag -> WithContext Prefix -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName -> Prefix -> WithContext Prefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc Prefix
p Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc UnqualifiedName
nm
NestedTemplateName TemplatePrefix
tp TemplateArgs
ta [CVQualifier]
q Maybe RefQualifier
r -> [CVQualifier] -> Maybe RefQualifier -> Saying saytag
qualrefs [CVQualifier]
q Maybe RefQualifier
r Saying saytag -> WithContext TemplatePrefix -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName
-> TemplatePrefix -> WithContext TemplatePrefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc TemplatePrefix
tp Saying saytag -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext NestedName -> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext NestedName
wc TemplateArgs
ta
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Prefix
) => Sayable saytag (WithContext Prefix) where
sayable :: WithContext Prefix -> Saying saytag
sayable WithContext Prefix
wc =
case WithContext Prefix -> Prefix
forall a. WithContext a -> a
contextData WithContext Prefix
wc of
PrefixTemplateParam TemplateArg
tp PrefixR
prefixr -> WithContext Prefix -> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Prefix
wc TemplateArg
tp WithContext TemplateArg -> WithContext PrefixR -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Prefix -> PrefixR -> WithContext PrefixR
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Prefix
wc PrefixR
prefixr
PrefixDeclType DeclType
dt PrefixR
prefixr -> WithContext Prefix -> DeclType -> WithContext DeclType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Prefix
wc DeclType
dt WithContext DeclType -> WithContext PrefixR -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Prefix -> PrefixR -> WithContext PrefixR
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Prefix
wc PrefixR
prefixr
PrefixClosure ()
cp -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext () -> Saying saytag)
-> WithContext () -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Prefix -> () -> WithContext ()
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Prefix
wc ()
cp
Prefix PrefixR
prefixr -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext PrefixR -> Saying saytag)
-> WithContext PrefixR -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Prefix -> PrefixR -> WithContext PrefixR
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Prefix
wc PrefixR
prefixr
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''PrefixR
) => Sayable saytag (WithContext PrefixR) where
sayable :: WithContext PrefixR -> Saying saytag
sayable WithContext PrefixR
wc =
case WithContext PrefixR -> PrefixR
forall a. WithContext a -> a
contextData WithContext PrefixR
wc of
PrefixUQName UnqualifiedName
uqn pfr :: PrefixR
pfr@(PrefixUQName {}) -> WithContext PrefixR
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixR
wc UnqualifiedName
uqn WithContext UnqualifiedName -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext PrefixR -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext PrefixR -> PrefixR -> WithContext PrefixR
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixR
wc PrefixR
pfr
PrefixUQName UnqualifiedName
uqn PrefixR
pfr -> WithContext PrefixR
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixR
wc UnqualifiedName
uqn WithContext UnqualifiedName -> WithContext PrefixR -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext PrefixR -> PrefixR -> WithContext PrefixR
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixR
wc PrefixR
pfr
PrefixTemplateArgs TemplateArgs
ta PrefixR
pfr -> WithContext PrefixR -> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixR
wc TemplateArgs
ta WithContext TemplateArgs -> WithContext PrefixR -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext PrefixR -> PrefixR -> WithContext PrefixR
forall a b. WithContext a -> b -> WithContext b
withContext WithContext PrefixR
wc PrefixR
pfr
PrefixR
PrefixEnd -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
""
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext CVQualifier) where
sayable :: WithContext CVQualifier -> Saying saytag
sayable WithContext CVQualifier
wc =
case WithContext CVQualifier -> CVQualifier
forall a. WithContext a -> a
contextData WithContext CVQualifier
wc of
CVQualifier
Restrict -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"restrict"
CVQualifier
Volatile -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"volatile"
CVQualifier
Const_ -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"const"
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext RefQualifier) where
sayable :: WithContext RefQualifier -> Saying saytag
sayable WithContext RefQualifier
wc =
case WithContext RefQualifier -> RefQualifier
forall a. WithContext a -> a
contextData WithContext RefQualifier
wc of
RefQualifier
Ref -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag Char
'&'
RefQualifier
RefRef -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"&&"
instance {-# OVERLAPPABLE #-}
($(sayableConstraints ''TemplatePrefix)
, Sayable saytag (WithContext PrefixUQN)
) => Sayable saytag (WithContext TemplatePrefix) where
sayable :: WithContext TemplatePrefix -> Saying saytag
sayable WithContext TemplatePrefix
wc =
case WithContext TemplatePrefix -> TemplatePrefix
forall a. WithContext a -> a
contextData WithContext TemplatePrefix
wc of
GlobalTemplate NonEmpty UnqualifiedName
uqns -> NonEmpty UnqualifiedName
-> WithContext TemplatePrefix -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' NonEmpty UnqualifiedName
uqns WithContext TemplatePrefix
wc Text
"::"
NestedTemplate Prefix
pr NonEmpty UnqualifiedName
uqns -> WithContext TemplatePrefix -> Prefix -> WithContext Prefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext TemplatePrefix
wc Prefix
pr WithContext Prefix -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::"
Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ NonEmpty PrefixUQN
-> WithContext TemplatePrefix -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' (Prefix -> UnqualifiedName -> PrefixUQN
PUC Prefix
pr (UnqualifiedName -> PrefixUQN)
-> NonEmpty UnqualifiedName -> NonEmpty PrefixUQN
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty UnqualifiedName
uqns) WithContext TemplatePrefix
wc Text
"::"
TemplateTemplateParam TemplateArg
tp -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext TemplateArg -> Saying saytag)
-> WithContext TemplateArg -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext TemplatePrefix
-> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext TemplatePrefix
wc TemplateArg
tp
instance {-# OVERLAPPABLE #-}
(Sayable saytag (WithContext TemplateArg)
) => Sayable saytag (WithContext TemplateArgs) where
sayable :: WithContext TemplateArgs -> Saying saytag
sayable WithContext TemplateArgs
wc = let args :: TemplateArgs
args = WithContext TemplateArgs -> TemplateArgs
forall a. WithContext a -> a
contextData WithContext TemplateArgs
wc
args' :: [TemplateArg]
args' = (TemplateArg -> Bool) -> [TemplateArg] -> [TemplateArg]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool) -> (TemplateArg -> Bool) -> TemplateArg -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TemplateArg -> Bool
emptyArgPack) ([TemplateArg] -> [TemplateArg]) -> [TemplateArg] -> [TemplateArg]
forall a b. (a -> b) -> a -> b
$ TemplateArgs -> [TemplateArg]
forall a. NonEmpty a -> [a]
NEL.toList TemplateArgs
args
emptyArgPack :: TemplateArg -> Bool
emptyArgPack (TArgPack []) = Bool
True
emptyArgPack TemplateArg
_ = Bool
False
in Char
'<' Char -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [TemplateArg] -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [TemplateArg]
args' WithContext TemplateArgs
wc Saying saytag -> String -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ TemplateArgs -> String
templateArgsEnd TemplateArgs
args
templateArgsEnd :: TemplateArgs -> String
templateArgsEnd :: TemplateArgs -> String
templateArgsEnd TemplateArgs
args = case TemplateArgs -> TemplateArg
forall a. NonEmpty a -> a
NEL.last TemplateArgs
args of
TArgPack [TemplateArg]
targs ->
case [TemplateArg] -> Maybe TemplateArgs
forall a. [a] -> Maybe (NonEmpty a)
NEL.nonEmpty [TemplateArg]
targs of
Just TemplateArgs
args' -> TemplateArgs -> String
templateArgsEnd TemplateArgs
args'
Maybe TemplateArgs
Nothing -> String
">"
TArgType (ClassUnionStructEnum
(NameNested
(NestedTemplateName {}))) -> String
" >"
TArgType (ClassUnionStructEnum
(UnscopedTemplateName {})) -> String
" >"
TemplateArg
_ -> String
">"
instance {-# OVERLAPPABLE #-}
($(sayableConstraints ''TemplateArg)
) => Sayable saytag (WithContext TemplateArg) where
sayable :: WithContext TemplateArg -> Saying saytag
sayable WithContext TemplateArg
wc =
case WithContext TemplateArg -> TemplateArg
forall a. WithContext a -> a
contextData WithContext TemplateArg
wc of
TArgType Type_
ty -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Type_ -> Saying saytag)
-> WithContext Type_ -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext TemplateArg -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContextForTemplateArg WithContext TemplateArg
wc Type_
ty
TArgSimpleExpr ExprPrimary
ep -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext ExprPrimary -> Saying saytag)
-> WithContext ExprPrimary -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext TemplateArg -> ExprPrimary -> WithContext ExprPrimary
forall a b. WithContext a -> b -> WithContext b
withContextForTemplateArg WithContext TemplateArg
wc ExprPrimary
ep
TArgExpr Expression
expr -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Expression -> Saying saytag)
-> WithContext Expression -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext TemplateArg -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContextForTemplateArg WithContext TemplateArg
wc Expression
expr
TArgPack [TemplateArg]
tas ->
[TemplateArg] -> WithContext () -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [TemplateArg]
tas (WithContext () -> Saying saytag)
-> WithContext () -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext TemplateArg -> () -> WithContext ()
forall a b. WithContext a -> b -> WithContext b
withContextForTemplateArg WithContext TemplateArg
wc ()
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Expression
) => Sayable saytag (WithContext Expression) where
sayable :: WithContext Expression -> Saying saytag
sayable WithContext Expression
wc =
case WithContext Expression -> Expression
forall a. WithContext a -> a
contextData WithContext Expression
wc of
ExprUnary Operator
op Expression
expr -> WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op WithContext Operator -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
ExprBinary Operator
op Expression
expr1 Expression
expr2 -> WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr1 WithContext Expression -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr2
ExprTrinary Operator
op Expression
expr1 Expression
expr2 Expression
expr3 ->
Char
'(' Char -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr1 Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr2 Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
':' Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr3
ExprPfxPlus Expression
expr -> Text -> Text
t'Text
"++" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
ExprPfxMinus Expression
expr -> Text -> Text
t'Text
"--" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
ExprCall (Expression
exprc :| [Expression]
args) -> WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
exprc WithContext Expression -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [Expression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Expression]
args WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprConvert1 Type_
ty Expression
expr -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
ExprConvertSome Type_
ty NonEmpty Expression
exprs -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
")(" Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ NonEmpty Expression -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst NonEmpty Expression
exprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprConvertInit Type_
ty [BracedExpression]
brexprs -> WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty WithContext Type_ -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'{' Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [BracedExpression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [BracedExpression]
brexprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'}'
ExprBracedInit [BracedExpression]
brexprs -> Char
'{' Char -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [BracedExpression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [BracedExpression]
brexprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'}'
ExprNew Bool
gs [Expression]
exprs Type_
ty -> Text -> Text
t'Text
"new (" Text -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [Expression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Expression]
exprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- (if Bool
gs then Text
"::" else Text -> Text
t'Text
"") Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty
ExprNewInit Bool
gs [Expression]
exprs Type_
ty InitializerExpr
i -> Text -> Text
t'Text
"new (" Text -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [Expression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Expression]
exprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- (if Bool
gs then Text
"::" else Text -> Text
t'Text
"") Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty
Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'(' Saying saytag -> WithContext InitializerExpr -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression
-> InitializerExpr -> WithContext InitializerExpr
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc InitializerExpr
i Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprNewArray Bool
gs [Expression]
exprs Type_
ty -> Text -> Text
t'Text
"new[] (" Text -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [Expression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Expression]
exprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- (if Bool
gs then Text
"::" else Text -> Text
t'Text
"") Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty
ExprNewInitArray Bool
gs [Expression]
exprs Type_
ty InitializerExpr
i -> Text -> Text
t'Text
"new[] (" Text -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [Expression] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Expression]
exprs WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- (if Bool
gs then Text
"::" else Text -> Text
t'Text
"") Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty
Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'(' Saying saytag -> WithContext InitializerExpr -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression
-> InitializerExpr -> WithContext InitializerExpr
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc InitializerExpr
i Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprDel Bool
gs Expression
expr -> Text -> Text
t'Text
"delete" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- (if Bool
gs then Text
"::" else Text -> Text
t'Text
"")
Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
ExprDelArray Bool
gs Expression
expr -> Text -> Text
t'Text
"delete[]" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- (if Bool
gs then Text
"::" else Text -> Text
t'Text
"")
Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
ExprDynamicCast Type_
ty Expression
expr -> Text -> Text
t'Text
"dynamic_cast<" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
">("
Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprStaticCast Type_
ty Expression
expr -> Text -> Text
t'Text
"static_cast<" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
">("
Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprConstCast Type_
ty Expression
expr -> Text -> Text
t'Text
"const_cast<" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
">("
Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprReinterpretCast Type_
ty Expression
expr -> Text -> Text
t'Text
"reinterpret_cast<" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
">("
Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprTypeIdType Type_
ty -> Text -> Text
t'Text
"typeid(" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprTypeId Expression
expr -> Text -> Text
t'Text
"typeid(" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprSizeOfType Type_
ty -> Text -> Text
t'Text
"sizeof(" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprSizeOf Expression
expr -> Text -> Text
t'Text
"sizeof(" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprAlignOfType Type_
ty -> Text -> Text
t'Text
"alignof(" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprAlignOf Expression
expr -> Text -> Text
t'Text
"alignof(" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprNoException Expression
expr -> Text -> Text
t'Text
"noexcept(" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprTemplateParam TemplateArg
tp -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext TemplateArg -> Saying saytag)
-> WithContext TemplateArg -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Expression -> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc TemplateArg
tp
ExprFunctionParam FunctionParam
fp -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext FunctionParam -> Saying saytag)
-> WithContext FunctionParam -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Expression
-> FunctionParam -> WithContext FunctionParam
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc FunctionParam
fp
ExprField Expression
expr UnresolvedName
urn -> WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr WithContext Expression -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'.' Saying saytag -> WithContext UnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression
-> UnresolvedName -> WithContext UnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc UnresolvedName
urn
ExprFieldPtr Expression
expr UnresolvedName
urn -> WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr WithContext Expression -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"->" Saying saytag -> WithContext UnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression
-> UnresolvedName -> WithContext UnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc UnresolvedName
urn
ExprFieldExpr Expression
baseExp Expression
fieldExp -> WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
baseExp WithContext Expression -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
".*" Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
fieldExp
ExprSizeOfTmplParamPack TemplateArg
tp -> Text -> Text
t'Text
"sizeof...(" Text -> WithContext TemplateArg -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc TemplateArg
tp Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprSizeOfFuncParamPack FunctionParam
fp -> Text -> Text
t'Text
"sizeof...(" Text -> WithContext FunctionParam -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression
-> FunctionParam -> WithContext FunctionParam
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc FunctionParam
fp Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprSizeOfCapturedTmplParamPack [TemplateArg]
tas -> Text -> Text
t'Text
"sizeof...(" Text -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [TemplateArg] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [TemplateArg]
tas WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprPack Expression
expr -> WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr WithContext Expression -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"..."
ExprUnaryLeftFold Operator
op Expression
expr -> Char
'(' Char -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"..." Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprUnaryRightFold Operator
op Expression
expr -> Char
'(' Char -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"..." Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprBinaryLeftFold Operator
op Expression
exprL Expression
exprR ->
Char
'(' Char -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
exprL Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"..." Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
exprR Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprBinaryRightFold Operator
op Expression
exprL Expression
exprR ->
Char
'(' Char -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
exprL Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"..." Saying saytag -> WithContext Operator -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Operator
op Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
exprR Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
ExprThrow Expression
expr -> Text -> Text
t'Text
"throw" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Expression -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc Expression
expr
Expression
ExprReThrow -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"throw"
ExprVendorExtended SourceName
sn [TemplateArg]
tas -> WithContext Expression -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc SourceName
sn WithContext SourceName -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'<' Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [TemplateArg] -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [TemplateArg]
tas WithContext Expression
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'>'
ExprUnresolvedName UnresolvedName
urn -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext UnresolvedName -> Saying saytag)
-> WithContext UnresolvedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Expression
-> UnresolvedName -> WithContext UnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc UnresolvedName
urn
ExprPrim ExprPrimary
pe -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext ExprPrimary -> Saying saytag)
-> WithContext ExprPrimary -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Expression -> ExprPrimary -> WithContext ExprPrimary
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Expression
wc ExprPrimary
pe
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''ExprPrimary
) => Sayable saytag (WithContext ExprPrimary) where
sayable :: WithContext ExprPrimary -> Saying saytag
sayable WithContext ExprPrimary
wc =
case WithContext ExprPrimary -> ExprPrimary
forall a. WithContext a -> a
contextData WithContext ExprPrimary
wc of
IntLit Type_
ty Coord
n ->
case Type_
ty of
BaseType BaseType
Bool_ -> Text -> Text
t'Text
"" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ if Coord
n Coord -> Coord -> Bool
forall a. Ord a => a -> a -> Bool
> Coord
0 then Text -> Text
t'Text
"true" else Text -> Text
t'Text
"false"
BaseType BaseType
bty -> case BaseType
-> [(BaseType, (Text, Text, Maybe Text))]
-> Maybe (Text, Text, Maybe Text)
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup BaseType
bty [(BaseType, (Text, Text, Maybe Text))]
builtinTypeTable of
Just (Text
_, Text
_, Just Text
sfx) -> Coord
n Coord -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text
sfx
Just (Text
_, Text
cst, Maybe Text
Nothing) -> Char
'(' Char -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text
cst Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> Coord -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Coord
n
Maybe (Text, Text, Maybe Text)
_ -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ExprPrimary -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> Coord -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Coord
n
Type_
_ -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ExprPrimary -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> Coord -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Coord
n
FloatLit Type_
ty Float
n -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ExprPrimary -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> Float -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Float
n
ComplexFloatLit Type_
ty Float
r Float
i -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ExprPrimary -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Type_
ty Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> Float -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Float
r Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
',' Saying saytag -> Float -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Float
i Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
DirectLit Type_
ty -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ExprPrimary -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
")NULL"
NullPtrTemplateArg Type_
ty -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ExprPrimary -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Type_
ty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
")0"
ExternalNameLit Encoding
enc -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Encoding -> Saying saytag)
-> WithContext Encoding -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext ExprPrimary -> Encoding -> WithContext Encoding
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExprPrimary
wc Encoding
enc
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''BracedExpression
) => Sayable saytag (WithContext BracedExpression) where
sayable :: WithContext BracedExpression -> Saying saytag
sayable WithContext BracedExpression
wc =
case WithContext BracedExpression -> BracedExpression
forall a. WithContext a -> a
contextData WithContext BracedExpression
wc of
BracedExpr Expression
e -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Expression -> Saying saytag)
-> WithContext Expression -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext BracedExpression
-> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc Expression
e
BracedFieldExpr SourceName
sn BracedExpression
be' -> Char
'.' Char -> WithContext SourceName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BracedExpression
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc SourceName
sn Saying saytag -> WithContext BracedExpression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BracedExpression
-> BracedExpression -> WithContext BracedExpression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc BracedExpression
be'
BracedIndexExpr Expression
ixe BracedExpression
be' ->
Char
'[' Char -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BracedExpression
-> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc Expression
ixe Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'=' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'(' Saying saytag -> WithContext BracedExpression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BracedExpression
-> BracedExpression -> WithContext BracedExpression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc BracedExpression
be' Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
BracedRangedExpr Expression
sr Expression
er BracedExpression
be' -> Char
'[' Char -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BracedExpression
-> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc Expression
sr Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"..." Saying saytag -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext BracedExpression
-> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc Expression
er Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']'
Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'=' Saying saytag -> WithContext BracedExpression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext BracedExpression
-> BracedExpression -> WithContext BracedExpression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BracedExpression
wc BracedExpression
be'
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''InitializerExpr
) => Sayable saytag (WithContext InitializerExpr) where
sayable :: WithContext InitializerExpr -> Saying saytag
sayable WithContext InitializerExpr
wc = let Initializer [Expression]
ies = WithContext InitializerExpr -> InitializerExpr
forall a. WithContext a -> a
contextData WithContext InitializerExpr
wc in [Expression] -> WithContext InitializerExpr -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst [Expression]
ies WithContext InitializerExpr
wc
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''FunctionParam
) => Sayable saytag (WithContext FunctionParam) where
sayable :: WithContext FunctionParam -> Saying saytag
sayable WithContext FunctionParam
wc =
case WithContext FunctionParam -> FunctionParam
forall a. WithContext a -> a
contextData WithContext FunctionParam
wc of
FunctionParam
FP_This -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"this"
FP_ [CVQualifier]
cvq Natural
n -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Saying saytag -> Saying saytag) -> Saying saytag -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Char
'{' Char -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [CVQualifier] -> WithContext FunctionParam -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [CVQualifier]
cvq WithContext FunctionParam
wc Text
" " Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"parm#" Saying saytag -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Natural
n Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'}'
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''UnresolvedName
) => Sayable saytag (WithContext UnresolvedName) where
sayable :: WithContext UnresolvedName -> Saying saytag
sayable WithContext UnresolvedName
wc =
case WithContext UnresolvedName -> UnresolvedName
forall a. WithContext a -> a
contextData WithContext UnresolvedName
wc of
URN_Base Bool
True BaseUnresolvedName
burn -> Text -> Text
t'Text
"::" Text -> WithContext BaseUnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedName
-> BaseUnresolvedName -> WithContext BaseUnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc BaseUnresolvedName
burn
URN_Base Bool
False BaseUnresolvedName
burn -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext BaseUnresolvedName -> Saying saytag)
-> WithContext BaseUnresolvedName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnresolvedName
-> BaseUnresolvedName -> WithContext BaseUnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc BaseUnresolvedName
burn
URNScopedRef UnresolvedType
urt BaseUnresolvedName
burn -> WithContext UnresolvedName
-> UnresolvedType -> WithContext UnresolvedType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc UnresolvedType
urt WithContext UnresolvedType -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext BaseUnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedName
-> BaseUnresolvedName -> WithContext BaseUnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc BaseUnresolvedName
burn
URNSubScopedRef UnresolvedType
urt UnresolvedQualifierLevels
urqls BaseUnresolvedName
burn -> WithContext UnresolvedName
-> UnresolvedType -> WithContext UnresolvedType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc UnresolvedType
urt WithContext UnresolvedType -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::"
Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ UnresolvedQualifierLevels
-> WithContext UnresolvedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' UnresolvedQualifierLevels
urqls WithContext UnresolvedName
wc (Text -> Text
t'Text
"::")
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext BaseUnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedName
-> BaseUnresolvedName -> WithContext BaseUnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc BaseUnresolvedName
burn
URNQualRef Bool
True UnresolvedQualifierLevels
urqls BaseUnresolvedName
burn -> Text -> Text
t'Text
"::"
Text -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ UnresolvedQualifierLevels
-> WithContext UnresolvedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' UnresolvedQualifierLevels
urqls WithContext UnresolvedName
wc (Text -> Text
t'Text
"::")
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext BaseUnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedName
-> BaseUnresolvedName -> WithContext BaseUnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc BaseUnresolvedName
burn
URNQualRef Bool
False UnresolvedQualifierLevels
urqls BaseUnresolvedName
burn -> UnresolvedQualifierLevels
-> WithContext UnresolvedName -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' UnresolvedQualifierLevels
urqls WithContext UnresolvedName
wc (Text -> Text
t'Text
"::")
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::" Saying saytag -> WithContext BaseUnresolvedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedName
-> BaseUnresolvedName -> WithContext BaseUnresolvedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedName
wc BaseUnresolvedName
burn
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''BaseUnresolvedName
) => Sayable saytag (WithContext BaseUnresolvedName) where
sayable :: WithContext BaseUnresolvedName -> Saying saytag
sayable WithContext BaseUnresolvedName
wc =
case WithContext BaseUnresolvedName -> BaseUnresolvedName
forall a. WithContext a -> a
contextData WithContext BaseUnresolvedName
wc of
BUName SourceName
sn Maybe TemplateArgs
Nothing -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext SourceName -> Saying saytag)
-> WithContext SourceName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext BaseUnresolvedName
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc SourceName
sn
BUName SourceName
sn (Just TemplateArgs
targs) -> WithContext BaseUnresolvedName
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc SourceName
sn WithContext SourceName -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BaseUnresolvedName
-> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc TemplateArgs
targs
BUOnOperator Operator
op -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Operator -> Saying saytag)
-> WithContext Operator -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext BaseUnresolvedName -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc Operator
op
BUOnOperatorT Operator
op TemplateArgs
targs -> WithContext BaseUnresolvedName -> Operator -> WithContext Operator
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc Operator
op WithContext Operator -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BaseUnresolvedName
-> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc TemplateArgs
targs
BUDestructorUnresolvedType UnresolvedType
urt -> Char
'~' Char -> WithContext UnresolvedType -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BaseUnresolvedName
-> UnresolvedType -> WithContext UnresolvedType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc UnresolvedType
urt
BUDestructorSimpleId SourceName
sn Maybe TemplateArgs
Nothing -> Char
'~' Char -> WithContext SourceName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BaseUnresolvedName
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc SourceName
sn
BUDestructorSimpleId SourceName
sn (Just TemplateArgs
targs) -> Char
'~' Char -> WithContext SourceName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BaseUnresolvedName
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc SourceName
sn Saying saytag -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext BaseUnresolvedName
-> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseUnresolvedName
wc TemplateArgs
targs
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''UnresolvedType
) => Sayable saytag (WithContext UnresolvedType) where
sayable :: WithContext UnresolvedType -> Saying saytag
sayable WithContext UnresolvedType
wc =
case WithContext UnresolvedType -> UnresolvedType
forall a. WithContext a -> a
contextData WithContext UnresolvedType
wc of
URTTemplate TemplateArg
tp Maybe TemplateArgs
Nothing -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext TemplateArg -> Saying saytag)
-> WithContext TemplateArg -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnresolvedType
-> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedType
wc TemplateArg
tp
URTTemplate TemplateArg
tp (Just TemplateArgs
targs) -> WithContext UnresolvedType
-> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedType
wc TemplateArg
tp WithContext TemplateArg
-> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedType
-> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedType
wc TemplateArgs
targs
URTDeclType DeclType
dt -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext DeclType -> Saying saytag)
-> WithContext DeclType -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnresolvedType -> DeclType -> WithContext DeclType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedType
wc DeclType
dt
URTSubstPrefix Prefix
pfx -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Prefix -> Saying saytag)
-> WithContext Prefix -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnresolvedType -> Prefix -> WithContext Prefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedType
wc Prefix
pfx
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''UnresolvedQualifierLevel
) => Sayable saytag (WithContext UnresolvedQualifierLevel) where
sayable :: WithContext UnresolvedQualifierLevel -> Saying saytag
sayable WithContext UnresolvedQualifierLevel
wc =
case WithContext UnresolvedQualifierLevel -> UnresolvedQualifierLevel
forall a. WithContext a -> a
contextData WithContext UnresolvedQualifierLevel
wc of
URQL SourceName
sn Maybe TemplateArgs
Nothing -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext SourceName -> Saying saytag)
-> WithContext SourceName -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext UnresolvedQualifierLevel
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedQualifierLevel
wc SourceName
sn
URQL SourceName
sn (Just TemplateArgs
targs) -> WithContext UnresolvedQualifierLevel
-> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedQualifierLevel
wc SourceName
sn WithContext SourceName -> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext UnresolvedQualifierLevel
-> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext UnresolvedQualifierLevel
wc TemplateArgs
targs
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''DeclType
) => Sayable saytag (WithContext DeclType) where
sayable :: WithContext DeclType -> Saying saytag
sayable WithContext DeclType
wc =
case WithContext DeclType -> DeclType
forall a. WithContext a -> a
contextData WithContext DeclType
wc of
DeclType Expression
expr -> Text -> Text
t'Text
"decltype (" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext DeclType -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext DeclType
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
DeclTypeExpr Expression
expr -> Text -> Text
t'Text
"decltype (" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext DeclType -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext DeclType
wc Expression
expr Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext ClosurePrefix) where
sayable :: WithContext () -> Saying saytag
sayable WithContext ()
_ = Demangler -> String -> [String] -> Saying saytag
forall a (saytag :: Symbol).
a -> String -> [String] -> Saying saytag
cannotSay Demangler
Demangler String
"sayable"
[ String
"No Sayable for ClosurePrefix" ]
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Substitution
) => Sayable saytag (WithContext Substitution) where
sayable :: WithContext Substitution -> Saying saytag
sayable WithContext Substitution
wc =
case WithContext Substitution -> Substitution
forall a. WithContext a -> a
contextData WithContext Substitution
wc of
Substitution
SubStd -> Text -> Text
t'Text
"std" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
""
Substitution
SubAlloc -> Text -> Text
t'Text
"std" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::allocator"
Substitution
SubBasicString -> Text -> Text
t'Text
"std" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::basic_string"
SubStdType StdType
stdTy -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext StdType -> Saying saytag)
-> WithContext StdType -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Substitution -> StdType -> WithContext StdType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Substitution
wc StdType
stdTy
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext StdType) where
sayable :: WithContext StdType -> Saying saytag
sayable WithContext StdType
wc =
let ct :: Text
ct = Text -> Text
t'Text
"std::char_traits<char>" in
case WithContext StdType -> StdType
forall a. WithContext a -> a
contextData WithContext StdType
wc of
StdType
BasicStringChar -> Text -> Text
t'Text
"std::basic_string<char," Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text
ct Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
", std::allocator<char> >"
StdType
BasicIStream -> Text -> Text
t'Text
"std::basic_istream<char," Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text
ct Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'>'
StdType
BasicOStream -> Text -> Text
t'Text
"std::basic_ostream<char," Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text
ct Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'>'
StdType
BasicIOStream -> Text -> Text
t'Text
"std::basic_iostream<char," Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text
ct Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'>'
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''ABI_Tag
) => Sayable saytag (WithContext ABI_Tag) where
sayable :: WithContext ABI_Tag -> Saying saytag
sayable WithContext ABI_Tag
wc = let ABITag SourceName
p = WithContext ABI_Tag -> ABI_Tag
forall a. WithContext a -> a
contextData WithContext ABI_Tag
wc in Text -> Text
t'Text
"[abi:" Text -> WithContext SourceName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext ABI_Tag -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ABI_Tag
wc SourceName
p Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']'
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''Type_
) => Sayable saytag (WithContext Type_) where
sayable :: WithContext Type_ -> Saying saytag
sayable WithContext Type_
wc =
case WithContext Type_ -> Type_
forall a. WithContext a -> a
contextData WithContext Type_
wc of
BaseType BaseType
t -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext BaseType -> Saying saytag)
-> WithContext BaseType -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> BaseType -> WithContext BaseType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc BaseType
t
QualifiedType [] [] Type_
t -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Type_ -> Saying saytag)
-> WithContext Type_ -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t
QualifiedType [()]
eqs [] Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ [()] -> WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [()]
eqs WithContext Type_
wc Text
" "
QualifiedType [] [CVQualifier]
cvqs Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- [CVQualifier] -> WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [CVQualifier]
cvqs WithContext Type_
wc Text
" "
QualifiedType [()]
eqs [CVQualifier]
cvqs Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- [()] -> WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [()]
eqs WithContext Type_
wc Text
" " Saying saytag -> Saying saytag -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- [CVQualifier] -> WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [CVQualifier]
cvqs WithContext Type_
wc Text
" "
ClassUnionStructEnum Name
n -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Name -> Saying saytag)
-> WithContext Name -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Name
n
ClassStruct Name
n -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Name -> Saying saytag)
-> WithContext Name -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Name
n
Union Name
n -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Name -> Saying saytag)
-> WithContext Name -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Name
n
Enum Name
n -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Name -> Saying saytag)
-> WithContext Name -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> Name -> WithContext Name
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Name
n
ty :: Type_
ty@(Function {}) -> Type_ -> Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) nm.
Sayable saytag nm =>
Type_ -> nm -> WithContext Type_ -> Saying saytag
sayFunctionType Type_
ty (Text -> Text
t'Text
"") WithContext Type_
wc
Pointer f :: Type_
f@(Function {}) -> Type_ -> Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) nm.
Sayable saytag nm =>
Type_ -> nm -> WithContext Type_ -> Saying saytag
sayFunctionType Type_
f (Text -> Text
t'Text
"(*)") WithContext Type_
wc
Pointer (ArrayType ArrayBound
bnd Type_
t) -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"(*)" Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'[' Saying saytag -> WithContext ArrayBound -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> ArrayBound -> WithContext ArrayBound
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc ArrayBound
bnd Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']'
Pointer Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'*'
LValRef (ArrayType ArrayBound
bnd Type_
t) -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"(&)" Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Char
'[' Saying saytag -> WithContext ArrayBound -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> ArrayBound -> WithContext ArrayBound
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc ArrayBound
bnd Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']'
LValRef Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'&'
RValRef (LValRef t :: Type_
t@(QualifiedType [()]
_ [CVQualifier
Const_] Type_
_)) ->
forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Type_ -> Saying saytag)
-> WithContext Type_ -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc (Type_ -> Type_
LValRef Type_
t)
RValRef Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"&&"
ComplexPair Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"complex"
Imaginary Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"imaginary"
ArrayType ArrayBound
bnd Type_
t -> WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
t WithContext Type_ -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'[' Saying saytag -> WithContext ArrayBound -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> ArrayBound -> WithContext ArrayBound
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc ArrayBound
bnd Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
']'
Template TemplateArg
tp TemplateArgs
ta -> WithContext Type_ -> TemplateArg -> WithContext TemplateArg
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc TemplateArg
tp WithContext TemplateArg
-> WithContext TemplateArgs -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext Type_ -> TemplateArgs -> WithContext TemplateArgs
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc TemplateArgs
ta
Cpp11PackExpansion NonEmpty Type_
ts ->
NonEmpty Type_ -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) (t :: * -> *) a b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Saying saytag
ctxLst NonEmpty Type_
ts WithContext Type_
wc
StdType StdType
stdTy -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext StdType -> Saying saytag)
-> WithContext StdType -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> StdType -> WithContext StdType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc StdType
stdTy
DeclType_ DeclType
dt -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext DeclType -> Saying saytag)
-> WithContext DeclType -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext Type_ -> DeclType -> WithContext DeclType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc DeclType
dt
PointerToMember Type_
cty mty :: Type_
mty@(Function {}) ->
Type_ -> Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) nm.
Sayable saytag nm =>
Type_ -> nm -> WithContext Type_ -> Saying saytag
sayFunctionType Type_
mty (Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
cty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::*)") WithContext Type_
wc
PointerToMember Type_
cty Type_
mty -> Char
'(' Char -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
cty Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"::*)" Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
mty
sayFunctionType :: Sayable saytag nm => Type_ -> nm -> WithContext Type_ -> Saying saytag
sayFunctionType :: forall (saytag :: Symbol) nm.
Sayable saytag nm =>
Type_ -> nm -> WithContext Type_ -> Saying saytag
sayFunctionType (Function [CVQualifier]
cvqs Maybe ExceptionSpec
mb'exc Transaction
trns Bool
isExternC Type_
rTy NonEmpty Type_
argTys Maybe RefQualifier
mb'ref) nm
nm WithContext Type_
wc =
[CVQualifier] -> WithContext Type_ -> Text -> Saying saytag
forall (saytag :: Symbol) a (t :: * -> *) b.
(Sayable saytag (WithContext a), Functor t, Foldable t) =>
t a -> WithContext b -> Text -> Saying saytag
ctxLst' [CVQualifier]
cvqs WithContext Type_
wc Text
" "
Saying saytag -> Maybe (WithContext ExceptionSpec) -> Saying saytag
forall (tag :: Symbol) m e.
(Sayable tag m, Sayable tag e) =>
m -> Maybe e -> Saying tag
&? Maybe ExceptionSpec
-> WithContext Type_ -> Maybe (WithContext ExceptionSpec)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx Maybe ExceptionSpec
mb'exc WithContext Type_
wc
Saying saytag -> WithContext Transaction -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> Transaction -> WithContext Transaction
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Transaction
trns
Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ (if Bool
isExternC then Text -> Text
t'Text
" extern \"C\"" else Text -> Text
t'Text
"")
Saying saytag -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext Type_ -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext Type_
wc Type_
rTy
Saying saytag -> nm -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- nm
nm Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
'('
Saying saytag -> [WithContext Type_] -> Saying saytag
forall (tag :: Symbol) m e (t :: * -> *).
(Sayable tag m, Sayable tag e, Foldable t) =>
m -> t e -> Saying tag
&+* (case NonEmpty Type_
argTys of
BaseType BaseType
Void :| [] -> []
NonEmpty Type_
_ -> [Type_] -> WithContext Type_ -> [WithContext Type_]
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx (NonEmpty Type_ -> [Type_]
forall a. NonEmpty a -> [a]
NEL.toList NonEmpty Type_
argTys) WithContext Type_
wc
)
Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
Saying saytag -> Maybe (WithContext RefQualifier) -> Saying saytag
forall (tag :: Symbol) m e.
(Sayable tag m, Sayable tag e) =>
m -> Maybe e -> Saying tag
&? Maybe RefQualifier
-> WithContext Type_ -> Maybe (WithContext RefQualifier)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx Maybe RefQualifier
mb'ref WithContext Type_
wc
sayFunctionType Type_
_ nm
_ WithContext Type_
_ = Demangler -> String -> [String] -> Saying saytag
forall a (saytag :: Symbol).
a -> String -> [String] -> Saying saytag
cannotSay Demangler
Demangler String
"sayFunctionType"
[ String
"Called with a type that is not a Function!" ]
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''ArrayBound
) => Sayable saytag (WithContext ArrayBound) where
sayable :: WithContext ArrayBound -> Saying saytag
sayable WithContext ArrayBound
wc =
case WithContext ArrayBound -> ArrayBound
forall a. WithContext a -> a
contextData WithContext ArrayBound
wc of
ArrayBound
NoBounds -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
""
NumBound Coord
i -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag Coord
i
ExprBound Expression
e -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (WithContext Expression -> Saying saytag)
-> WithContext Expression -> Saying saytag
forall a b. (a -> b) -> a -> b
$ WithContext ArrayBound -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ArrayBound
wc Expression
e
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''ExceptionSpec
) => Sayable saytag (WithContext ExceptionSpec) where
sayable :: WithContext ExceptionSpec -> Saying saytag
sayable WithContext ExceptionSpec
wc =
case WithContext ExceptionSpec -> ExceptionSpec
forall a. WithContext a -> a
contextData WithContext ExceptionSpec
wc of
ExceptionSpec
NonThrowing -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"noexcept"
ComputedThrow Expression
expr -> Text -> Text
t'Text
"throw" Text -> WithContext Expression -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext ExceptionSpec -> Expression -> WithContext Expression
forall a b. WithContext a -> b -> WithContext b
withContext WithContext ExceptionSpec
wc Expression
expr
Throwing NonEmpty Type_
tys -> Text -> Text
t'Text
"throw (" Text -> NonEmpty (WithContext Type_) -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ NonEmpty Type_
-> WithContext ExceptionSpec -> NonEmpty (WithContext Type_)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx NonEmpty Type_
tys WithContext ExceptionSpec
wc Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext Transaction) where
sayable :: WithContext Transaction -> Saying saytag
sayable WithContext Transaction
wc =
case WithContext Transaction -> Transaction
forall a. WithContext a -> a
contextData WithContext Transaction
wc of
Transaction
TransactionSafe -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
"safe"
Transaction
TransactionUnsafe -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag (Text -> Saying saytag) -> Text -> Saying saytag
forall a b. (a -> b) -> a -> b
$ Text -> Text
t'Text
""
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''BaseType
) => Sayable saytag (WithContext BaseType) where
sayable :: WithContext BaseType -> Saying saytag
sayable WithContext BaseType
wc =
case BaseType
-> [(BaseType, (Text, Text, Maybe Text))]
-> Maybe (Text, Text, Maybe Text)
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup (WithContext BaseType -> BaseType
forall a. WithContext a -> a
contextData WithContext BaseType
wc) [(BaseType, (Text, Text, Maybe Text))]
builtinTypeTable of
Just (Text
_,Text
s,Maybe Text
_) -> forall (tag :: Symbol) v. Sayable tag v => v -> Saying tag
sayable @saytag Text
s
Maybe (Text, Text, Maybe Text)
Nothing ->
case WithContext BaseType -> BaseType
forall a. WithContext a -> a
contextData WithContext BaseType
wc of
FloatN Natural
n -> Text -> Text
t'Text
"std::float" Text -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Natural
n Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"_t"
FloatNx Natural
n -> Text -> Text
t'Text
"std::float" Text -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Natural
n Saying saytag -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Text -> Text
t'Text
"x_t"
SBitInt Natural
n -> Text -> Text
t'Text
"signed _BitInt(" Text -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Natural
n Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
UBitInt Natural
n -> Text -> Text
t'Text
"unsigned _BitInt(" Text -> Natural -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Natural
n Saying saytag -> Char -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ Char
')'
VendorExtendedType SourceName
nm Maybe TemplateArgs
mb'ta -> WithContext BaseType -> SourceName -> WithContext SourceName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext BaseType
wc SourceName
nm WithContext SourceName
-> Maybe (WithContext TemplateArgs) -> Saying saytag
forall (tag :: Symbol) m e.
(Sayable tag m, Sayable tag e) =>
m -> Maybe e -> Saying tag
&? Maybe TemplateArgs
-> WithContext BaseType -> Maybe (WithContext TemplateArgs)
forall (t :: * -> *) a b.
Functor t =>
t a -> WithContext b -> t (WithContext a)
wCtx Maybe TemplateArgs
mb'ta WithContext BaseType
wc
BaseType
t -> Demangler -> String -> [String] -> Saying saytag
forall a (saytag :: Symbol).
a -> String -> [String] -> Saying saytag
cannotSay Demangler
Demangler String
"sayable.Basetype"
[ String
"Unknown BaseType not listed in the builtinTypeTable"
, BaseType -> String
forall a. Show a => a -> String
show BaseType
t
]
instance {-# OVERLAPPABLE #-} Sayable saytag (WithContext CallOffset) where
sayable :: WithContext CallOffset -> Saying saytag
sayable WithContext CallOffset
_wc =
Demangler -> String -> [String] -> Saying saytag
forall a (saytag :: Symbol).
a -> String -> [String] -> Saying saytag
cannotSay Demangler
Demangler String
"Sayable CallOffset"
[ String
"The CallOffset is for a thunk or covariant return thunk"
, String
"and is not expected to be printed."
]
instance {-# OVERLAPPABLE #-}
$(sayableConstraints ''SubsCandidate
) => Sayable saytag (WithContext SubsCandidate) where
sayable :: WithContext SubsCandidate -> Saying saytag
sayable WithContext SubsCandidate
wc =
case WithContext SubsCandidate -> SubsCandidate
forall a. WithContext a -> a
contextData WithContext SubsCandidate
wc of
SC_Type Type_
t -> Text -> Text
t'Text
"SC_Ty" Text -> WithContext Type_ -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SubsCandidate -> Type_ -> WithContext Type_
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SubsCandidate
wc Type_
t
SC_UQName Bool
True UnqualifiedName
n -> Text -> Text
t'Text
"SC_UN" Text -> Text -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- Text -> Text
t'Text
"std::" Saying saytag -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&+ WithContext SubsCandidate
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SubsCandidate
wc UnqualifiedName
n
SC_UQName Bool
_ UnqualifiedName
n -> Text -> Text
t'Text
"SC_UN" Text -> WithContext UnqualifiedName -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SubsCandidate
-> UnqualifiedName -> WithContext UnqualifiedName
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SubsCandidate
wc UnqualifiedName
n
SC_Prefix Prefix
p -> Text -> Text
t'Text
"SC_PR" Text -> WithContext Prefix -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SubsCandidate -> Prefix -> WithContext Prefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SubsCandidate
wc Prefix
p
SC_TemplatePrefix TemplatePrefix
tp -> Text -> Text
t'Text
"SC_TP" Text -> WithContext TemplatePrefix -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SubsCandidate
-> TemplatePrefix -> WithContext TemplatePrefix
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SubsCandidate
wc TemplatePrefix
tp
SC_UnresolvedType UnresolvedType
urt -> Text -> Text
t'Text
"SC_URT" Text -> WithContext UnresolvedType -> Saying saytag
forall (saytag :: Symbol) m n.
(Sayable saytag m, Sayable saytag n) =>
m -> n -> Saying saytag
&- WithContext SubsCandidate
-> UnresolvedType -> WithContext UnresolvedType
forall a b. WithContext a -> b -> WithContext b
withContext WithContext SubsCandidate
wc UnresolvedType
urt