diff --git a/Statement.cc b/Statement.cc index 1dda37940..16307804a 100644 --- a/Statement.cc +++ b/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) { } diff --git a/Statement.h b/Statement.h index d540fb881..c0c5e23e5 100644 --- a/Statement.h +++ b/Statement.h @@ -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_; }; diff --git a/elaborate.cc b/elaborate.cc index 45c40bad9..b1d6edda3 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -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; diff --git a/parse.y b/parse.y index 9128f29e5..f7bf42aef 100644 --- a/parse.y +++ b/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."); diff --git a/pform.cc b/pform.cc index 2678163f5..d57d0ed01 100644 --- a/pform.cc +++ b/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*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; } diff --git a/pform.h b/pform.h index f0bbd63f6..127f503f1 100644 --- a/pform.h +++ b/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*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