diff options
Diffstat (limited to 'src/Language/Fiddle/Compiler/ConsistencyCheck.hs')
-rw-r--r-- | src/Language/Fiddle/Compiler/ConsistencyCheck.hs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/Language/Fiddle/Compiler/ConsistencyCheck.hs b/src/Language/Fiddle/Compiler/ConsistencyCheck.hs index 3def59d..00a53dc 100644 --- a/src/Language/Fiddle/Compiler/ConsistencyCheck.hs +++ b/src/Language/Fiddle/Compiler/ConsistencyCheck.hs @@ -156,25 +156,33 @@ advanceObjTypeBody (ObjTypeBody us decls a) startOffset = do checkPositionAssertion (annot e) assertedPos offset return (ret, offset) (RegisterDecl qmeta mod ident size Nothing a) -> do - (sizeExpr, reifiedSize) <- advanceAndGetSize size - reifiedSizeBytes <- checkBitsSizeMod8 a reifiedSize + let declaredSize = regSzToBits (getLeft size) + reifiedSizeBytes <- checkBitsSizeMod8 a declaredSize let span = Present (FieldSpan offset reifiedSizeBytes) qmeta' = fmap (\q -> q {regSpan = span}) qmeta - doReturn (RegisterDecl qmeta' mod ident sizeExpr Nothing a) - =<< checkBitsSizeMod8 a reifiedSize + doReturn (RegisterDecl qmeta' mod ident (changeRight size) Nothing a) + =<< checkBitsSizeMod8 a declaredSize (RegisterDecl qmeta mod ident size (Just body) a) -> do - declaredSize <- expressionToIntM size - (actualSize, body') <- advanceRegisterBody 0 body + let declaredSize = regSzToBits (getLeft size) + (actualSize, body') <- advanceRegisterBody 0 body checkSizeMismatch a declaredSize actualSize - - (sizeExpr, reifiedSize) <- advanceAndGetSize size - reifiedSizeBytes <- checkBitsSizeMod8 a reifiedSize + reifiedSizeBytes <- checkBitsSizeMod8 a declaredSize let span = Present (FieldSpan offset reifiedSizeBytes) qmeta' = fmap (\q -> q {regSpan = span}) qmeta - doReturn (RegisterDecl qmeta' mod ident sizeExpr (Just body') a) reifiedSizeBytes + + doReturn + ( RegisterDecl + qmeta' + mod + ident + (changeRight size) + (Just body') + a + ) + reifiedSizeBytes (TypeSubStructure (Identity body) name a) -> do (size, body') <- advanceObjTypeBody body offset doReturn (TypeSubStructure (Identity body') name a) size |