From 57d6d2e9e8dc382664d74b14ada1b001e1c7f70f Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sat, 20 Apr 2024 13:39:54 -0400 Subject: [PATCH] restore positive Decimal invariant --- src/Convert/SeverityTask.hs | 2 +- src/Language/SystemVerilog/AST/Number.hs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Convert/SeverityTask.hs b/src/Convert/SeverityTask.hs index b015865..aa9a772 100644 --- a/src/Convert/SeverityTask.hs +++ b/src/Convert/SeverityTask.hs @@ -23,7 +23,7 @@ convert = map $ traverseDescriptions traverseDescription elaborationFatalIdent :: Identifier elaborationFatalIdent = "_sv2v_elaboration_fatal" elaborationFatalCancelCode :: Expr -elaborationFatalCancelCode = RawNum (-1) +elaborationFatalCancelCode = UniOp UniSub $ RawNum 1 -- Checker for fatal elaboration elaborationFatalDecl :: ModuleItem diff --git a/src/Language/SystemVerilog/AST/Number.hs b/src/Language/SystemVerilog/AST/Number.hs index ebaecb6..6744590 100644 --- a/src/Language/SystemVerilog/AST/Number.hs +++ b/src/Language/SystemVerilog/AST/Number.hs @@ -322,7 +322,7 @@ numberBitLength (Based size _ _ _ _) = then max 32 $ negate size else size --- get whether or not a number is sized +-- get whether or not a number is signed numberIsSized :: Number -> Bool numberIsSized UnbasedUnsized{} = False numberIsSized (Decimal size _ _) = size > 0 @@ -359,7 +359,9 @@ instance Show Number where show (UnbasedUnsized bit) = '\'' : show bit show (Decimal (-32) True value) = - show value + if value < 0 + then error $ "illegal decimal: " ++ show value + else show value show (Decimal size signed value) = if size == 0 then error $ "illegal decimal literal: "