diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-11-27 13:16:06 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-11-27 13:16:06 -0700 |
commit | 673c99472da3de2d52bd29fec91978166f008766 (patch) | |
tree | b51e2f7f1ff2bb935ac1461f808d67c006235821 /src/Language/Fiddle/Compiler/Qualification.hs | |
parent | 83cfdf2bd4f9815a67576a0e34ef8b2bf19492aa (diff) | |
download | fiddle-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.hs | 21 |
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 |