-- | Disciple Core Salt.
--
-- This is what happens to 'C' when you leave it out in the sun for too long.
--
-- Salt is a fragment of System-F2 that contains just those features that
-- can be easily mapped onto C or LLVM code. It has functions, case
-- expressions and primops, but no partial application, data types, or nested
-- functions. All operations on algebraic data need to have been expanded to
-- primitive store operations.
--
-- Salt exposes raw store and control primops, so its possible for functions
-- written directly in Salt to corrupt the heap (if they are wrong).
--
module DDC.Core.Salt
( -- * Language profile
profile
-- * Names
, Name (..)
, PrimTyCon (..)
-- ** Primitive Values
, PrimVal (..)
, pattern NamePrimOp
, pattern NamePrimLit
-- ** Primitive Operators
, PrimOp (..)
, PrimArith (..)
, PrimCall (..)
, PrimCast (..)
, PrimControl (..)
, PrimStore (..)
, primCastPromoteIsValid
, primCastTruncateIsValid
-- ** Primitive Literals
, PrimLit (..)
, pattern NameLitVoid
, pattern NameLitBool
, pattern NameLitNat
, pattern NameLitInt
, pattern NameLitSize
, pattern NameLitWord
, pattern NameLitFloat
, pattern NameLitTextLit
, pattern NameLitTag
-- * Name parsing
, readName
, takeNameVar
-- * Program lexing
, lexModuleString
, lexExpString
-- * Conversion
, seaOfSaltModule
, Error(..)
-- * Salt expressions
, module DDC.Core.Salt.Exp)
where
import DDC.Core.Salt.Name
import DDC.Core.Salt.Profile
import DDC.Core.Salt.Convert
import DDC.Core.Salt.Exp