{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} module Llvm.Syntax.Printer.LlvmPrint (module Llvm.Syntax.Printer.LlvmPrint ,module Llvm.Syntax.Printer.Common ) where import Llvm.Syntax.Printer.Common import Llvm.Data.Ast import qualified Llvm.Syntax.Printer.SharedEntityPrint as P import Llvm.Syntax.Printer.SharedEntityPrint (integral) import Llvm.Util.Mapping (getValOrImplError) class AsmPrint a where toLlvm :: a -> Doc commaSepMaybe :: AsmPrint a => Maybe a -> Doc commaSepMaybe = maybe empty ((comma<+>) . toLlvm) maybeSepByEquals :: AsmPrint a => Maybe a -> Doc maybeSepByEquals = maybe empty ((<+>equals).toLlvm) instance AsmPrint a => AsmPrint (Maybe a) where toLlvm (Just x) = toLlvm x toLlvm Nothing = empty instance AsmPrint LabelId where toLlvm (LabelString s) = text s toLlvm (LabelNumber n) = integral n toLlvm (LabelDqNumber n) = doubleQuotes $ integral n toLlvm (LabelDqString s) = doubleQuotes $ text s instance AsmPrint PercentLabel where toLlvm (PercentLabel li) = char '%' <> (toLlvm li) instance AsmPrint TargetLabel where toLlvm (TargetLabel x) = text "label" <+> toLlvm x instance AsmPrint BlockLabel where toLlvm (ImplicitBlockLabel (f, l, c)) = text ";