mirror of
https://github.com/verilator/verilator.git
synced 2025-01-22 14:24:18 +00:00
Fix 'this' in extern functions.
This commit is contained in:
parent
ffbae97a3d
commit
ad21f2e850
@ -2024,7 +2024,7 @@ private:
|
||||
if (VN_IS(nodep->lhsp(), ParseRef) && nodep->lhsp()->name() == "this") {
|
||||
VSymEnt* classSymp = m_ds.m_dotSymp;
|
||||
do {
|
||||
classSymp = classSymp->fallbackp();
|
||||
classSymp = classSymp->parentp();
|
||||
} while (classSymp && !VN_IS(classSymp->nodep(), Class));
|
||||
m_ds.m_dotSymp = classSymp;
|
||||
if (!classSymp) {
|
||||
|
@ -4,31 +4,39 @@
|
||||
// any use, without warranty, 2020 Rafal Kapuscik
|
||||
// SPDX-License-Identifier: CC0-1.0
|
||||
//
|
||||
class foo;
|
||||
class Cls;
|
||||
bit [3:0] addr;
|
||||
function void set (bit [3:0] addr);
|
||||
function void set(bit [3:0] addr);
|
||||
begin : body
|
||||
this.addr = addr;
|
||||
end : body
|
||||
endfunction
|
||||
extern function void setext(bit [3:0] addr);
|
||||
endclass
|
||||
|
||||
function void Cls::setext(bit [3:0] addr);
|
||||
this.addr = addr;
|
||||
endfunction
|
||||
|
||||
module t(/*AUTOARG*/
|
||||
// Inputs
|
||||
clk
|
||||
);
|
||||
input clk;
|
||||
foo bar;
|
||||
foo baz;
|
||||
Cls bar;
|
||||
Cls baz;
|
||||
initial begin
|
||||
bar = new();
|
||||
baz = new();
|
||||
bar.set(4);
|
||||
bar = new();
|
||||
baz = new();
|
||||
bar.set(4);
|
||||
`ifdef TEST_VERBOSE
|
||||
$display(bar.addr);
|
||||
$display(baz.addr);
|
||||
$display(bar.addr);
|
||||
$display(baz.addr);
|
||||
`endif
|
||||
$write("*-* All Finished *-*\n");
|
||||
$finish;
|
||||
if (bar.addr != 4) $stop;
|
||||
bar.setext(2);
|
||||
if (bar.addr != 2) $stop;
|
||||
$write("*-* All Finished *-*\n");
|
||||
$finish;
|
||||
end
|
||||
endmodule
|
||||
|
Loading…
Reference in New Issue
Block a user