mirror of
https://github.com/verilator/verilator.git
synced 2025-01-19 12:54:02 +00:00
parent
84a46939b3
commit
08330bad0b
@ -231,6 +231,9 @@ private:
|
||||
nodep->v3warn(STATICVAR, "Static variable with assignment declaration declared in a "
|
||||
"loop converted to automatic");
|
||||
}
|
||||
if (m_ftaskp && m_ftaskp->classMethod() && nodep->lifetime().isNone()) {
|
||||
nodep->lifetime(VLifetime::AUTOMATIC);
|
||||
}
|
||||
if (nodep->lifetime().isNone() && nodep->varType() != VVarType::PORT) {
|
||||
nodep->lifetime(m_lifetime);
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ typedef cls_t cls2_t;
|
||||
|
||||
class Singleton #(type T=int);
|
||||
static function Singleton#(T) self;
|
||||
Singleton#(T) c = new;
|
||||
static Singleton#(T) c = new;
|
||||
return c;
|
||||
endfunction
|
||||
function int get_size;
|
||||
@ -39,7 +39,7 @@ endclass
|
||||
|
||||
class SingletonUnusedDefault #(type T=int);
|
||||
static function SingletonUnusedDefault#(T) self;
|
||||
SingletonUnusedDefault#(T) c = new;
|
||||
static SingletonUnusedDefault#(T) c = new;
|
||||
return c;
|
||||
endfunction
|
||||
endclass
|
||||
|
21
test_regress/t/t_static_function_in_class.pl
Executable file
21
test_regress/t/t_static_function_in_class.pl
Executable file
@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env perl
|
||||
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||
#
|
||||
# Copyright 2003 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
|
||||
|
||||
scenarios(simulator => 1);
|
||||
|
||||
compile(
|
||||
);
|
||||
|
||||
execute(
|
||||
check_finished => 1,
|
||||
);
|
||||
|
||||
ok(1);
|
||||
1;
|
51
test_regress/t/t_static_function_in_class.v
Normal file
51
test_regress/t/t_static_function_in_class.v
Normal file
@ -0,0 +1,51 @@
|
||||
// DESCRIPTION: Verilator: Simple static elaboration case
|
||||
//
|
||||
// This file ONLY is placed into the Public Domain, for any use,
|
||||
// without warranty, 2015 by Todd Strader.
|
||||
// SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
class string_utils;
|
||||
typedef string array_of_string[];
|
||||
|
||||
static function array_of_string split_by_dash(string s);
|
||||
string parts[$];
|
||||
int last_char_position = -1;
|
||||
for (int i = 0; i < s.len(); i++) begin
|
||||
if (i == s.len()-1) begin
|
||||
parts.push_back(s.substr(last_char_position+1, i));
|
||||
end
|
||||
// Can't remove this, because then the code will work
|
||||
if (string'(s[i]) == "-") begin
|
||||
parts.push_back(s.substr(last_char_position+1, i-1));
|
||||
last_char_position = i;
|
||||
end
|
||||
end // for (int i = 0; i < s.len(); i++)
|
||||
return parts;
|
||||
endfunction // split_by_dash
|
||||
endclass // string_utils
|
||||
|
||||
class filter;
|
||||
local static filter single_instance;
|
||||
|
||||
static function filter get();
|
||||
if (single_instance == null)
|
||||
single_instance = new();
|
||||
return single_instance;
|
||||
endfunction // get
|
||||
|
||||
local function new();
|
||||
string parts[] = string_utils::split_by_dash("*");
|
||||
if (parts.size() != 1)
|
||||
$fatal(0, "Expected single element");
|
||||
if (parts[0] != "*")
|
||||
$fatal(0, "Expected element to be *");
|
||||
endfunction // new
|
||||
endclass // filter
|
||||
|
||||
module t (/*AUTOARG*/);
|
||||
const filter _filter = filter::get();
|
||||
initial begin
|
||||
$write("*-* All Finished *-*\n");
|
||||
$finish();
|
||||
end
|
||||
endmodule
|
Loading…
Reference in New Issue
Block a user