diff --git a/src/Language/SystemVerilog/Parser/Parse.y b/src/Language/SystemVerilog/Parser/Parse.y index 50893d6..2b6c651 100644 --- a/src/Language/SystemVerilog/Parser/Parse.y +++ b/src/Language/SystemVerilog/Parser/Parse.y @@ -421,6 +421,7 @@ time { Token Lit_time _ _ } %left "*" "/" "%" %left "**" %right REDUCE_OP "!" "~" "++" "--" +%left "'" %left "(" ")" "[" "]" "." "::" %% @@ -1140,13 +1141,10 @@ Expr :: { Expr } | "{" Expr Concat "}" { Repeat $2 $3 } | Concat { Concat $1 } | Expr "?" Expr ":" Expr { Mux $1 $3 $5 } - | CastingType "'" "(" Expr ")" { Cast (Left $1) $4 } - | Number "'" "(" Expr ")" { Cast (Right $ Number $1) $4 } - | "(" Expr ")" "'""(" Expr ")" { Cast (Right $2) $6 } - | Identifier "'" "(" Expr ")" { Cast (Right $ Ident $1 ) $4 } - | Identifier "::" Identifier "'" "(" Expr ")" { Cast (Right $ PSIdent $1 $3) $6 } | Expr "." Identifier { Dot $1 $3 } | "'" "{" PatternItems "}" { Pattern $3 } + | CastingType "'" "(" Expr ")" { Cast (Left $1) $4 } + | Expr "'" "(" Expr ")" { Cast (Right $1) $4 } | "{" StreamOp StreamSize Concat "}" { Stream $2 $3 $4 } | "{" StreamOp Concat "}" { Stream $2 (Number "1") $3 } | Expr "inside" "{" OpenRangeList "}" { Inside $1 $4 } diff --git a/test/basic/size_cast.sv b/test/basic/size_cast.sv index e4f1084..df2f656 100644 --- a/test/basic/size_cast.sv +++ b/test/basic/size_cast.sv @@ -1,6 +1,15 @@ module top; localparam BW = 3; logic [2:0] test; - assign test = BW'(0); - initial #1 $display(test); + logic [3:0] foo; + logic [3:0] bar; + + initial begin + test = BW'(0); + $display(test); + foo = 2'('1); + $display(foo); + bar = $bits(bar)'('1); + $display(bar); + end endmodule diff --git a/test/basic/size_cast.v b/test/basic/size_cast.v index 52a31a3..0b61987 100644 --- a/test/basic/size_cast.v +++ b/test/basic/size_cast.v @@ -1,6 +1,14 @@ module top; - localparam BW = 3; - wire [2:0] test; - assign test = 0; - initial #1 $display(test); + reg [2:0] test; + reg [3:0] foo; + reg [3:0] bar; + + initial begin + test = 0; + $display(test); + foo = 4'b0011; + $display(foo); + bar = 4'b1111; + $display(bar); + end endmodule