summaryrefslogtreecommitdiff
path: root/src/Language/Fiddle/Compiler/Qualification.hs
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-11-27 13:16:06 -0700
committerJosh Rahm <joshuarahm@gmail.com>2024-11-27 13:16:06 -0700
commit673c99472da3de2d52bd29fec91978166f008766 (patch)
treeb51e2f7f1ff2bb935ac1461f808d67c006235821 /src/Language/Fiddle/Compiler/Qualification.hs
parent83cfdf2bd4f9815a67576a0e34ef8b2bf19492aa (diff)
downloadfiddle-673c99472da3de2d52bd29fec91978166f008766.tar.gz
fiddle-673c99472da3de2d52bd29fec91978166f008766.tar.bz2
fiddle-673c99472da3de2d52bd29fec91978166f008766.zip
Add metadata information to the BitsSubStructure and compile it correctly.
Diffstat (limited to 'src/Language/Fiddle/Compiler/Qualification.hs')
-rw-r--r--src/Language/Fiddle/Compiler/Qualification.hs21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/Language/Fiddle/Compiler/Qualification.hs b/src/Language/Fiddle/Compiler/Qualification.hs
index 8bae2de..ac99f48 100644
--- a/src/Language/Fiddle/Compiler/Qualification.hs
+++ b/src/Language/Fiddle/Compiler/Qualification.hs
@@ -159,9 +159,21 @@ deriving instance AdvanceStage S EnumConstantDecl
instance AdvanceStage S RegisterBitsDecl where
advanceStage localState = \case
ReservedBits expr an -> ReservedBits <$> advanceStage localState expr <*> pure an
- BitsSubStructure bod name an ->
- BitsSubStructure
- <$> advanceStage localState bod
+ BitsSubStructure Vacant mod bod name an -> do
+ let (path, localState') =
+ maybe
+ (fmap (const "") (currentQualifiedPath localState), localState)
+ ( \ident -> pushRegister (identToString ident) localState
+ )
+ name
+ qMeta =
+ QBitsMetadata
+ { bitsSpan = Vacant,
+ bitsFullPath = path,
+ bitsUnnamed = isNothing name
+ }
+ BitsSubStructure (Present qMeta) (guarantee (ModifierKeyword Rw an) mod)
+ <$> advanceStage localState' bod
<*> pure name
<*> pure an
DefinedBits _ mod ident typ an -> do
@@ -169,7 +181,8 @@ instance AdvanceStage S RegisterBitsDecl where
qMeta =
QBitsMetadata
{ bitsSpan = Vacant,
- bitsFullPath = path
+ bitsFullPath = path,
+ bitsUnnamed = False
}
DefinedBits (Present qMeta) (guarantee (ModifierKeyword Rw an) mod) ident
<$> advanceStage localState typ