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
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -396,8 +396,8 @@ PReturn::~PReturn()
|
||||||
delete expr_;
|
delete expr_;
|
||||||
}
|
}
|
||||||
|
|
||||||
PTrigger::PTrigger(PPackage*pkg, const pform_name_t&ev)
|
PTrigger::PTrigger(PPackage*pkg, const pform_name_t&ev, unsigned lexical_pos)
|
||||||
: event_(pkg, ev)
|
: event_(pkg, ev), lexical_pos_(lexical_pos)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -405,8 +405,8 @@ PTrigger::~PTrigger()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PNBTrigger::PNBTrigger(const pform_name_t&ev, PExpr*dly)
|
PNBTrigger::PNBTrigger(const pform_name_t&ev, unsigned lexical_pos, PExpr*dly)
|
||||||
: event_(ev), dly_(dly)
|
: event_(ev), lexical_pos_(lexical_pos), dly_(dly)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef IVL_Statement_H
|
#ifndef IVL_Statement_H
|
||||||
#define 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
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* 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 {
|
class PTrigger : public Statement {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PTrigger(PPackage*pkg, const pform_name_t&ev);
|
explicit PTrigger(PPackage*pkg, const pform_name_t&ev, unsigned lexical_pos);
|
||||||
~PTrigger();
|
~PTrigger();
|
||||||
|
|
||||||
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
|
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
|
||||||
|
|
@ -607,11 +607,12 @@ class PTrigger : public Statement {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
pform_scoped_name_t event_;
|
pform_scoped_name_t event_;
|
||||||
|
unsigned lexical_pos_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PNBTrigger : public Statement {
|
class PNBTrigger : public Statement {
|
||||||
public:
|
public:
|
||||||
explicit PNBTrigger(const pform_name_t&ev, PExpr*dly);
|
explicit PNBTrigger(const pform_name_t&ev, unsigned lexical_pos, PExpr*dly);
|
||||||
~PNBTrigger();
|
~PNBTrigger();
|
||||||
|
|
||||||
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
|
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
|
||||||
|
|
@ -619,6 +620,7 @@ class PNBTrigger : public Statement {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
pform_name_t event_;
|
pform_name_t event_;
|
||||||
|
unsigned lexical_pos_;
|
||||||
PExpr*dly_;
|
PExpr*dly_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6038,7 +6038,7 @@ NetProc* PTrigger::elaborate(Design*des, NetScope*scope) const
|
||||||
ivl_assert(*this, scope);
|
ivl_assert(*this, scope);
|
||||||
|
|
||||||
symbol_search_results sr;
|
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_ << ">"
|
cerr << get_fileline() << ": error: event <" << event_ << ">"
|
||||||
<< " not found." << endl;
|
<< " not found." << endl;
|
||||||
des->errors += 1;
|
des->errors += 1;
|
||||||
|
|
@ -6062,7 +6062,7 @@ NetProc* PNBTrigger::elaborate(Design*des, NetScope*scope) const
|
||||||
ivl_assert(*this, scope);
|
ivl_assert(*this, scope);
|
||||||
|
|
||||||
symbol_search_results sr;
|
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_ << ">"
|
cerr << get_fileline() << ": error: event <" << event_ << ">"
|
||||||
<< " not found." << endl;
|
<< " not found." << endl;
|
||||||
des->errors += 1;
|
des->errors += 1;
|
||||||
|
|
|
||||||
12
parse.y
12
parse.y
|
|
@ -6766,35 +6766,35 @@ statement_item /* This is roughly statement_item in the LRM */
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
| K_TRIGGER hierarchy_identifier ';'
|
| 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;
|
delete $2;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
| K_TRIGGER package_scope hierarchy_identifier
|
| K_TRIGGER package_scope hierarchy_identifier
|
||||||
{ lex_in_package_scope(0);
|
{ 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;
|
delete $3;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
/* FIXME: Does this need support for package resolution like above? */
|
/* FIXME: Does this need support for package resolution like above? */
|
||||||
| K_NB_TRIGGER hierarchy_identifier ';'
|
| 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;
|
delete $2;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
| K_NB_TRIGGER delay1 hierarchy_identifier ';'
|
| 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;
|
delete $3;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
| K_NB_TRIGGER event_control hierarchy_identifier ';'
|
| 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;
|
delete $3;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
yywarn(@1, "sorry: ->> with event control is not currently supported.");
|
yywarn(@1, "sorry: ->> with event control is not currently supported.");
|
||||||
}
|
}
|
||||||
| K_NB_TRIGGER K_repeat '(' expression ')' event_control hierarchy_identifier ';'
|
| 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;
|
delete $7;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
yywarn(@1, "sorry: ->> with repeat event control is not currently supported.");
|
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,
|
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())
|
if (gn_system_verilog())
|
||||||
check_potential_imports(loc, name.front().name, false);
|
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);
|
FILE_NAME(tmp, loc);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
PNBTrigger* pform_new_nb_trigger(const struct vlltype&loc,
|
PNBTrigger* pform_new_nb_trigger(const struct vlltype&loc,
|
||||||
const list<PExpr*>*dly,
|
const list<PExpr*>*dly,
|
||||||
const pform_name_t&name)
|
const pform_name_t&name,
|
||||||
|
unsigned lexical_pos)
|
||||||
{
|
{
|
||||||
if (gn_system_verilog())
|
if (gn_system_verilog())
|
||||||
check_potential_imports(loc, name.front().name, false);
|
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();
|
tmp_dly = dly->front();
|
||||||
}
|
}
|
||||||
|
|
||||||
PNBTrigger*tmp = new PNBTrigger(name, tmp_dly);
|
PNBTrigger*tmp = new PNBTrigger(name, lexical_pos, tmp_dly);
|
||||||
FILE_NAME(tmp, loc);
|
FILE_NAME(tmp, loc);
|
||||||
return tmp;
|
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 PEIdent* pform_new_ident(const struct vlltype&loc, const pform_name_t&name);
|
||||||
|
|
||||||
extern PTrigger* pform_new_trigger(const struct vlltype&loc, PPackage*pkg,
|
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,
|
extern PNBTrigger* pform_new_nb_trigger(const struct vlltype&loc,
|
||||||
const std::list<PExpr*>*dly,
|
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
|
* Enter/exit name scopes. The push_scope function pushes the scope
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue