capnp-0.1.0.0: exe/capnpc-haskell/Backends/Common.hs
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-|
Module: Backends.Common
Description: Bits of code generation common to both backends.
-}
module Backends.Common where
import Data.Monoid ((<>))
import Data.String (IsString(..))
import qualified Text.PrettyPrint.Leijen.Text as PP
import IR
-- | Format a primitive word type.
fmtPrimWord :: PrimWord -> PP.Doc
fmtPrimWord PrimInt{isSigned=True,size} = "Int" <> fromString (show size)
fmtPrimWord PrimInt{isSigned=False,size} = "Word" <> fromString (show size)
fmtPrimWord PrimFloat32 = "Float"
fmtPrimWord PrimFloat64 = "Double"
fmtPrimWord PrimBool = "Bool"
-- | Return the size in bits of a type that belongs in the data section of a struct.
dataFieldSize :: WordType -> Int
dataFieldSize fieldType = case fieldType of
EnumType _ -> 16
PrimWord PrimInt{..} -> size
PrimWord PrimFloat32 -> 32
PrimWord PrimFloat64 -> 64
PrimWord PrimBool -> 1