Pass lexical position information to PTrigger and PNBTrigger objects.
This commit is contained in:
parent
cd76bd2371
commit
1c28948484
10
Statement.cc
10
Statement.cc
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
12
parse.y
|
|
@ -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.");
|
||||
|
|
|
|||
9
pform.cc
9
pform.cc
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
5
pform.h
5
pform.h
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue