From 673c99472da3de2d52bd29fec91978166f008766 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Wed, 27 Nov 2024 13:16:06 -0700 Subject: Add metadata information to the BitsSubStructure and compile it correctly. --- src/Language/Fiddle/Compiler/Qualification.hs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/Language/Fiddle/Compiler/Qualification.hs') 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 -- cgit