verilator/test_regress/t/t_class_super_new.v
2023-07-17 13:30:42 +02:00

159 lines
3.2 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2023 by Antmicro Ltd.
// SPDX-License-Identifier: CC0-1.0
`define stop $stop
`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
class Foo;
int x;
function new;
this.x = 10;
endfunction
endclass
class Bar extends Foo;
function new;
super.new;
endfunction
endclass
class BarUnusedArg extends Foo;
function new (int a);
super.new;
endfunction
endclass
class FooArg;
int x;
function new (int a);
this.x = a;
endfunction
endclass
class BarArg extends FooArg;
function new (int a);
super.new(a);
endfunction
endclass
class BarArgWithReturnInIf extends FooArg;
function new (int a);
super.new(a);
if (a < 10) begin
return;
end
this.x = 20;
endfunction
endclass
class BarExpr extends FooArg;
function new (int a, string b);
super.new(a + b.len());
endfunction
endclass
class Foo2Args;
int x;
function new (int a, int b);
this.x = a + b;
endfunction
endclass
class Bar2Args extends Foo2Args;
function new (int a, int b);
super.new(a, b);
endfunction
endclass
class OptArgInNew;
int x;
function new (int y=1);
x = y;
endfunction
endclass
class NoNew extends OptArgInNew;
endclass
class NewWithoutSuper extends OptArgInNew;
function new;
endfunction
endclass
class OptArgInNewParam #(parameter int P=1);
int x;
function new (int y=1);
x = y;
endfunction
endclass
class NoNewParam#(parameter int R) extends OptArgInNewParam#(R);
endclass
class NewWithoutSuperParam#(parameter int R) extends OptArgInNewParam#();
function new;
endfunction
endclass
module t (/*AUTOARG*/
);
class FooInModule;
int x;
function new;
this.x = 15;
endfunction
endclass
class BarInModule extends FooInModule;
function new;
super.new;
endfunction
endclass
Bar bar;
BarInModule barInModule;
BarUnusedArg barUnusedArg;
BarArg barArg;
BarExpr barExpr;
Bar2Args bar2Args;
NoNew noNew;
NewWithoutSuper newWithoutSuper;
NoNewParam#(2) noNewParam;
NewWithoutSuperParam#(1) newWithoutSuperParam;
BarArgWithReturnInIf barIf1, barIf10;
initial begin
bar = new;
`checkh(bar.x, 10);
barInModule = new;
`checkh(barInModule.x, 15);
barUnusedArg = new(2);
`checkh(barUnusedArg.x, 10);
barArg = new(2);
`checkh(barArg.x, 2);
barExpr = new (7, "ABCDEFGHI");
`checkh(barExpr.x, 16);
bar2Args = new(2, 12);
`checkh(bar2Args.x, 14);
noNew = new;
`checkh(noNew.x, 1);
newWithoutSuper = new;
`checkh(newWithoutSuper.x, 1);
noNewParam = new;
`checkh(noNewParam.x, 1);
newWithoutSuperParam = new;
`checkh(newWithoutSuperParam.x, 1);
barIf1 = new(1);
`checkh(barIf1.x, 1);
barIf10 = new(10);
`checkh(barIf10.x, 20);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule