2022-01-15 20:27:02 +01:00
|
|
|
// Check that when a enum type is declared inside a class that the enum is
|
|
|
|
|
// properly installed in the scope and the enum items are available.
|
|
|
|
|
//
|
|
|
|
|
// Also check that when using a typedef of a enum inside a class that the enum
|
|
|
|
|
// is not elaborated inside the class and it is possible to have a enum with the
|
|
|
|
|
// same names inside the class scope.
|
|
|
|
|
|
|
|
|
|
module test;
|
|
|
|
|
|
|
|
|
|
typedef enum integer {
|
|
|
|
|
A = 1
|
|
|
|
|
} e1_t;
|
|
|
|
|
|
|
|
|
|
class C;
|
|
|
|
|
typedef enum integer {
|
|
|
|
|
A = 10
|
|
|
|
|
} e2_t;
|
|
|
|
|
e1_t e1;
|
|
|
|
|
e2_t e2;
|
|
|
|
|
|
|
|
|
|
function new();
|
|
|
|
|
e1 = test.A;
|
|
|
|
|
e2 = A;
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function void set(e2_t new_e2);
|
|
|
|
|
e2 = new_e2;
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
endclass
|
|
|
|
|
|
|
|
|
|
C c;
|
|
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
|
c = new;
|
|
|
|
|
c.e1 = A;
|
|
|
|
|
c.set(c.e2);
|
|
|
|
|
|
|
|
|
|
// Not yet supported
|
|
|
|
|
// c.e2 = C::A;
|
2022-02-19 12:58:27 +01:00
|
|
|
c.e2 = c.A;
|
2022-01-15 20:27:02 +01:00
|
|
|
|
|
|
|
|
// Check that they have the numerical value from the right scope
|
|
|
|
|
if (c.e1 == 1 && c.e2 == 10) begin
|
|
|
|
|
$display("PASSED");
|
|
|
|
|
end else begin
|
|
|
|
|
$display("FAILED");
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
endmodule
|