// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2023 Antmicro Ltd
// SPDX-License-Identifier: CC0-1.0

class Baz;
endclass

class Bar #(
    type T
) extends T;
endclass

class Foo;
  typedef struct {int field;} Zee;

  task t1();
    // Refer to Baz CLASSREFDTYPE node in implementation (via CLASSEXTENDS)
    Bar #(Baz) b = new;
  endtask
  // Refer to the very same Baz CLASSREFDTYPE node again, this time within interface
  task t2(Bar#(Baz)::T b);
  endtask
endclass

class Moo;
  // Use Foo::Zee to cause inclusion of Foo's header file
  Foo::Zee z;
endclass

module t;
  initial begin
    // Use Moo in top module to add Moo to root, causing inclusion of Foo header into
    // root header.
    Moo moo;
    moo = new;
  end
endmodule
