enum conversion covers nested module items (resolves #70)

This commit is contained in:
Zachary Snow 2020-02-15 17:14:57 -05:00
parent 463cdcb2c1
commit 799141af42
3 changed files with 53 additions and 2 deletions

View File

@ -83,8 +83,9 @@ convergeUsage items enums =
(usedEnums, unusedEnums) = partition isUsed enums
enumItems = map MIPackageItem $ map toItem usedEnums
isUsed ((_, x), _) = Set.member x usedIdents
usedIdents = execWriter $
mapM (collectExprsM $ collectNestedExprsM collectIdent) $ items
usedIdents = execWriter $ mapM collectModuleItemM items
collectModuleItemM = collectNestedModuleItemsM $ collectExprsM $
collectNestedExprsM collectIdent
collectIdent :: Expr -> Writer Idents ()
collectIdent (Ident x) = tell $ Set.singleton x
collectIdent _ = return ()

View File

@ -35,6 +35,14 @@ typedef enum int {
I_1, I_2
} EnumI;
typedef enum int {
J_1, J_2, J_3
} EnumJ;
typedef enum int {
Z_1, Z_2, Z_3
} EnumZ;
`define PRINT(name, val) \
dummy``name = name``_``val; \
$display("%h %h %0d %0d", \
@ -94,4 +102,25 @@ module top;
`PRINT_UNSIZED(I, 2)
end
parameter USE_J = 1;
generate
if (USE_J) begin
EnumJ dummyJ;
initial begin
`PRINT(J, 1)
`PRINT(J, 2)
`PRINT(J, 3)
end
end
else begin
EnumZ dummyZ;
initial begin
`PRINT(Z, 1)
`PRINT(Z, 2)
`PRINT(Z, 3)
end
end
endgenerate
endmodule

View File

@ -58,5 +58,26 @@ module top;
`PRINT_UNSIZED(I, 'b1)
end
parameter USE_J = 1;
generate
if (USE_J) begin
reg [31:0] dummyJ;
initial begin
`PRINT(J, 0)
`PRINT(J, 1)
`PRINT(J, 2)
end
end
else begin
reg [31:0] dummyZ;
initial begin
`PRINT(Z, 0)
`PRINT(Z, 1)
`PRINT(Z, 2)
end
end
endgenerate
endmodule