Fix 'this' in extern functions.

This commit is contained in:
Wilson Snyder 2020-11-26 08:28:53 -05:00
parent ffbae97a3d
commit ad21f2e850
2 changed files with 20 additions and 12 deletions

View File

@ -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) {

View File

@ -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