From a863321dd73ff22cb0e3ba44858c83d45e369102 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Tue, 6 Jul 2021 21:20:44 -0400 Subject: [PATCH] combine handling of concatenation LHSs --- src/Language/SystemVerilog/Parser/Parse.y | 18 ++++++++++-------- src/Language/SystemVerilog/Parser/ParseDecl.hs | 11 ++++------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/Language/SystemVerilog/Parser/Parse.y b/src/Language/SystemVerilog/Parser/Parse.y index 5ee5190..60fa289 100644 --- a/src/Language/SystemVerilog/Parser/Parse.y +++ b/src/Language/SystemVerilog/Parser/Parse.y @@ -642,7 +642,8 @@ DeclToken :: { DeclToken } | PartSelectP { uncurry (DTRange $ fst $1) (snd $1) } | IdentifierP { uncurry DTIdent $1 } | DirectionP { uncurry DTDir $1 } - | LHSConcatP { uncurry DTConcat $1 } + | LHSConcatP { uncurry DTLHSBase $1 } + | LHSStreamP { uncurry DTLHSBase $1 } | PartialTypeP { uncurry DTType $1 } | NetTypeP Strength { uncurry DTNet $1 $2 } | PortBindingsP { uncurry DTPorts $1 } @@ -650,8 +651,6 @@ DeclToken :: { DeclToken } | "[" Expr "]" { DTBit (tokenPosition $1) $2 } | "." Identifier { DTDot (tokenPosition $1) $2 } | "automatic" { DTLifetime (tokenPosition $1) Automatic } - | "{" StreamOp StreamSize Concat "}" { DTStream (tokenPosition $1) $2 $3 (map toLHS $4) } - | "{" StreamOp Concat "}" { DTStream (tokenPosition $1) $2 (RawNum 1) (map toLHS $3) } | "type" "(" Expr ")" { uncurry DTType $ makeTypeOf $1 $3 } | IncOrDecOperatorP { DTAsgn (fst $1) (AsgnOp $ snd $1) Nothing (RawNum 1) } | IdentifierP "::" Identifier { uncurry DTPSIdent $1 $3 } @@ -990,12 +989,15 @@ LHS :: { LHS } | LHS PartSelectP { uncurry (LHSRange $1) (snd $2) } | LHS "[" Expr "]" { LHSBit $1 $3 } | LHS "." Identifier { LHSDot $1 $3 } - | LHSConcatP { LHSConcat $ snd $1 } - | "{" StreamOp StreamSize Concat "}" { LHSStream $2 $3 (map toLHS $4) } - | "{" StreamOp Concat "}" { LHSStream $2 (RawNum 1) (map toLHS $3) } + | LHSConcatP { snd $1 } + | LHSStreamP { snd $1 } -LHSConcatP :: { (Position, [LHS]) } - : "{" LHSs "}" { withPos $1 $2 } +LHSStreamP :: { (Position, LHS) } + : "{" StreamOp StreamSize Concat "}" { withPos $1 $ LHSStream $2 $3 (map toLHS $4) } + | "{" StreamOp Concat "}" { withPos $1 $ LHSStream $2 (RawNum 1) (map toLHS $3) } + +LHSConcatP :: { (Position, LHS) } + : "{" LHSs "}" { withPos $1 $ LHSConcat $2 } LHSs :: { [LHS] } : LHS { [$1] } | LHSs "," LHS { $1 ++ [$3] } diff --git a/src/Language/SystemVerilog/Parser/ParseDecl.hs b/src/Language/SystemVerilog/Parser/ParseDecl.hs index 99215ce..88d2fa2 100644 --- a/src/Language/SystemVerilog/Parser/ParseDecl.hs +++ b/src/Language/SystemVerilog/Parser/ParseDecl.hs @@ -66,8 +66,7 @@ data DeclToken | DTParams Position [ParamBinding] | DTPorts Position [PortBinding] | DTBit Position Expr - | DTConcat Position [LHS] - | DTStream Position StreamOp Expr [LHS] + | DTLHSBase Position LHS | DTDot Position Identifier | DTSigning Position Signing | DTLifetime Position Lifetime @@ -357,9 +356,8 @@ takeLHS tokens = takeLHSStep (takeLHSStart tok) toks where tok : toks = tokens takeLHSStart :: DeclToken -> LHS -takeLHSStart (DTConcat _ lhss) = LHSConcat lhss -takeLHSStart (DTStream _ o e lhss) = LHSStream o e lhss -takeLHSStart (DTIdent _ x ) = LHSIdent x +takeLHSStart (DTLHSBase _ lhs) = lhs +takeLHSStart (DTIdent _ x) = LHSIdent x takeLHSStart tok = parseError tok "expected primary token or type" takeLHSStep :: LHS -> [DeclToken] -> (LHS, [DeclToken]) @@ -580,8 +578,7 @@ tokPos (DTNet p _ _) = p tokPos (DTParams p _) = p tokPos (DTPorts p _) = p tokPos (DTBit p _) = p -tokPos (DTConcat p _) = p -tokPos (DTStream p _ _ _) = p +tokPos (DTLHSBase p _) = p tokPos (DTDot p _) = p tokPos (DTSigning p _) = p tokPos (DTLifetime p _) = p