module Verismith.Tool.Identity
( Identity (..),
defaultIdentity,
)
where
import Control.DeepSeq (NFData, rnf, rwhnf)
import Data.Text (Text, unpack)
import Shelly (FilePath)
import Shelly.Lifted (writefile)
import Verismith.Tool.Internal
import Verismith.Verilog.AST
import Verismith.Verilog.CodeGen
import Prelude hiding (FilePath)
data Identity = Identity
{ Identity -> Text
identityDesc :: !Text,
Identity -> FilePath
identityOutput :: !FilePath
}
deriving (Identity -> Identity -> Bool
(Identity -> Identity -> Bool)
-> (Identity -> Identity -> Bool) -> Eq Identity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Identity -> Identity -> Bool
== :: Identity -> Identity -> Bool
$c/= :: Identity -> Identity -> Bool
/= :: Identity -> Identity -> Bool
Eq)
instance Tool Identity where
toText :: Identity -> Text
toText (Identity Text
d FilePath
_) = Text
d
instance Show Identity where
show :: Identity -> FilePath
show Identity
t = Text -> FilePath
unpack (Text -> FilePath) -> Text -> FilePath
forall a b. (a -> b) -> a -> b
$ Identity -> Text
forall a. Tool a => a -> Text
toText Identity
t
instance Synthesiser Identity where
runSynth :: forall ann. Show ann => Identity -> SourceInfo ann -> ResultSh ()
runSynth = Identity -> SourceInfo ann -> ResultSh ()
forall ann. Show ann => Identity -> SourceInfo ann -> ResultSh ()
runSynthIdentity
synthOutput :: Identity -> FilePath
synthOutput = Identity -> FilePath
identityOutput
setSynthOutput :: Identity -> FilePath -> Identity
setSynthOutput (Identity Text
a FilePath
_) = Text -> FilePath -> Identity
Identity Text
a
instance NFData Identity where
rnf :: Identity -> ()
rnf = Identity -> ()
forall a. a -> ()
rwhnf
runSynthIdentity :: (Show ann) => Identity -> (SourceInfo ann) -> ResultSh ()
runSynthIdentity :: forall ann. Show ann => Identity -> SourceInfo ann -> ResultSh ()
runSynthIdentity (Identity Text
_ FilePath
out) = FilePath -> Text -> ResultSh ()
forall (m :: * -> *). MonadSh m => FilePath -> Text -> m ()
writefile FilePath
out (Text -> ResultSh ())
-> (SourceInfo ann -> Text) -> SourceInfo ann -> ResultSh ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SourceInfo ann -> Text
forall a. Source a => a -> Text
genSource
defaultIdentity :: Identity
defaultIdentity :: Identity
defaultIdentity = Text -> FilePath -> Identity
Identity Text
"identity" FilePath
"syn_identity.v"