summaryrefslogtreecommitdiff
path: root/src/Language/Fiddle/Compiler/Backend/C.hs
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-11-26 22:55:13 -0700
committerJosh Rahm <joshuarahm@gmail.com>2024-11-26 22:55:13 -0700
commit7f5b64062ed975f856892d95e74b8d2f917ade66 (patch)
tree762b837c9fd461b8e1be5e852a3a560eeeda4d78 /src/Language/Fiddle/Compiler/Backend/C.hs
parent4f43488bdd32b610f7771dc01a12541fdb17b9af (diff)
downloadfiddle-7f5b64062ed975f856892d95e74b8d2f917ade66.tar.gz
fiddle-7f5b64062ed975f856892d95e74b8d2f917ade66.tar.bz2
fiddle-7f5b64062ed975f856892d95e74b8d2f917ade66.zip
Added syntax for skip_to and buffer.
buffer tells fiddle to create a buffer of a number of bytes. skip_to tells fiddle to skip to some new offset. It's essentially an unnamed buffer
Diffstat (limited to 'src/Language/Fiddle/Compiler/Backend/C.hs')
-rw-r--r--src/Language/Fiddle/Compiler/Backend/C.hs34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/Language/Fiddle/Compiler/Backend/C.hs b/src/Language/Fiddle/Compiler/Backend/C.hs
index e9989a0..4b4b3ea 100644
--- a/src/Language/Fiddle/Compiler/Backend/C.hs
+++ b/src/Language/Fiddle/Compiler/Backend/C.hs
@@ -42,8 +42,8 @@ newtype CBackendFlags = CBackendFlags
data SIntfF
= SIntfF
- { sIntfFValue :: Text,
- sIntfFComemnts :: FormattedWriter ()
+ { _sIntfFValue :: Text,
+ _sIntfFComemnts :: FormattedWriter ()
}
newtype SIntf
@@ -220,15 +220,6 @@ transpile
Text.replace "/" "_" $
Text.pack headerFile
-class IsText t where
- toText :: t -> Text
-
-instance IsText String where
- toText = Text.pack
-
-instance IsText Text where
- toText = id
-
qualifiedPathToIdentifier :: QualifiedPath String -> Text
qualifiedPathToIdentifier = Text.pack . qualifiedPathToString "__" "_"
@@ -400,8 +391,9 @@ writeBitsGet structName regmeta fullPath offset typeRef docComms = do
unless (null shiftArguments) $
text ", "
- text $ Text.intercalate ", " $
- zipWith (\f _ -> "int " <> f) (tail setterArgumentNames) shiftArguments
+ text $
+ Text.intercalate ", " $
+ zipWith (\f _ -> "int " <> f) (tail setterArgumentNames) shiftArguments
text ") {\n"
@@ -715,6 +707,20 @@ structBody structName (ObjTypeBody _ decls _) = do
checkout iF $
(if regIsUnnamed regMetadata then id else sIntfSingleton i)
<$> writeImplementation structName regMetadata mod bod ann
+ BufferDecl
+ { bufIdent = Guaranteed (identToString -> i),
+ bufSize = (trueValue -> size),
+ bufAnnot = ann
+ } -> do
+ textM $ do
+ emitDocComments ann
+ tell "uint8_t "
+ tell (Text.pack i)
+ tell "["
+ tell $ Text.pack (show size)
+ tell "];\n"
+
+ return mempty
TypeSubStructure
{ subStructureBody = Identity bod,
subStructureName = mname
@@ -864,7 +870,7 @@ emitEnum (qualifiedPathToIdentifier -> ident) consts = do
transpileWalk ::
FilePath ->
(forall t. (Walk t, Typeable t) => t I A -> () -> M (WalkContinuation ()))
-transpileWalk headerFile t _ = case () of
+transpileWalk _headerFile t _ = case () of
()
| Just
( ObjTypeDecl