Pass lexical position information to PTrigger and PNBTrigger objects.

This commit is contained in:
Martin Whitaker 2024-02-19 10:30:32 +00:00
parent cd76bd2371
commit 1c28948484
6 changed files with 26 additions and 22 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998-2021 Stephen Williams (steve@icarus.com)
* Copyright (c) 1998-2024 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -396,8 +396,8 @@ PReturn::~PReturn()
delete expr_;
}
PTrigger::PTrigger(PPackage*pkg, const pform_name_t&ev)
: event_(pkg, ev)
PTrigger::PTrigger(PPackage*pkg, const pform_name_t&ev, unsigned lexical_pos)
: event_(pkg, ev), lexical_pos_(lexical_pos)
{
}
@ -405,8 +405,8 @@ PTrigger::~PTrigger()
{
}
PNBTrigger::PNBTrigger(const pform_name_t&ev, PExpr*dly)
: event_(ev), dly_(dly)
PNBTrigger::PNBTrigger(const pform_name_t&ev, unsigned lexical_pos, PExpr*dly)
: event_(ev), lexical_pos_(lexical_pos), dly_(dly)
{
}

View File

@ -1,7 +1,7 @@
#ifndef IVL_Statement_H
#define IVL_Statement_H
/*
* Copyright (c) 1998-2021 Stephen Williams (steve@icarus.com)
* Copyright (c) 1998-2024 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -599,7 +599,7 @@ class PReturn : public Statement {
class PTrigger : public Statement {
public:
explicit PTrigger(PPackage*pkg, const pform_name_t&ev);
explicit PTrigger(PPackage*pkg, const pform_name_t&ev, unsigned lexical_pos);
~PTrigger();
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
@ -607,11 +607,12 @@ class PTrigger : public Statement {
private:
pform_scoped_name_t event_;
unsigned lexical_pos_;
};
class PNBTrigger : public Statement {
public:
explicit PNBTrigger(const pform_name_t&ev, PExpr*dly);
explicit PNBTrigger(const pform_name_t&ev, unsigned lexical_pos, PExpr*dly);
~PNBTrigger();
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
@ -619,6 +620,7 @@ class PNBTrigger : public Statement {
private:
pform_name_t event_;
unsigned lexical_pos_;
PExpr*dly_;
};

View File

@ -6038,7 +6038,7 @@ NetProc* PTrigger::elaborate(Design*des, NetScope*scope) const
ivl_assert(*this, scope);
symbol_search_results sr;
if (!symbol_search(this, des, scope, event_, UINT_MAX, &sr)) {
if (!symbol_search(this, des, scope, event_, lexical_pos_, &sr)) {
cerr << get_fileline() << ": error: event <" << event_ << ">"
<< " not found." << endl;
des->errors += 1;
@ -6062,7 +6062,7 @@ NetProc* PNBTrigger::elaborate(Design*des, NetScope*scope) const
ivl_assert(*this, scope);
symbol_search_results sr;
if (!symbol_search(this, des, scope, event_, UINT_MAX, &sr)) {
if (!symbol_search(this, des, scope, event_, lexical_pos_, &sr)) {
cerr << get_fileline() << ": error: event <" << event_ << ">"
<< " not found." << endl;
des->errors += 1;

12
parse.y
View File

@ -6766,35 +6766,35 @@ statement_item /* This is roughly statement_item in the LRM */
$$ = tmp;
}
| K_TRIGGER hierarchy_identifier ';'
{ PTrigger*tmp = pform_new_trigger(@2, 0, *$2);
{ PTrigger*tmp = pform_new_trigger(@2, 0, *$2, @2.lexical_pos);
delete $2;
$$ = tmp;
}
| K_TRIGGER package_scope hierarchy_identifier
{ lex_in_package_scope(0);
PTrigger*tmp = pform_new_trigger(@3, $2, *$3);
PTrigger*tmp = pform_new_trigger(@3, $2, *$3, @3.lexical_pos);
delete $3;
$$ = tmp;
}
/* FIXME: Does this need support for package resolution like above? */
| K_NB_TRIGGER hierarchy_identifier ';'
{ PNBTrigger*tmp = pform_new_nb_trigger(@2, 0, *$2);
{ PNBTrigger*tmp = pform_new_nb_trigger(@2, 0, *$2, @2.lexical_pos);
delete $2;
$$ = tmp;
}
| K_NB_TRIGGER delay1 hierarchy_identifier ';'
{ PNBTrigger*tmp = pform_new_nb_trigger(@3, $2, *$3);
{ PNBTrigger*tmp = pform_new_nb_trigger(@3, $2, *$3, @3.lexical_pos);
delete $3;
$$ = tmp;
}
| K_NB_TRIGGER event_control hierarchy_identifier ';'
{ PNBTrigger*tmp = pform_new_nb_trigger(@3, 0, *$3);
{ PNBTrigger*tmp = pform_new_nb_trigger(@3, 0, *$3, @3.lexical_pos);
delete $3;
$$ = tmp;
yywarn(@1, "sorry: ->> with event control is not currently supported.");
}
| K_NB_TRIGGER K_repeat '(' expression ')' event_control hierarchy_identifier ';'
{ PNBTrigger*tmp = pform_new_nb_trigger(@7, 0, *$7);
{ PNBTrigger*tmp = pform_new_nb_trigger(@7, 0, *$7, @7.lexical_pos);
delete $7;
$$ = tmp;
yywarn(@1, "sorry: ->> with repeat event control is not currently supported.");

View File

@ -712,19 +712,20 @@ PEIdent* pform_new_ident(const struct vlltype&loc, const pform_name_t&name)
}
PTrigger* pform_new_trigger(const struct vlltype&loc, PPackage*pkg,
const pform_name_t&name)
const pform_name_t&name, unsigned lexical_pos)
{
if (gn_system_verilog())
check_potential_imports(loc, name.front().name, false);
PTrigger*tmp = new PTrigger(pkg, name);
PTrigger*tmp = new PTrigger(pkg, name, lexical_pos);
FILE_NAME(tmp, loc);
return tmp;
}
PNBTrigger* pform_new_nb_trigger(const struct vlltype&loc,
const list<PExpr*>*dly,
const pform_name_t&name)
const pform_name_t&name,
unsigned lexical_pos)
{
if (gn_system_verilog())
check_potential_imports(loc, name.front().name, false);
@ -735,7 +736,7 @@ PNBTrigger* pform_new_nb_trigger(const struct vlltype&loc,
tmp_dly = dly->front();
}
PNBTrigger*tmp = new PNBTrigger(name, tmp_dly);
PNBTrigger*tmp = new PNBTrigger(name, lexical_pos, tmp_dly);
FILE_NAME(tmp, loc);
return tmp;
}

View File

@ -230,10 +230,11 @@ extern void pform_add_modport_port(const struct vlltype&loc,
extern PEIdent* pform_new_ident(const struct vlltype&loc, const pform_name_t&name);
extern PTrigger* pform_new_trigger(const struct vlltype&loc, PPackage*pkg,
const pform_name_t&name);
const pform_name_t&name, unsigned lexical_pos);
extern PNBTrigger* pform_new_nb_trigger(const struct vlltype&loc,
const std::list<PExpr*>*dly,
const pform_name_t&name);
const pform_name_t&name,
unsigned lexical_pos);
/*
* Enter/exit name scopes. The push_scope function pushes the scope