-- ** Metadata types
MetaExpr(..), MetaAnnot(..), MetaDecl(..), MetaId(..),
+ -- *** Module flags
+ ModuleFlagBehavior(..),
+ ModuleFlag(..),
+ moduleFlagToMetaExpr,
-- ** Operations on the type system.
isGlobal, getLitType, getVarType,
, MetaExpr(..)
, MetaAnnot(..)
, MetaDecl(..)
+ -- * Module flags
+ , ModuleFlagBehavior(..)
+ , ModuleFlag(..)
+ , moduleFlagToMetaExpr
) where
import GHC.Prelude
-- | Metadata node declaration.
-- ('!0 = metadata !{ \<metadata expression> }' form).
| MetaUnnamed !MetaId !MetaExpr
+
+----------------------------------------------------------------
+-- Module flags
+----------------------------------------------------------------
+data ModuleFlagBehavior
+ = MFBError
+ | MFBWarning
+ | MFBRequire
+ | MFBOverride
+ | MFBAppend
+ | MFBAppendUnique
+ | MFBMax
+ | MFBMin
+
+moduleFlagBehaviorToMetaExpr :: ModuleFlagBehavior -> MetaExpr
+moduleFlagBehaviorToMetaExpr mfb =
+ MetaLit $ LMIntLit n i32
+ where
+ n = case mfb of
+ MFBError -> 1
+ MFBWarning -> 2
+ MFBRequire -> 3
+ MFBOverride -> 4
+ MFBAppend -> 5
+ MFBAppendUnique -> 6
+ MFBMax -> 7
+ MFBMin -> 8
+
+data ModuleFlag = ModuleFlag { mfBehavior :: ModuleFlagBehavior
+ , mfName :: LMString
+ , mfValue :: MetaExpr
+ }
+
+moduleFlagToMetaExpr :: ModuleFlag -> MetaExpr
+moduleFlagToMetaExpr flag = MetaStruct
+ [ moduleFlagBehaviorToMetaExpr (mfBehavior flag)
+ , MetaStr (mfName flag)
+ , mfValue flag
+ ]