packages feed

llvm-codegen-0.1.0.0: lib/LLVM/Codegen/Name.hs

module LLVM.Codegen.Name
  ( Name(..)
  , unName
  , renderName
  ) where

import Data.Text
import Data.String
import LLVM.Pretty

data Name
  = Generated !Int
  | Name !Text
  deriving (Eq, Ord, Show)

instance IsString Name where
  fromString = Name . fromString
  {-# INLINABLE fromString #-}

unName :: Name -> Text
unName = \case
  Name name -> name
  Generated x -> pack $! show x

renderName :: Renderer Name
renderName buf = \case
  Name name ->
    buf |> name
  Generated x ->
    buf |>$ x
{-# INLINABLE renderName #-}