diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-10-17 00:36:03 -0600 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-10-17 00:36:03 -0600 |
commit | 62dffb99e29eba9004ef2764fbdd9b0462de4742 (patch) | |
tree | 663298cb18eff8f6d7966aba1ec7845d58e19894 /src/Language/Fiddle/Compiler/Backend/C.hs | |
parent | c31a34382d6fe1307a0c6fe1710c42f27fe833ca (diff) | |
download | fiddle-62dffb99e29eba9004ef2764fbdd9b0462de4742.tar.gz fiddle-62dffb99e29eba9004ef2764fbdd9b0462de4742.tar.bz2 fiddle-62dffb99e29eba9004ef2764fbdd9b0462de4742.zip |
Add ContExpression syntax tree.
This is for expressions which must be calculatable at compile time.
Diffstat (limited to 'src/Language/Fiddle/Compiler/Backend/C.hs')
-rw-r--r-- | src/Language/Fiddle/Compiler/Backend/C.hs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/Language/Fiddle/Compiler/Backend/C.hs b/src/Language/Fiddle/Compiler/Backend/C.hs index dd79bac..df31c8c 100644 --- a/src/Language/Fiddle/Compiler/Backend/C.hs +++ b/src/Language/Fiddle/Compiler/Backend/C.hs @@ -26,8 +26,8 @@ import Data.Text (Text) import qualified Data.Text as Text import Language.Fiddle.Ast import Language.Fiddle.Compiler.Backend -import qualified Language.Fiddle.Compiler.Backend.Internal.FragTree as FragTree import Language.Fiddle.Compiler.Backend.Internal.FormattedWriter +import qualified Language.Fiddle.Compiler.Backend.Internal.FragTree as FragTree import Language.Fiddle.Compiler.Backend.Internal.Writer import Language.Fiddle.Internal.UnitInterface import Language.Fiddle.Internal.UnitNumbers @@ -77,7 +77,7 @@ newtype CFileState = CFileState requireInclude :: String -> M () requireInclude file = do - b <- (Set.member file) <$> gets includedFiles + b <- gets (Set.member file . includedFiles) unless b $ do checkout hF $ text $ @@ -283,8 +283,8 @@ writeRegSet tell $ Text.pack $ printf " o->%s[%d] = in[%d];\n" fieldName i i tell "}\n\n" -pattern DefinedBitsP :: String -> NonEmpty String -> N Bits -> RegisterBitsDecl Checked f a -pattern DefinedBitsP bitsName bitsFullPath offset <- +pattern DefinedBitsP :: String -> NonEmpty String -> N Bits -> RegisterBitsTypeRef Checked f a -> RegisterBitsDecl Checked f a +pattern DefinedBitsP bitsName bitsFullPath offset typeRef <- ( DefinedBits { qBitsMetadata = Present @@ -295,17 +295,22 @@ pattern DefinedBitsP bitsName bitsFullPath offset <- { offset = offset }, bitsFullPath = (NonEmpty.last &&& id -> (bitsName, bitsFullPath)) - } + }, + definedBitsTypeRef = typeRef } ) +-- | Decomposes a type ref into a type name (String) and a list of dimensions +-- (in the case of being an array) +-- decomposeBitsTypeRef :: RegisterBitsTypeRef Checked I A -> (String, [N Unitless]) +-- decomposeBitsTypeRef (RegisterBitsJustBits ) writeRegisterBody :: StructName -> QRegMetadata True -> RegisterBody Checked I A -> M () writeRegisterBody structName regmeta = walk_ registerWalk where registerWalk :: forall t. (Walk t, Typeable t) => t I A -> M () registerWalk t = case () of () - | (Just (DefinedBitsP bitsName fullPath offset)) <- castTS t -> + | (Just (DefinedBitsP bitsName fullPath offset typeRef)) <- castTS t -> text $ Text.pack $ printf |