diff --git a/test_regress/t/t_class_new_scoped.out b/test_regress/t/t_class_new_scoped.out new file mode 100644 index 000000000..2e1ac485d --- /dev/null +++ b/test_regress/t/t_class_new_scoped.out @@ -0,0 +1,13 @@ +%Error: t/t_class_new_scoped.v:45:21: syntax error, unexpected new, expecting IDENTIFIER-for-type + 45 | b = ClsNoArg::new; + | ^~~ +%Error: t/t_class_new_scoped.v:50:19: syntax error, unexpected new-then-paren, expecting IDENTIFIER-for-type + 50 | b = ClsArg::new(20, 1); + | ^~~ +%Error: t/t_class_new_scoped.v:55:27: syntax error, unexpected new-then-paren, expecting IDENTIFIER-for-type + 55 | b = ClsParam#(100)::new(33); + | ^~~ +%Error: t/t_class_new_scoped.v:60:27: syntax error, unexpected new-then-paren, expecting IDENTIFIER-for-type + 60 | b = ClsParam#(200)::new(44); + | ^~~ +%Error: Exiting due to diff --git a/test_regress/t/t_class_new_scoped.py b/test_regress/t/t_class_new_scoped.py new file mode 100755 index 000000000..e33e10acf --- /dev/null +++ b/test_regress/t/t_class_new_scoped.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +# DESCRIPTION: Verilator: Verilog Test driver/expect definition +# +# Copyright 2024 by Wilson Snyder. This program is free software; you +# can redistribute it and/or modify it under the terms of either the GNU +# Lesser General Public License Version 3 or the Perl Artistic License +# Version 2.0. +# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 + +import vltest_bootstrap + +test.scenarios('vlt') + +test.lint(fails=True, expect_filename=test.golden_filename) + +test.passes() diff --git a/test_regress/t/t_class_new_scoped.v b/test_regress/t/t_class_new_scoped.v new file mode 100644 index 000000000..e1c5d1f65 --- /dev/null +++ b/test_regress/t/t_class_new_scoped.v @@ -0,0 +1,66 @@ +// DESCRIPTION: Verilator: Verilog Test module +// +// This file ONLY is placed under the Creative Commons Public Domain, for +// any use, without warranty, 2024 by Wilson Snyder. +// SPDX-License-Identifier: CC0-1.0 + +`define stop $stop +`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0); + +class Base; + int imembera = 10; + function new(int i); + imembera = i; + endfunction +endclass + +class ClsNoArg extends Base; + function new(); + super.new(5); + endfunction : new +endclass + +class ClsArg extends Base; + function new(int i, int j); + super.new(i + j); + endfunction +endclass + +class ClsParam #(int ADD = 100) extends Base; + function new(int def = 42); + super.new(def + ADD); + endfunction +endclass + +module t (/*AUTOARG*/); + initial begin + Base b; + ClsNoArg c1; + ClsArg c2; + ClsParam#(100) c3; + ClsParam#(200) c4; + + c1 = new; + `checkd(c1.imembera, 5); + b = ClsNoArg::new; + `checkd(b.imembera, 5); + + c2 = new(20, 1); + `checkd(c2.imembera, 21); + b = ClsArg::new(20, 1); + `checkd(b.imembera, 21); + + c3 = new(33); + `checkd(c3.imembera, 133); + b = ClsParam#(100)::new(33); + `checkd(b.imembera, 133); + + c4 = new(44); + `checkd(c4.imembera, 244); + b = ClsParam#(200)::new(44); + `checkd(b.imembera, 244); + + $write("*-* All Finished *-*\n"); + $finish; + end +endmodule