More cppcheck fixes - part 2
This commit is contained in:
parent
08c8ee081a
commit
860761f9c6
6
PClass.h
6
PClass.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PClass_H
|
||||
#define IVL_PClass_H
|
||||
/*
|
||||
* Copyright (c) 2012-2019 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 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
|
||||
|
|
@ -36,11 +36,11 @@ class PClass : public PScopeExtra, public PNamedItem {
|
|||
|
||||
public:
|
||||
explicit PClass (perm_string name, LexicalScope*parent);
|
||||
~PClass();
|
||||
~PClass() override;
|
||||
|
||||
void dump(std::ostream&out, unsigned indent) const;
|
||||
|
||||
SymbolType symbol_type() const;
|
||||
SymbolType symbol_type() const override;
|
||||
|
||||
public:
|
||||
class_type_t*type;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2025 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
|
||||
|
|
@ -132,8 +132,8 @@ static NetExpr* make_delay_nets(Design*des, NetScope*scope, NetExpr*expr)
|
|||
|
||||
static NetExpr* calc_decay_time(NetExpr *rise, NetExpr *fall)
|
||||
{
|
||||
NetEConst *c_rise = dynamic_cast<NetEConst*>(rise);
|
||||
NetEConst *c_fall = dynamic_cast<NetEConst*>(fall);
|
||||
const NetEConst *c_rise = dynamic_cast<NetEConst*>(rise);
|
||||
const NetEConst *c_fall = dynamic_cast<NetEConst*>(fall);
|
||||
if (c_rise && c_fall) {
|
||||
if (c_rise->value() < c_fall->value()) return rise;
|
||||
else return fall;
|
||||
|
|
|
|||
6
PEvent.h
6
PEvent.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PEvent_H
|
||||
#define IVL_PEvent_H
|
||||
/*
|
||||
* Copyright (c) 2000-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2025 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
|
||||
|
|
@ -37,7 +37,7 @@ class PEvent : public PNamedItem {
|
|||
// The name is a perm-allocated string. It is the simple name
|
||||
// of the event, without any scope.
|
||||
explicit PEvent(perm_string name, unsigned lexical_pos);
|
||||
~PEvent();
|
||||
~PEvent() override;
|
||||
|
||||
perm_string name() const;
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ class PEvent : public PNamedItem {
|
|||
|
||||
void elaborate_scope(Design*des, NetScope*scope) const;
|
||||
|
||||
SymbolType symbol_type() const;
|
||||
SymbolType symbol_type() const override;
|
||||
|
||||
private:
|
||||
perm_string name_;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PModport_H
|
||||
#define IVL_PModport_H
|
||||
/*
|
||||
* Copyright (c) 2015-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2015-2025 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
|
||||
|
|
@ -34,14 +34,14 @@ class PModport : public PNamedItem {
|
|||
// The name is a perm-allocated string. It is the simple name
|
||||
// of the modport, without any scope.
|
||||
explicit PModport(perm_string name);
|
||||
~PModport();
|
||||
~PModport() override;
|
||||
|
||||
perm_string name() const { return name_; }
|
||||
|
||||
typedef std::pair <NetNet::PortType,PExpr*> simple_port_t;
|
||||
std::map<perm_string,simple_port_t> simple_ports;
|
||||
|
||||
SymbolType symbol_type() const;
|
||||
SymbolType symbol_type() const override;
|
||||
|
||||
private:
|
||||
perm_string name_;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PNamedItem_H
|
||||
#define IVL_PNamedItem_H
|
||||
/*
|
||||
* Copyright (c) 2019 Martin Whitaker (icarus@martin-whitaker.me.uk)
|
||||
* Copyright (c) 2019-2025 Martin Whitaker (icarus@martin-whitaker.me.uk)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -34,7 +34,7 @@ class PNamedItem : virtual public LineInfo {
|
|||
INSTANCE };
|
||||
|
||||
explicit PNamedItem();
|
||||
virtual ~PNamedItem();
|
||||
virtual ~PNamedItem() override;
|
||||
|
||||
virtual SymbolType symbol_type() const;
|
||||
};
|
||||
|
|
@ -49,9 +49,9 @@ class PGenvar : public PNamedItem {
|
|||
|
||||
public:
|
||||
explicit PGenvar();
|
||||
virtual ~PGenvar();
|
||||
virtual ~PGenvar() override;
|
||||
|
||||
SymbolType symbol_type() const;
|
||||
SymbolType symbol_type() const override;
|
||||
};
|
||||
|
||||
#endif /* IVL_PNamedItem_H */
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PPackage_H
|
||||
#define IVL_PPackage_H
|
||||
/*
|
||||
* Copyright (c) 2012-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -36,7 +36,7 @@ class PPackage : public PScopeExtra, public LineInfo {
|
|||
|
||||
public:
|
||||
explicit PPackage (perm_string name, LexicalScope*parent);
|
||||
~PPackage();
|
||||
~PPackage() override;
|
||||
|
||||
bool elaborate_scope(Design*des, NetScope*scope);
|
||||
bool elaborate_sig(Design*des, NetScope*scope) const;
|
||||
|
|
|
|||
6
PScope.h
6
PScope.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PScope_H
|
||||
#define IVL_PScope_H
|
||||
/*
|
||||
* Copyright (c) 2008-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2008-2025 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
|
||||
|
|
@ -198,7 +198,7 @@ class PScope : public LexicalScope {
|
|||
// modules. Scopes for tasks and functions point to their
|
||||
// containing module.
|
||||
explicit PScope(perm_string name, LexicalScope*parent =0);
|
||||
virtual ~PScope();
|
||||
virtual ~PScope() override;
|
||||
|
||||
perm_string pscope_name() const { return name_; }
|
||||
|
||||
|
|
@ -233,7 +233,7 @@ class PScopeExtra : public PScope {
|
|||
|
||||
public:
|
||||
explicit PScopeExtra(perm_string, LexicalScope*parent =0);
|
||||
~PScopeExtra();
|
||||
~PScopeExtra() override;
|
||||
|
||||
/* Task definitions within this module */
|
||||
std::map<perm_string,PTask*> tasks;
|
||||
|
|
|
|||
4
PSpec.h
4
PSpec.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_PSpec_H
|
||||
#define IVL_PSpec_H
|
||||
/*
|
||||
* Copyright (c) 2006-2014 Stephen Williams <steve@icarus.com>
|
||||
* Copyright (c) 2006-2025 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
|
||||
|
|
@ -60,7 +60,7 @@ class PSpecPath : public LineInfo {
|
|||
PSpecPath(const std::list<perm_string> &src_list,
|
||||
const std::list<perm_string> &dst_list,
|
||||
char polarity, bool full_flag);
|
||||
~PSpecPath();
|
||||
~PSpecPath() override;
|
||||
|
||||
void elaborate(class Design*des, class NetScope*scope) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
// These are correct and are used to find the base (zero) pin.
|
||||
thisSubtraction:netlist.h:5244
|
||||
thisSubtraction:netlist.h:5253
|
||||
thisSubtraction:netlist.h:5311
|
||||
thisSubtraction:netlist.h:5320
|
||||
|
||||
// This is used when running a debugger
|
||||
// debugger_release
|
||||
knownConditionTrueFalse:main.cc:921
|
||||
knownConditionTrueFalse:main.cc:931
|
||||
|
||||
// This are just stubs
|
||||
// vpi_control()
|
||||
|
|
|
|||
26
cprop.cc
26
cprop.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1998-2025 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
|
||||
|
|
@ -41,14 +41,14 @@ struct cprop_functor : public functor_t {
|
|||
|
||||
unsigned count;
|
||||
|
||||
virtual void signal(Design*des, NetNet*obj);
|
||||
virtual void lpm_add_sub(Design*des, NetAddSub*obj);
|
||||
virtual void lpm_compare(Design*des, const NetCompare*obj);
|
||||
virtual void lpm_concat(Design*des, NetConcat*obj);
|
||||
virtual void lpm_ff(Design*des, NetFF*obj);
|
||||
virtual void lpm_logic(Design*des, NetLogic*obj);
|
||||
virtual void lpm_mux(Design*des, NetMux*obj);
|
||||
virtual void lpm_part_select(Design*des, NetPartSelect*obj);
|
||||
virtual void signal(Design*des, NetNet*obj) override;
|
||||
virtual void lpm_add_sub(Design*des, NetAddSub*obj) override;
|
||||
virtual void lpm_compare(Design*des, const NetCompare*obj) override;
|
||||
virtual void lpm_concat(Design*des, NetConcat*obj) override;
|
||||
virtual void lpm_ff(Design*des, NetFF*obj) override;
|
||||
virtual void lpm_logic(Design*des, NetLogic*obj) override;
|
||||
virtual void lpm_mux(Design*des, NetMux*obj) override;
|
||||
virtual void lpm_part_select(Design*des, NetPartSelect*obj) override;
|
||||
|
||||
void lpm_compare_eq_(Design*des, const NetCompare*obj);
|
||||
};
|
||||
|
|
@ -90,7 +90,7 @@ void cprop_functor::lpm_concat(Design*des, NetConcat*obj)
|
|||
unsigned off = 0;
|
||||
|
||||
for (unsigned idx = 1 ; idx < obj->pin_count() ; idx += 1) {
|
||||
Nexus*nex = obj->pin(idx).nexus();
|
||||
const Nexus*nex = obj->pin(idx).nexus();
|
||||
// If there are non-constant drivers, then give up.
|
||||
if (! nex->drivers_constant())
|
||||
return;
|
||||
|
|
@ -156,7 +156,7 @@ void cprop_functor::lpm_mux(Design*des, NetMux*obj)
|
|||
if (obj->sel_width() != 1)
|
||||
return;
|
||||
|
||||
Nexus*sel_nex = obj->pin_Sel().nexus();
|
||||
const Nexus*sel_nex = obj->pin_Sel().nexus();
|
||||
|
||||
/* If the select input is constant, then replace with a BUFZ */
|
||||
|
||||
|
|
@ -226,7 +226,7 @@ void cprop_functor::lpm_part_select(Design*des, NetPartSelect*obj)
|
|||
NetPins*tmp_obj = cur->get_obj();
|
||||
|
||||
// Record if we are driving a 2-state net.
|
||||
NetNet*net_obj = dynamic_cast<NetNet*> (tmp_obj);
|
||||
const NetNet*net_obj = dynamic_cast<NetNet*> (tmp_obj);
|
||||
if (net_obj && (net_obj->data_type() == IVL_VT_BOOL))
|
||||
output_2_state = true;
|
||||
|
||||
|
|
@ -355,7 +355,7 @@ void cprop_functor::lpm_part_select(Design*des, NetPartSelect*obj)
|
|||
*/
|
||||
struct cprop_dc_functor : public functor_t {
|
||||
|
||||
virtual void lpm_const(Design*des, NetConst*obj);
|
||||
virtual void lpm_const(Design*des, NetConst*obj) override;
|
||||
};
|
||||
|
||||
struct nexus_info_s {
|
||||
|
|
|
|||
86
elab_expr.cc
86
elab_expr.cc
|
|
@ -341,7 +341,7 @@ NetExpr* PEAssignPattern::elaborate_expr_uarray_(Design *des, NetScope *scope,
|
|||
// have a good way of passing the inner dimensions through the
|
||||
// generic elaborate_expr() API and assigment patterns is the only
|
||||
// place where we need it.
|
||||
if (auto ap = dynamic_cast<PEAssignPattern*>(parms_[idx])) {
|
||||
if (const auto ap = dynamic_cast<PEAssignPattern*>(parms_[idx])) {
|
||||
expr = ap->elaborate_expr_uarray_(des, scope, uarray_type,
|
||||
dims, cur_dim, need_const);
|
||||
} else if (dynamic_cast<PEConcat*>(parms_[idx])) {
|
||||
|
|
@ -410,7 +410,7 @@ NetExpr* PEAssignPattern::elaborate_expr_packed_(Design *des, NetScope *scope,
|
|||
// have a good way of passing the inner dimensions through the
|
||||
// generic elaborate_expr() API and assigment patterns is the only
|
||||
// place where we need it.
|
||||
auto ap = dynamic_cast<PEAssignPattern*>(parms_[idx]);
|
||||
const auto ap = dynamic_cast<PEAssignPattern*>(parms_[idx]);
|
||||
if (ap)
|
||||
expr = ap->elaborate_expr_packed_(des, scope, base_type,
|
||||
width, dims, cur_dim, need_const);
|
||||
|
|
@ -755,7 +755,7 @@ NetExpr* PEBinary::elaborate_expr_base_mult_(Design*,
|
|||
}
|
||||
|
||||
// Handle a few special case multiplies against constants.
|
||||
if (NetEConst*rp_const = dynamic_cast<NetEConst*> (rp)) {
|
||||
if (const NetEConst*rp_const = dynamic_cast<NetEConst*> (rp)) {
|
||||
verinum rp_val = rp_const->value();
|
||||
|
||||
if (!rp_val.is_defined() && (lp->expr_type() == IVL_VT_LOGIC)) {
|
||||
|
|
@ -1062,7 +1062,7 @@ unsigned PEBLeftWidth::test_width(Design*des, NetScope*scope, width_mode_t&mode)
|
|||
delete right_;
|
||||
right_ = tmp;
|
||||
}
|
||||
NetEConst*rc = dynamic_cast<NetEConst*> (rp);
|
||||
const NetEConst*rc = dynamic_cast<NetEConst*> (rp);
|
||||
// Adjust the expression width that can be converter depending
|
||||
// on if the R-value is signed or not.
|
||||
unsigned c_width = sizeof(long)*8;
|
||||
|
|
@ -1086,7 +1086,7 @@ unsigned PEBLeftWidth::test_width(Design*des, NetScope*scope, width_mode_t&mode)
|
|||
// If the left operand is a simple unsized number, we
|
||||
// can calculate the actual width required for the power
|
||||
// operator.
|
||||
PENumber*lc = dynamic_cast<PENumber*> (left_);
|
||||
const PENumber*lc = dynamic_cast<PENumber*> (left_);
|
||||
|
||||
// Now calculate the lossless width.
|
||||
unsigned use_width = expr_width_;
|
||||
|
|
@ -1259,7 +1259,7 @@ NetExpr*PEBShift::elaborate_expr_leaf(Design*des, NetExpr*lp, NetExpr*rp,
|
|||
// there are some other interesting cases. But if neither are
|
||||
// constant, then there is the general case.
|
||||
|
||||
if (NetEConst*lpc = dynamic_cast<NetEConst*> (lp)) {
|
||||
if (const NetEConst*lpc = dynamic_cast<NetEConst*> (lp)) {
|
||||
|
||||
// Special case: The left expression is zero. If the
|
||||
// shift value contains no 'x' or 'z' bits, the result
|
||||
|
|
@ -1279,7 +1279,7 @@ NetExpr*PEBShift::elaborate_expr_leaf(Design*des, NetExpr*lp, NetExpr*rp,
|
|||
return tmp;
|
||||
}
|
||||
|
||||
} else if (NetEConst*rpc = dynamic_cast<NetEConst*> (rp)) {
|
||||
} else if (const NetEConst*rpc = dynamic_cast<NetEConst*> (rp)) {
|
||||
|
||||
// Special case: The shift value contains 'x' or 'z' bits.
|
||||
// Elaborate as a constant-x.
|
||||
|
|
@ -1382,7 +1382,7 @@ unsigned PECallFunction::test_width_sfunc_(Design*des, NetScope*scope,
|
|||
return 0;
|
||||
}
|
||||
|
||||
NetExpr*nexpr = elab_and_eval(des, scope, pexpr, -1, true);
|
||||
const NetExpr*nexpr = elab_and_eval(des, scope, pexpr, -1, true);
|
||||
if (nexpr == 0) {
|
||||
cerr << get_fileline() << ": error: "
|
||||
<< "Unable to evaluate " << name
|
||||
|
|
@ -1560,7 +1560,7 @@ unsigned PECallFunction::test_width_method_(Design*, NetScope*,
|
|||
if (search_results.net && search_results.net->data_type()==IVL_VT_DARRAY
|
||||
&& search_results.path_head.back().index.empty()) {
|
||||
|
||||
NetNet*net = search_results.net;
|
||||
const NetNet*net = search_results.net;
|
||||
const netdarray_t*darray = net->darray_type();
|
||||
ivl_assert(*this, darray);
|
||||
|
||||
|
|
@ -1583,7 +1583,7 @@ unsigned PECallFunction::test_width_method_(Design*, NetScope*,
|
|||
if (search_results.net && search_results.net->data_type()==IVL_VT_QUEUE
|
||||
&& search_results.path_head.back().index.empty()) {
|
||||
|
||||
NetNet*net = search_results.net;
|
||||
const NetNet*net = search_results.net;
|
||||
const netdarray_t*darray = net->darray_type();
|
||||
ivl_assert(*this, darray);
|
||||
|
||||
|
|
@ -1616,7 +1616,7 @@ unsigned PECallFunction::test_width_method_(Design*, NetScope*,
|
|||
&& (search_results.net->data_type()==IVL_VT_QUEUE || search_results.net->data_type()==IVL_VT_DARRAY)
|
||||
&& search_results.path_head.back().index.size()) {
|
||||
|
||||
NetNet*net = search_results.net;
|
||||
const NetNet*net = search_results.net;
|
||||
const netdarray_t*darray = net->darray_type();
|
||||
ivl_assert(*this, darray);
|
||||
|
||||
|
|
@ -1646,7 +1646,7 @@ unsigned PECallFunction::test_width_method_(Design*, NetScope*,
|
|||
|
||||
// Enumeration variable. Check for the various enumeration methods.
|
||||
if (search_results.net && search_results.net->enumeration()) {
|
||||
NetNet*net = search_results.net;
|
||||
const NetNet*net = search_results.net;
|
||||
const netenum_t*enum_type = net->enumeration();
|
||||
|
||||
if (method_name=="first" || method_name=="last"
|
||||
|
|
@ -1692,7 +1692,7 @@ unsigned PECallFunction::test_width_method_(Design*, NetScope*,
|
|||
}
|
||||
|
||||
// Get the return value of the method function.
|
||||
if (NetNet*res = method->find_signal(method->basename())) {
|
||||
if (const NetNet*res = method->find_signal(method->basename())) {
|
||||
expr_type_ = res->data_type();
|
||||
expr_width_ = res->vector_width();
|
||||
min_width_ = expr_width_;
|
||||
|
|
@ -1786,7 +1786,7 @@ unsigned PECallFunction::test_width(Design*des, NetScope*scope,
|
|||
<< "." << endl;
|
||||
}
|
||||
|
||||
NetNet*res = search_results.net;
|
||||
const NetNet*res = search_results.net;
|
||||
expr_type_ = res->data_type();
|
||||
expr_width_ = res->vector_width();
|
||||
min_width_ = expr_width_;
|
||||
|
|
@ -1845,7 +1845,7 @@ unsigned PECallFunction::test_width(Design*des, NetScope*scope,
|
|||
NetScope*dscope = def->scope();
|
||||
ivl_assert(*this, dscope);
|
||||
|
||||
if (NetNet*res = dscope->find_signal(dscope->basename())) {
|
||||
if (const NetNet*res = dscope->find_signal(dscope->basename())) {
|
||||
expr_type_ = res->data_type();
|
||||
expr_width_ = res->vector_width();
|
||||
min_width_ = expr_width_;
|
||||
|
|
@ -1906,7 +1906,7 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope,
|
|||
if (name=="$ivlh_to_unsigned") {
|
||||
ivl_assert(*this, parms_.size()==2);
|
||||
|
||||
PExpr *expr = parms_[0].parm;
|
||||
const PExpr *expr = parms_[0].parm;
|
||||
ivl_assert(*this, expr);
|
||||
NetExpr*sub = expr->elaborate_expr(des, scope, expr->expr_width(), flags);
|
||||
return cast_to_width_(sub, expr_wid);
|
||||
|
|
@ -1934,7 +1934,7 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope,
|
|||
cerr << get_fileline() << ": PECallFunction::elaborate_sfunc_: "
|
||||
<< name << " expression is the argument cast to expr_wid=" << expr_wid << endl;
|
||||
}
|
||||
PExpr *expr = parms_[0].parm;
|
||||
const PExpr *expr = parms_[0].parm;
|
||||
NetExpr*sub = expr->elaborate_expr(des, scope, expr_width_, flags);
|
||||
|
||||
return cast_to_width_(sub, expr_wid);
|
||||
|
|
@ -1959,7 +1959,7 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope,
|
|||
PExpr *expr = parms_[0].parm;
|
||||
|
||||
uint64_t use_width = 0;
|
||||
if (PETypename*type_expr = dynamic_cast<PETypename*>(expr)) {
|
||||
if (const PETypename*type_expr = dynamic_cast<PETypename*>(expr)) {
|
||||
ivl_type_t data_type = type_expr->get_type()->elaborate_type(des, scope);
|
||||
ivl_assert(*this, data_type);
|
||||
use_width = 1;
|
||||
|
|
@ -2009,7 +2009,7 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope,
|
|||
return 0;
|
||||
}
|
||||
|
||||
PExpr *expr = parms_[0].parm;
|
||||
const PExpr *expr = parms_[0].parm;
|
||||
|
||||
verinum val (expr->has_sign() ? verinum::V1 : verinum::V0, 1);
|
||||
NetEConst*sub = new NetEConst(val);
|
||||
|
|
@ -2104,7 +2104,7 @@ NetExpr* PECallFunction::elaborate_access_func_(Design*des, NetScope*scope,
|
|||
|
||||
if (parms_.size() == 1) {
|
||||
PExpr *arg1 = parms_[0].parm;
|
||||
PEIdent*arg_ident = dynamic_cast<PEIdent*> (arg1);
|
||||
const PEIdent*arg_ident = dynamic_cast<PEIdent*> (arg1);
|
||||
ivl_assert(*this, arg_ident);
|
||||
|
||||
const pform_name_t&path = arg_ident->path().name;
|
||||
|
|
@ -2264,7 +2264,7 @@ static NetExpr* check_for_enum_methods(const LineInfo*li,
|
|||
"enumeration method argument " << use_path << "."
|
||||
<< method_name << "(" << args[0] << ")." << endl;
|
||||
des->errors++;
|
||||
} else if (NetEEvent *evt = dynamic_cast<NetEEvent*> (count)) {
|
||||
} else if (const NetEEvent *evt = dynamic_cast<NetEEvent*> (count)) {
|
||||
cerr << evt->get_fileline() << ": error: An event '"
|
||||
<< evt->event()->name() << "' cannot be an enumeration "
|
||||
"method argument." << endl;
|
||||
|
|
@ -3160,7 +3160,7 @@ unsigned PECallFunction::elaborate_arguments_(Design*des, NetScope*scope,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (NetEEvent*evt = dynamic_cast<NetEEvent*> (parms[pidx])) {
|
||||
if (const NetEEvent*evt = dynamic_cast<NetEEvent*> (parms[pidx])) {
|
||||
cerr << evt->get_fileline() << ": error: An event '"
|
||||
<< evt->event()->name() << "' can not be a user "
|
||||
"function argument." << endl;
|
||||
|
|
@ -3272,7 +3272,7 @@ NetExpr* PECallFunction::elaborate_expr_method_(Design*des, NetScope*scope,
|
|||
if (search_results.net && search_results.net->data_type()==IVL_VT_QUEUE
|
||||
&& search_results.path_head.back().index.size()==1) {
|
||||
|
||||
NetNet*net = search_results.net;
|
||||
const NetNet*net = search_results.net;
|
||||
const netdarray_t*darray = net->darray_type();
|
||||
const index_component_t&use_index = search_results.path_head.back().index.back();
|
||||
ivl_assert(*this, use_index.msb != 0);
|
||||
|
|
@ -3378,7 +3378,7 @@ NetExpr* PECallFunction::elaborate_expr_method_(Design*des, NetScope*scope,
|
|||
// Enumeration methods.
|
||||
if (search_results.net && search_results.net->enumeration()) {
|
||||
|
||||
NetNet*net = search_results.net;
|
||||
const NetNet*net = search_results.net;
|
||||
const netenum_t*netenum = net->enumeration();
|
||||
|
||||
// Get the method name that we are looking for.
|
||||
|
|
@ -3581,7 +3581,7 @@ unsigned PECastSize::test_width(Design*des, NetScope*scope, width_mode_t&)
|
|||
expr_width_ = 0;
|
||||
|
||||
NetExpr*size_ex = elab_and_eval(des, scope, size_, -1, true);
|
||||
NetEConst*size_ce = dynamic_cast<NetEConst*>(size_ex);
|
||||
const NetEConst*size_ce = dynamic_cast<NetEConst*>(size_ex);
|
||||
if (size_ce && !size_ce->value().is_negative())
|
||||
expr_width_ = size_ce->value().as_ulong();
|
||||
delete size_ex;
|
||||
|
|
@ -3837,7 +3837,7 @@ unsigned PEConcat::test_width(Design*des, NetScope*scope, width_mode_t&)
|
|||
return 0;
|
||||
}
|
||||
|
||||
NetEConst*rep = dynamic_cast<NetEConst*>(tmp);
|
||||
const NetEConst*rep = dynamic_cast<NetEConst*>(tmp);
|
||||
|
||||
if (rep == 0) {
|
||||
cerr << get_fileline() << ": error: "
|
||||
|
|
@ -4094,7 +4094,7 @@ bool PEIdent::calculate_bits_(Design*des, NetScope*scope,
|
|||
bit select expressions which must be constant. */
|
||||
|
||||
NetExpr*msb_ex = elab_and_eval(des, scope, index_tail.msb, -1, true);
|
||||
NetEConst*msb_c = dynamic_cast<NetEConst*>(msb_ex);
|
||||
const NetEConst*msb_c = dynamic_cast<NetEConst*>(msb_ex);
|
||||
if (msb_c == 0) {
|
||||
cerr << index_tail.msb->get_fileline() << ": error: "
|
||||
"Bit select expressions must be a constant integral value."
|
||||
|
|
@ -4136,7 +4136,7 @@ bool PEIdent::calculate_parts_(Design*des, NetScope*scope,
|
|||
constant. Evaluate them and pass the results back to
|
||||
the caller. */
|
||||
NetExpr*lsb_ex = elab_and_eval(des, scope, index_tail.lsb, -1, true);
|
||||
NetEConst*lsb_c = dynamic_cast<NetEConst*>(lsb_ex);
|
||||
const NetEConst*lsb_c = dynamic_cast<NetEConst*>(lsb_ex);
|
||||
if (lsb_c == 0) {
|
||||
cerr << index_tail.lsb->get_fileline() << ": error: "
|
||||
"Part select expressions must be constant integral values."
|
||||
|
|
@ -4154,7 +4154,7 @@ bool PEIdent::calculate_parts_(Design*des, NetScope*scope,
|
|||
}
|
||||
|
||||
NetExpr*msb_ex = elab_and_eval(des, scope, index_tail.msb, -1, true);
|
||||
NetEConst*msb_c = dynamic_cast<NetEConst*>(msb_ex);
|
||||
const NetEConst*msb_c = dynamic_cast<NetEConst*>(msb_ex);
|
||||
if (msb_c == 0) {
|
||||
cerr << index_tail.msb->get_fileline() << ": error: "
|
||||
"Part select expressions must be constant integral values."
|
||||
|
|
@ -4191,7 +4191,7 @@ bool PEIdent::calculate_up_do_width_(Design*des, NetScope*scope,
|
|||
first. If the expression is not constant, error but guess 1
|
||||
so we can keep going and find more errors. */
|
||||
NetExpr*wid_ex = elab_and_eval(des, scope, index_tail.lsb, -1, true);
|
||||
NetEConst*wid_c = dynamic_cast<NetEConst*>(wid_ex);
|
||||
const NetEConst*wid_c = dynamic_cast<NetEConst*>(wid_ex);
|
||||
|
||||
wid = wid_c ? wid_c->value().as_ulong() : 0;
|
||||
if (wid == 0) {
|
||||
|
|
@ -5204,7 +5204,7 @@ NetExpr* PEIdent::elaborate_expr_param_bit_(Design*des, NetScope*scope,
|
|||
|
||||
// Handle the special case that the selection is constant. In this
|
||||
// case, just precalculate the entire constant result.
|
||||
if (NetEConst*sel_c = dynamic_cast<NetEConst*> (sel)) {
|
||||
if (const NetEConst*sel_c = dynamic_cast<NetEConst*> (sel)) {
|
||||
// Special case: If the bit select is constant and not fully
|
||||
// defined, then we know that the result must be 1'bx.
|
||||
if (! sel_c->value().is_defined()) {
|
||||
|
|
@ -5428,7 +5428,7 @@ NetExpr* PEIdent::elaborate_expr_param_idx_up_(Design*des, NetScope*scope,
|
|||
|
||||
// Handle the special case that the base is constant. In this
|
||||
// case, just precalculate the entire constant result.
|
||||
if (NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (const NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (! base_c->value().is_defined()) {
|
||||
NetEConst *ex;
|
||||
ex = new NetEConst(verinum(verinum::Vx, wid, true));
|
||||
|
|
@ -5516,7 +5516,7 @@ NetExpr* PEIdent::elaborate_expr_param_idx_do_(Design*des, NetScope*scope,
|
|||
|
||||
// Handle the special case that the base is constant. In this
|
||||
// case, just precalculate the entire constant result.
|
||||
if (NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (const NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (! base_c->value().is_defined()) {
|
||||
NetEConst *ex;
|
||||
ex = new NetEConst(verinum(verinum::Vx, wid, true));
|
||||
|
|
@ -6011,7 +6011,7 @@ NetExpr* PEIdent::elaborate_expr_net_idx_up_(Design*des, NetScope*scope,
|
|||
// Handle the special case that the base is constant as
|
||||
// well. In this case it can be converted to a conventional
|
||||
// part select.
|
||||
if (NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (const NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
NetExpr*ex;
|
||||
if (base_c->value().is_defined()) {
|
||||
long lsv = base_c->value().as_long();
|
||||
|
|
@ -6178,7 +6178,7 @@ NetExpr* PEIdent::elaborate_expr_net_idx_do_(Design*des, NetScope*scope,
|
|||
// Handle the special case that the base is constant as
|
||||
// well. In this case it can be converted to a conventional
|
||||
// part select.
|
||||
if (NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (const NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
NetExpr*ex;
|
||||
if (base_c->value().is_defined()) {
|
||||
long lsv = base_c->value().as_long();
|
||||
|
|
@ -6352,7 +6352,7 @@ NetExpr* PEIdent::elaborate_expr_net_bit_(Design*des, NetScope*scope,
|
|||
// If the bit select is constant, then treat it similar
|
||||
// to the part select, so that I save the effort of
|
||||
// making a mux part in the netlist.
|
||||
if (NetEConst*msc = dynamic_cast<NetEConst*> (mux)) {
|
||||
if (const NetEConst*msc = dynamic_cast<NetEConst*> (mux)) {
|
||||
|
||||
if (debug_elaborate) {
|
||||
cerr << get_fileline() << ": PEIdent::elaborate_expr_net_bit_: "
|
||||
|
|
@ -6763,7 +6763,7 @@ NetExpr* PENewClass::elaborate_expr_constructor_(Design*des, NetScope*scope,
|
|||
|
||||
// Ran out of explicit arguments. Is there a default
|
||||
// argument we can use?
|
||||
if (NetExpr*tmp = def->port_defe(idx)) {
|
||||
if (const NetExpr*tmp = def->port_defe(idx)) {
|
||||
parms[idx] = tmp->dup_expr();
|
||||
continue;
|
||||
}
|
||||
|
|
@ -7120,7 +7120,7 @@ NetExpr*PETernary::elaborate_expr(Design*des, NetScope*scope,
|
|||
|
||||
// Verilog doesn't say that we must do short circuit evaluation
|
||||
// of ternary expressions, but it doesn't disallow it.
|
||||
if (NetEConst*tmp = dynamic_cast<NetEConst*> (con)) {
|
||||
if (const NetEConst*tmp = dynamic_cast<NetEConst*> (con)) {
|
||||
verinum cval = tmp->value();
|
||||
ivl_assert(*this, cval.len()==1);
|
||||
|
||||
|
|
@ -7386,7 +7386,7 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope,
|
|||
break;
|
||||
|
||||
case '-':
|
||||
if (NetEConst*ipc = dynamic_cast<NetEConst*>(ip)) {
|
||||
if (const NetEConst*ipc = dynamic_cast<NetEConst*>(ip)) {
|
||||
|
||||
verinum val = - ipc->value();
|
||||
tmp = new NetEConst(val);
|
||||
|
|
@ -7394,7 +7394,7 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope,
|
|||
tmp->set_line(*this);
|
||||
delete ip;
|
||||
|
||||
} else if (NetECReal*ipr = dynamic_cast<NetECReal*>(ip)) {
|
||||
} else if (const NetECReal*ipr = dynamic_cast<NetECReal*>(ip)) {
|
||||
|
||||
/* When taking the - of a real, fold this into the
|
||||
constant value. */
|
||||
|
|
@ -7417,7 +7417,7 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope,
|
|||
/* If the operand to unary ! is a constant, then I can
|
||||
evaluate this expression here and return a logical
|
||||
constant in its place. */
|
||||
if (NetEConst*ipc = dynamic_cast<NetEConst*>(ip)) {
|
||||
if (const NetEConst*ipc = dynamic_cast<NetEConst*>(ip)) {
|
||||
verinum val = ipc->value();
|
||||
unsigned v1 = 0;
|
||||
unsigned vx = 0;
|
||||
|
|
@ -7445,7 +7445,7 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope,
|
|||
tmp = new NetEConst(vres);
|
||||
tmp->set_line(*this);
|
||||
delete ip;
|
||||
} else if (NetECReal*ipr = dynamic_cast<NetECReal*>(ip)) {
|
||||
} else if (const NetECReal*ipr = dynamic_cast<NetECReal*>(ip)) {
|
||||
verinum::V res;
|
||||
if (ipr->value().as_double() == 0.0) res = verinum::V1;
|
||||
else res = verinum::V0;
|
||||
|
|
@ -7527,7 +7527,7 @@ NetNet* Design::find_discipline_reference(ivl_discipline_t dis, NetScope*scope)
|
|||
if (gnd) return gnd;
|
||||
|
||||
string name = string(dis->name()) + "$gnd";
|
||||
netvector_t*gnd_vec = new netvector_t(IVL_VT_REAL,0,0);
|
||||
const netvector_t*gnd_vec = new netvector_t(IVL_VT_REAL,0,0);
|
||||
gnd = new NetNet(scope, lex_strings.make(name), NetNet::WIRE, gnd_vec);
|
||||
gnd->set_discipline(dis);
|
||||
discipline_references_[dis->name()] = gnd;
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ NetAssign_* PEIdent::elaborate_lval(Design*des,
|
|||
symbol_search(this, des, scope, path_, lexical_pos_, &sr);
|
||||
|
||||
NetNet *reg = sr.net;
|
||||
pform_name_t &member_path = sr.path_tail;
|
||||
const pform_name_t &member_path = sr.path_tail;
|
||||
|
||||
/* The l-value must be a variable. If not, then give up and
|
||||
print a useful error message. */
|
||||
|
|
@ -475,7 +475,7 @@ NetAssign_* PEIdent::elaborate_lval_net_word_(Design*des,
|
|||
|
||||
if ((reg->type()==NetNet::UNRESOLVED_WIRE) && !is_force) {
|
||||
ivl_assert(*this, reg->coerced_to_uwire());
|
||||
NetEConst*canon_const = dynamic_cast<NetEConst*>(canon_index);
|
||||
const NetEConst*canon_const = dynamic_cast<NetEConst*>(canon_index);
|
||||
if (!canon_const || reg->test_part_driven(reg->vector_width() - 1, 0,
|
||||
canon_const->value().as_long())) {
|
||||
report_mixed_assignment_conflict_("array word");
|
||||
|
|
@ -556,7 +556,7 @@ bool PEIdent::elaborate_lval_net_bit_(Design*des,
|
|||
return false;
|
||||
}
|
||||
|
||||
if (NetEConst*index_con = dynamic_cast<NetEConst*> (mux)) {
|
||||
if (const NetEConst*index_con = dynamic_cast<NetEConst*> (mux)) {
|
||||
// The index has a constant defined value.
|
||||
if (index_con->value().is_defined()) {
|
||||
lsb = index_con->value().as_long();
|
||||
|
|
@ -901,7 +901,7 @@ bool PEIdent::elaborate_lval_net_idx_(Design*des,
|
|||
|
||||
// Handle the special case that the base is constant. For this
|
||||
// case we can reduce the expression.
|
||||
if (NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
if (const NetEConst*base_c = dynamic_cast<NetEConst*> (base)) {
|
||||
// For the undefined case just let the constant pass and
|
||||
// we will handle it in the code generator.
|
||||
if (base_c->value().is_defined()) {
|
||||
|
|
|
|||
12
elab_net.cc
12
elab_net.cc
|
|
@ -105,7 +105,7 @@ NetNet* PEConcat::elaborate_lnet_common_(Design*des, NetScope*scope,
|
|||
concat operator from most significant to least significant,
|
||||
which is the order they are given in the concat list. */
|
||||
|
||||
netvector_t*tmp2_vec = new netvector_t(nets[0]->data_type(),width-1,0);
|
||||
const netvector_t*tmp2_vec = new netvector_t(nets[0]->data_type(),width-1,0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, tmp2_vec);
|
||||
|
||||
|
|
@ -237,7 +237,7 @@ bool PEIdent::eval_part_select_(Design*des, NetScope*scope, NetNet*sig,
|
|||
case index_component_t::SEL_IDX_DO:
|
||||
case index_component_t::SEL_IDX_UP: {
|
||||
NetExpr*tmp_ex = elab_and_eval(des, scope, index_tail.msb, -1, true);
|
||||
NetEConst*tmp = dynamic_cast<NetEConst*>(tmp_ex);
|
||||
const NetEConst*tmp = dynamic_cast<NetEConst*>(tmp_ex);
|
||||
if (!tmp) {
|
||||
cerr << get_fileline() << ": error: Indexed part select "
|
||||
"base expression must be a constant integral value "
|
||||
|
|
@ -743,7 +743,7 @@ NetNet* PEIdent::elaborate_lnet_common_(Design*des, NetScope*scope,
|
|||
member_select.sel = index_component_t::SEL_BIT;
|
||||
member_select.msb = new PENumber(new verinum(member_off));
|
||||
tmp_index.push_back(member_select);
|
||||
NetExpr*packed_base = collapse_array_indices(des, scope, sig, tmp_index);
|
||||
const NetExpr*packed_base = collapse_array_indices(des, scope, sig, tmp_index);
|
||||
|
||||
if (debug_elaborate) {
|
||||
cerr << get_fileline() << ": PEIdent::elaborate_lnet_common_: "
|
||||
|
|
@ -825,7 +825,7 @@ NetNet* PEIdent::elaborate_lnet_common_(Design*des, NetScope*scope,
|
|||
widx_flag = true;
|
||||
|
||||
} else {
|
||||
NetEConst*canon_const = dynamic_cast<NetEConst*>(canon_index);
|
||||
const NetEConst*canon_const = dynamic_cast<NetEConst*>(canon_index);
|
||||
ivl_assert(*this, canon_const);
|
||||
|
||||
widx = canon_const->value().as_long();
|
||||
|
|
@ -967,7 +967,7 @@ NetNet* PEIdent::elaborate_lnet_common_(Design*des, NetScope*scope,
|
|||
<< " wid=" << subnet_wid <<"]"
|
||||
<< endl;
|
||||
|
||||
netvector_t*tmp2_vec = new netvector_t(sig->data_type(),
|
||||
const netvector_t*tmp2_vec = new netvector_t(sig->data_type(),
|
||||
subnet_wid-1,0);
|
||||
NetNet*subsig = new NetNet(sig->scope(),
|
||||
sig->scope()->local_symbol(),
|
||||
|
|
@ -1114,7 +1114,7 @@ NetNet* PEIdent::elaborate_subport(Design*des, NetScope*scope) const
|
|||
unsigned swid = abs(midx - lidx) + 1;
|
||||
ivl_assert(*this, swid > 0 && swid < sig->vector_width());
|
||||
|
||||
netvector_t*tmp2_vec = new netvector_t(sig->data_type(),swid-1,0);
|
||||
const netvector_t*tmp2_vec = new netvector_t(sig->data_type(),swid-1,0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp2_vec);
|
||||
tmp->port_type(sig->port_type());
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ static void elaborate_scope_enumeration(Design*des, NetScope*scope,
|
|||
// There is an explicit value. elaborate/evaluate
|
||||
// the value and assign it to the enumeration name.
|
||||
NetExpr*val = elab_and_eval(des, scope, cur->parm, -1);
|
||||
NetEConst*val_const = dynamic_cast<NetEConst*> (val);
|
||||
const NetEConst*val_const = dynamic_cast<NetEConst*> (val);
|
||||
if (val_const == 0) {
|
||||
cerr << use_enum->get_fileline()
|
||||
<< ": error: Enumeration expression for "
|
||||
|
|
@ -241,7 +241,7 @@ static void elaborate_scope_enumeration(Design*des, NetScope*scope,
|
|||
}
|
||||
// If this is a literal constant and it has a defined
|
||||
// width then the width must match the enumeration width.
|
||||
if (PENumber *tmp = dynamic_cast<PENumber*>(cur->parm)) {
|
||||
if (const PENumber *tmp = dynamic_cast<PENumber*>(cur->parm)) {
|
||||
if (tmp->value().has_len() &&
|
||||
(tmp->value().len() != enum_width)) {
|
||||
cerr << use_enum->get_fileline()
|
||||
|
|
@ -706,7 +706,7 @@ class generate_schemes_work_item_t : public elaborator_work_item_t {
|
|||
: elaborator_work_item_t(des__), scope_(scope), mod_(mod)
|
||||
{ }
|
||||
|
||||
void elaborate_runrun()
|
||||
void elaborate_runrun() override
|
||||
{
|
||||
if (debug_scopes)
|
||||
cerr << mod_->get_fileline() << ": debug: "
|
||||
|
|
@ -965,7 +965,7 @@ bool PGenerate::generate_scope_loop_(Design*des, NetScope*container)
|
|||
// use) the genvar itself, so we can evaluate this expression
|
||||
// the same way any other parameter value is evaluated.
|
||||
NetExpr*init_ex = elab_and_eval(des, container, loop_init, -1, true);
|
||||
NetEConst*init = dynamic_cast<NetEConst*> (init_ex);
|
||||
const NetEConst*init = dynamic_cast<NetEConst*> (init_ex);
|
||||
if (init == 0) {
|
||||
cerr << get_fileline() << ": error: "
|
||||
"Cannot evaluate generate \"loop\" initialization "
|
||||
|
|
@ -991,7 +991,7 @@ bool PGenerate::generate_scope_loop_(Design*des, NetScope*container)
|
|||
container->genvar_tmp = loop_index;
|
||||
container->genvar_tmp_val = genvar;
|
||||
NetExpr*test_ex = elab_and_eval(des, container, loop_test, -1, true);
|
||||
NetEConst*test = dynamic_cast<NetEConst*>(test_ex);
|
||||
const NetEConst*test = dynamic_cast<NetEConst*>(test_ex);
|
||||
if (test == 0) {
|
||||
cerr << get_fileline() << ": error: Cannot evaluate generate \"loop\" "
|
||||
"conditional expression: " << *loop_test << endl;
|
||||
|
|
@ -1123,7 +1123,7 @@ bool PGenerate::generate_scope_loop_(Design*des, NetScope*container)
|
|||
bool PGenerate::generate_scope_condit_(Design*des, NetScope*container, bool else_flag)
|
||||
{
|
||||
NetExpr*test_ex = elab_and_eval(des, container, loop_test, -1, true);
|
||||
NetEConst*test = dynamic_cast<NetEConst*> (test_ex);
|
||||
const NetEConst*test = dynamic_cast<NetEConst*> (test_ex);
|
||||
if (test == 0) {
|
||||
cerr << get_fileline() << ": error: Cannot evaluate genvar"
|
||||
<< " conditional expression: " << *loop_test << endl;
|
||||
|
|
@ -1380,9 +1380,9 @@ class delayed_elaborate_scope_mod_instances : public elaborator_work_item_t {
|
|||
NetScope*sc)
|
||||
: elaborator_work_item_t(des__), obj_(obj), mod_(mod), sc_(sc)
|
||||
{ }
|
||||
~delayed_elaborate_scope_mod_instances() { }
|
||||
~delayed_elaborate_scope_mod_instances() override { }
|
||||
|
||||
virtual void elaborate_runrun();
|
||||
virtual void elaborate_runrun() override;
|
||||
|
||||
private:
|
||||
const PGModule*obj_;
|
||||
|
|
@ -1751,7 +1751,7 @@ void PCase::elaborate_scope(Design*des, NetScope*scope) const
|
|||
for (unsigned idx = 0 ; idx < (*items_).size() ; idx += 1) {
|
||||
ivl_assert(*this, (*items_)[idx]);
|
||||
|
||||
if (Statement*sp = (*items_)[idx]->stat)
|
||||
if (const Statement*sp = (*items_)[idx]->stat)
|
||||
sp -> elaborate_scope(des, scope);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
10
elab_sig.cc
10
elab_sig.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2025 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2012 / Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -538,7 +538,7 @@ bool PGenerate::elaborate_sig(Design*des, NetScope*container) const
|
|||
cerr << get_fileline() << ": debug: Elaborate nets in "
|
||||
<< "scope " << scope_path(*cur)
|
||||
<< " in generate " << id_number << endl;
|
||||
flag = elaborate_sig_(des, *cur) & flag;
|
||||
flag = elaborate_sig_(des, *cur) && flag;
|
||||
}
|
||||
|
||||
return flag;
|
||||
|
|
@ -671,7 +671,7 @@ void PFunction::elaborate_sig(Design*des, NetScope*scope) const
|
|||
ivl_assert(*this, ret_type);
|
||||
}
|
||||
} else {
|
||||
netvector_t*tmp = new netvector_t(IVL_VT_LOGIC);
|
||||
const netvector_t*tmp = new netvector_t(IVL_VT_LOGIC);
|
||||
ret_type = tmp;
|
||||
}
|
||||
|
||||
|
|
@ -970,7 +970,7 @@ bool test_ranges_eeq(const netranges_t&lef, const netranges_t&rig)
|
|||
ivl_type_t PWire::elaborate_type(Design*des, NetScope*scope,
|
||||
const netranges_t &packed_dimensions) const
|
||||
{
|
||||
vector_type_t *vec_type = dynamic_cast<vector_type_t*>(set_data_type_.get());
|
||||
const vector_type_t *vec_type = dynamic_cast<vector_type_t*>(set_data_type_.get());
|
||||
if (set_data_type_ && !vec_type) {
|
||||
ivl_assert(*this, packed_dimensions.empty());
|
||||
return set_data_type_->elaborate_type(des, scope);
|
||||
|
|
@ -1156,7 +1156,7 @@ NetNet* PWire::elaborate_sig(Design*des, NetScope*scope)
|
|||
}
|
||||
|
||||
unsigned nattrib = 0;
|
||||
attrib_list_t*attrib_list = evaluate_attributes(attributes, nattrib,
|
||||
const attrib_list_t*attrib_list = evaluate_attributes(attributes, nattrib,
|
||||
des, scope);
|
||||
|
||||
/* If the net type is supply0 or supply1, replace it
|
||||
|
|
|
|||
96
elaborate.cc
96
elaborate.cc
|
|
@ -199,7 +199,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
|
|||
NetPartSelect::VP);
|
||||
des->add_node(tmp);
|
||||
tmp->set_line(*this);
|
||||
netvector_t*osig_vec = new netvector_t(rval->data_type(),
|
||||
const netvector_t*osig_vec = new netvector_t(rval->data_type(),
|
||||
lval->vector_width()-1,0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::TRI, osig_vec);
|
||||
|
|
@ -227,7 +227,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
|
|||
|
||||
connect(rval->pin(0), driver->pin(1));
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(rval->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(rval->data_type(),
|
||||
rval->vector_width()-1,0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
|
|
@ -258,7 +258,7 @@ NetNet *elaborate_unpacked_array(Design *des, NetScope *scope, const LineInfo &l
|
|||
const NetNet *lval, PExpr *expr)
|
||||
{
|
||||
NetNet *expr_net;
|
||||
PEIdent* ident = dynamic_cast<PEIdent*> (expr);
|
||||
const PEIdent* ident = dynamic_cast<PEIdent*> (expr);
|
||||
if (!ident) {
|
||||
if (dynamic_cast<PEConcat*> (expr)) {
|
||||
cout << loc.get_fileline() << ": sorry: Continuous assignment"
|
||||
|
|
@ -923,7 +923,7 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
|
|||
des->add_node(rep);
|
||||
connect(rep->pin(1), sig->pin(0));
|
||||
|
||||
netvector_t*osig_vec = new netvector_t(IVL_VT_LOGIC,
|
||||
const netvector_t*osig_vec = new netvector_t(IVL_VT_LOGIC,
|
||||
instance_width-1,0);
|
||||
sig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, osig_vec);
|
||||
|
|
@ -1004,7 +1004,7 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
|
|||
unsigned dev = gdx*gate_count;
|
||||
connect(cur[dev+idx]->pin(0), cc->pin(gdx+1));
|
||||
|
||||
netvector_t*tmp2_vec = new netvector_t(IVL_VT_LOGIC);
|
||||
const netvector_t*tmp2_vec = new netvector_t(IVL_VT_LOGIC);
|
||||
NetNet*tmp2 = new NetNet(scope,
|
||||
scope->local_symbol(),
|
||||
NetNet::WIRE, tmp2_vec);
|
||||
|
|
@ -1021,7 +1021,7 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
|
|||
tmp1->set_line(*this);
|
||||
des->add_node(tmp1);
|
||||
connect(tmp1->pin(1), sig->pin(0));
|
||||
netvector_t*tmp2_vec = new netvector_t(sig->data_type());
|
||||
const netvector_t*tmp2_vec = new netvector_t(sig->data_type());
|
||||
NetNet*tmp2 = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp2_vec);
|
||||
tmp2->set_line(*this);
|
||||
|
|
@ -1052,7 +1052,7 @@ NetNet*PGModule::resize_net_to_port_(Design*des, NetScope*scope,
|
|||
ivl_assert(*this, dir != NetNet::NOT_A_PORT);
|
||||
ivl_assert(*this, dir != NetNet::PIMPLICIT);
|
||||
|
||||
netvector_t*tmp_type = new netvector_t(IVL_VT_LOGIC, port_wid-1, 0);
|
||||
const netvector_t*tmp_type = new netvector_t(IVL_VT_LOGIC, port_wid-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_type);
|
||||
tmp->local_flag(true);
|
||||
|
|
@ -1508,7 +1508,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
|
|||
// commonly used feature.)
|
||||
for (unsigned ldx = 0 ; ldx < mport.size() ; ldx += 1) {
|
||||
unsigned lbase = inst * mport.size();
|
||||
PEIdent*pport = mport[ldx];
|
||||
const PEIdent*pport = mport[ldx];
|
||||
ivl_assert(*this, pport);
|
||||
NetNet *netnet = pport->elaborate_subport(des, inst_scope);
|
||||
prts[lbase + ldx] = netnet;
|
||||
|
|
@ -1592,7 +1592,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
|
|||
in that case that the port is input. */
|
||||
|
||||
int context_width = -1;
|
||||
if (PENumber*literal = dynamic_cast<PENumber*>(pins[idx])) {
|
||||
if (const PENumber*literal = dynamic_cast<PENumber*>(pins[idx])) {
|
||||
if (literal->value().is_single())
|
||||
context_width = prts_vector_width;
|
||||
}
|
||||
|
|
@ -1664,7 +1664,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
|
|||
des->add_node(tmp);
|
||||
connect(tmp->pin(1), sig->pin(0));
|
||||
|
||||
netvector_t*tmp2_vec = new netvector_t(sig->data_type(),
|
||||
const netvector_t*tmp2_vec = new netvector_t(sig->data_type(),
|
||||
sig->vector_width()-1,0);
|
||||
NetNet*tmp2 = new NetNet(inner_scope, inner_scope->local_symbol(),
|
||||
NetNet::WIRE, tmp2_vec);
|
||||
|
|
@ -2420,12 +2420,12 @@ NetAssign_* PAssign_::elaborate_lval(Design*des, NetScope*scope) const
|
|||
rval_->test_width(des, scope, mode);
|
||||
// Create a L-value that matches the function return type.
|
||||
NetNet*tmp;
|
||||
netvector_t*tmp_vec = new netvector_t(rval_->expr_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(rval_->expr_type(),
|
||||
rval_->expr_width()-1, 0,
|
||||
rval_->has_sign());
|
||||
|
||||
if(rval_->expr_type() == IVL_VT_DARRAY) {
|
||||
netdarray_t*darray = new netdarray_t(tmp_vec);
|
||||
const netdarray_t*darray = new netdarray_t(tmp_vec);
|
||||
tmp = new NetNet(scope, scope->local_symbol(), NetNet::REG, darray);
|
||||
} else {
|
||||
tmp = new NetNet(scope, scope->local_symbol(), NetNet::REG, tmp_vec);
|
||||
|
|
@ -2636,7 +2636,7 @@ NetProc* PAssign::elaborate_compressed_(Design*des, NetScope*scope) const
|
|||
static bool lval_not_program_variable(const NetAssign_*lv)
|
||||
{
|
||||
while (lv) {
|
||||
NetScope*sig_scope = lv->scope();
|
||||
const NetScope*sig_scope = lv->scope();
|
||||
if (! sig_scope->program_block()) return true;
|
||||
lv = lv->more;
|
||||
}
|
||||
|
|
@ -2752,7 +2752,7 @@ NetProc* PAssign::elaborate(Design*des, NetScope*scope) const
|
|||
if (delay || event_) {
|
||||
unsigned wid = count_lval_width(lv);
|
||||
|
||||
netvector_t*tmp2_vec = new netvector_t(rv->expr_type(),wid-1,0);
|
||||
const netvector_t*tmp2_vec = new netvector_t(rv->expr_type(),wid-1,0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::REG, tmp2_vec);
|
||||
tmp->local_flag(true);
|
||||
|
|
@ -2797,7 +2797,7 @@ NetProc* PAssign::elaborate(Design*des, NetScope*scope) const
|
|||
|
||||
// If the expression is a constant, handle
|
||||
// certain special iteration counts.
|
||||
if (NetEConst*ce = dynamic_cast<NetEConst*>(count)) {
|
||||
if (const NetEConst*ce = dynamic_cast<NetEConst*>(count)) {
|
||||
long val = ce->value().as_long();
|
||||
// We only need the real statement.
|
||||
if (val <= 0) {
|
||||
|
|
@ -2946,7 +2946,7 @@ NetProc* PAssignNB::elaborate(Design*des, NetScope*scope) const
|
|||
ivl_assert(*this, event);
|
||||
|
||||
// Some constant values are special.
|
||||
if (NetEConst*ce = dynamic_cast<NetEConst*>(count)) {
|
||||
if (const NetEConst*ce = dynamic_cast<NetEConst*>(count)) {
|
||||
long val = ce->value().as_long();
|
||||
// We only need the assignment statement.
|
||||
if (val <= 0) {
|
||||
|
|
@ -3056,7 +3056,7 @@ NetProc* PBlock::elaborate(Design*des, NetScope*scope) const
|
|||
// Detect the error that a super.new() statement is in the
|
||||
// midst of a block. Report the error. Continue on with the
|
||||
// elaboration so that other errors might be found.
|
||||
if (PChainConstructor*supernew = dynamic_cast<PChainConstructor*> (list_[idx])) {
|
||||
if (const PChainConstructor*supernew = dynamic_cast<PChainConstructor*> (list_[idx])) {
|
||||
if (debug_elaborate) {
|
||||
cerr << get_fileline() << ": PBlock::elaborate: "
|
||||
<< "Found super.new statement, idx=" << idx << ", "
|
||||
|
|
@ -3335,7 +3335,7 @@ NetProc* PChainConstructor::elaborate(Design*des, NetScope*scope) const
|
|||
// The scope is the <class>.new function, so scope->parent()
|
||||
// is the class. Use that to get the class type that we are
|
||||
// constructing.
|
||||
NetScope*scope_class = scope->parent();
|
||||
const NetScope*scope_class = scope->parent();
|
||||
const netclass_t*class_this = scope_class->class_def();
|
||||
ivl_assert(*this, class_this);
|
||||
|
||||
|
|
@ -3376,7 +3376,7 @@ NetProc* PChainConstructor::elaborate(Design*des, NetScope*scope) const
|
|||
continue;
|
||||
}
|
||||
|
||||
if (NetExpr*tmp = def->port_defe(idx)) {
|
||||
if (const NetExpr*tmp = def->port_defe(idx)) {
|
||||
parms[idx] = tmp->dup_expr();
|
||||
continue;
|
||||
}
|
||||
|
|
@ -3429,7 +3429,7 @@ NetProc* PCondit::elaborate(Design*des, NetScope*scope) const
|
|||
// then look at the value and elaborate either the if statement
|
||||
// or the else statement. I don't need both. If there is no
|
||||
// else_ statement, then use an empty block as a noop.
|
||||
if (NetEConst*ce = dynamic_cast<NetEConst*>(expr)) {
|
||||
if (const NetEConst*ce = dynamic_cast<NetEConst*>(expr)) {
|
||||
verinum val = ce->value();
|
||||
if (debug_elaborate) {
|
||||
cerr << get_fileline() << ": debug: Condition expression "
|
||||
|
|
@ -3476,14 +3476,14 @@ NetProc* PCondit::elaborate(Design*des, NetScope*scope) const
|
|||
// Detect the special cases that the if or else statements are
|
||||
// empty blocks. If this is the case, remove the blocks as
|
||||
// null statements.
|
||||
if (NetBlock*tmp = dynamic_cast<NetBlock*>(i)) {
|
||||
if (const NetBlock*tmp = dynamic_cast<NetBlock*>(i)) {
|
||||
if (tmp->proc_first() == 0) {
|
||||
delete i;
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (NetBlock*tmp = dynamic_cast<NetBlock*>(e)) {
|
||||
if (const NetBlock*tmp = dynamic_cast<NetBlock*>(e)) {
|
||||
if (tmp->proc_first() == 0) {
|
||||
delete e;
|
||||
e = 0;
|
||||
|
|
@ -3642,7 +3642,7 @@ NetProc* PCallTask::elaborate_usr(Design*des, NetScope*scope) const
|
|||
|
||||
ivl_assert(*this, task);
|
||||
ivl_assert(*this, task->type() == NetScope::TASK);
|
||||
NetTaskDef*def = task->task_def();
|
||||
const NetTaskDef*def = task->task_def();
|
||||
if (def == 0) {
|
||||
cerr << get_fileline() << ": internal error: task " << path_
|
||||
<< " doesn't have a definition in " << scope_path(scope)
|
||||
|
|
@ -4241,7 +4241,7 @@ NetProc* PCallTask::elaborate_build_call_(Design*des, NetScope*scope,
|
|||
if (args[parms_idx]) {
|
||||
rv = elaborate_rval_expr(des, scope, port->net_type(),
|
||||
args[parms_idx]);
|
||||
if (NetEEvent*evt = dynamic_cast<NetEEvent*> (rv)) {
|
||||
if (const NetEEvent*evt = dynamic_cast<NetEEvent*> (rv)) {
|
||||
cerr << evt->get_fileline() << ": error: An event '"
|
||||
<< evt->event()->name() << "' can not be a user "
|
||||
"task argument." << endl;
|
||||
|
|
@ -4651,7 +4651,7 @@ NetProc* PDelayStatement::elaborate(Design*des, NetScope*scope) const
|
|||
NetExpr*dex = elaborate_delay_expr(delay_, des, scope);
|
||||
|
||||
NetPDelay *obj;
|
||||
if (NetEConst*tmp = dynamic_cast<NetEConst*>(dex)) {
|
||||
if (const NetEConst*tmp = dynamic_cast<NetEConst*>(dex)) {
|
||||
if (statement_)
|
||||
obj = new NetPDelay(tmp->value().as_ulong64(),
|
||||
statement_->elaborate(des, scope));
|
||||
|
|
@ -4951,7 +4951,7 @@ cerr << endl;
|
|||
named event, then handle this case all at once and
|
||||
skip the rest of the expression handling. */
|
||||
|
||||
if (PEIdent*id = dynamic_cast<PEIdent*>(expr_[idx]->expr())) {
|
||||
if (const PEIdent*id = dynamic_cast<PEIdent*>(expr_[idx]->expr())) {
|
||||
symbol_search_results sr;
|
||||
symbol_search(this, des, scope, id->path(), id->lexical_pos(), &sr);
|
||||
|
||||
|
|
@ -5168,7 +5168,7 @@ NetProc* PEventStatement::elaborate_wait(Design*des, NetScope*scope,
|
|||
constant. Constant true is OK (it becomes transparent) but
|
||||
constant false is almost certainly not what is intended. */
|
||||
ivl_assert(*this, expr->expr_width() == 1);
|
||||
if (NetEConst*ce = dynamic_cast<NetEConst*>(expr)) {
|
||||
if (const NetEConst*ce = dynamic_cast<NetEConst*>(expr)) {
|
||||
verinum val = ce->value();
|
||||
ivl_assert(*this, val.len() == 1);
|
||||
|
||||
|
|
@ -5896,7 +5896,7 @@ NetProc* PRepeat::elaborate(Design*des, NetScope*scope) const
|
|||
|
||||
// If the expression is a constant, handle certain special
|
||||
// iteration counts.
|
||||
if (NetEConst*ce = dynamic_cast<NetEConst*>(expr)) {
|
||||
if (const NetEConst*ce = dynamic_cast<NetEConst*>(expr)) {
|
||||
long val = ce->value().as_long();
|
||||
if (val <= 0) {
|
||||
delete expr;
|
||||
|
|
@ -6254,7 +6254,7 @@ void PSpecPath::elaborate(Design*des, NetScope*scope) const
|
|||
PExpr*exp = delays[idx];
|
||||
NetExpr*cur = elab_and_eval(des, scope, exp, -1);
|
||||
|
||||
if (NetEConst*con = dynamic_cast<NetEConst*> (cur)) {
|
||||
if (const NetEConst*con = dynamic_cast<NetEConst*> (cur)) {
|
||||
verinum fn = con->value();
|
||||
delay_value[idx] = des->scale_to_precision(fn.as_ulong64(),
|
||||
scope);
|
||||
|
|
@ -6310,7 +6310,7 @@ void PSpecPath::elaborate(Design*des, NetScope*scope) const
|
|||
typedef std::vector<perm_string>::const_iterator str_vec_iter;
|
||||
for (str_vec_iter cur = src.begin();
|
||||
( cur != src.end() && all_single); ++ cur) {
|
||||
NetNet *psig = scope->find_signal(*cur);
|
||||
const NetNet *psig = scope->find_signal(*cur);
|
||||
/* We will report a missing signal as invalid later. For
|
||||
* now assume it's a single bit. */
|
||||
if (psig == 0) continue;
|
||||
|
|
@ -6318,7 +6318,7 @@ void PSpecPath::elaborate(Design*des, NetScope*scope) const
|
|||
}
|
||||
for (str_vec_iter cur = dst.begin();
|
||||
( cur != dst.end() && all_single); ++ cur) {
|
||||
NetNet *psig = scope->find_signal(*cur);
|
||||
const NetNet *psig = scope->find_signal(*cur);
|
||||
/* The same as above for source paths. */
|
||||
if (psig == 0) continue;
|
||||
if (psig->vector_width() != 1) all_single = false;
|
||||
|
|
@ -6723,7 +6723,7 @@ bool Module::elaborate(Design*des, NetScope*scope) const
|
|||
void netclass_t::elaborate(Design*des, PClass*pclass)
|
||||
{
|
||||
if (! pclass->type->initialize_static.empty()) {
|
||||
std::vector<Statement*>&stmt_list = pclass->type->initialize_static;
|
||||
const std::vector<Statement*>&stmt_list = pclass->type->initialize_static;
|
||||
NetBlock*stmt = new NetBlock(NetBlock::SEQU, 0);
|
||||
for (size_t idx = 0 ; idx < stmt_list.size() ; idx += 1) {
|
||||
NetProc*tmp = stmt_list[idx]->elaborate(des, class_scope_);
|
||||
|
|
@ -6822,7 +6822,7 @@ bool PGenerate::elaborate(Design*des, NetScope*container) const
|
|||
cerr << get_fileline() << ": debug: Elaborate in "
|
||||
<< "scope " << scope_path(scope) << endl;
|
||||
|
||||
flag = elaborate_(des, scope) & flag;
|
||||
flag = elaborate_(des, scope) && flag;
|
||||
}
|
||||
|
||||
return flag;
|
||||
|
|
@ -6972,9 +6972,9 @@ class elaborate_package_t : public elaborator_work_item_t {
|
|||
: elaborator_work_item_t(d), scope_(scope), package_(p)
|
||||
{ }
|
||||
|
||||
~elaborate_package_t() { }
|
||||
~elaborate_package_t() override { }
|
||||
|
||||
virtual void elaborate_runrun()
|
||||
virtual void elaborate_runrun() override
|
||||
{
|
||||
if (! package_->elaborate_scope(des, scope_))
|
||||
des->errors += 1;
|
||||
|
|
@ -6991,9 +6991,9 @@ class elaborate_root_scope_t : public elaborator_work_item_t {
|
|||
: elaborator_work_item_t(des__), scope_(scope), rmod_(rmod)
|
||||
{ }
|
||||
|
||||
~elaborate_root_scope_t() { }
|
||||
~elaborate_root_scope_t() override { }
|
||||
|
||||
virtual void elaborate_runrun()
|
||||
virtual void elaborate_runrun() override
|
||||
{
|
||||
Module::replace_t root_repl;
|
||||
for (list<Module::named_expr_t>::iterator cur = Module::user_defparms.begin()
|
||||
|
|
@ -7025,9 +7025,9 @@ class top_defparams : public elaborator_work_item_t {
|
|||
: elaborator_work_item_t(des__)
|
||||
{ }
|
||||
|
||||
~top_defparams() { }
|
||||
~top_defparams() override { }
|
||||
|
||||
virtual void elaborate_runrun()
|
||||
virtual void elaborate_runrun() override
|
||||
{
|
||||
if (debug_scopes) {
|
||||
cerr << "debug: top_defparams::elaborate_runrun()" << endl;
|
||||
|
|
@ -7056,9 +7056,9 @@ class later_defparams : public elaborator_work_item_t {
|
|||
: elaborator_work_item_t(des__)
|
||||
{ }
|
||||
|
||||
~later_defparams() { }
|
||||
~later_defparams() override { }
|
||||
|
||||
virtual void elaborate_runrun()
|
||||
virtual void elaborate_runrun() override
|
||||
{
|
||||
if (debug_scopes) {
|
||||
cerr << "debug: later_defparams::elaborate_runrun()" << endl;
|
||||
|
|
@ -7434,7 +7434,7 @@ static void check_timescales()
|
|||
}
|
||||
|
||||
for (mod = pform_modules.begin(); mod != pform_modules.end(); ++mod) {
|
||||
Module*mp = (*mod).second;
|
||||
const Module*mp = (*mod).second;
|
||||
if (mp->has_explicit_timescale())
|
||||
continue;
|
||||
cerr << " : -- module " << (*mod).first
|
||||
|
|
@ -7445,7 +7445,7 @@ static void check_timescales()
|
|||
return;
|
||||
|
||||
for (pkg = pform_packages.begin(); pkg != pform_packages.end(); ++pkg) {
|
||||
PPackage*pp = *pkg;
|
||||
const PPackage*pp = *pkg;
|
||||
if (pp->has_explicit_timescale())
|
||||
continue;
|
||||
cerr << " : -- package " << pp->pscope_name()
|
||||
|
|
@ -7656,7 +7656,7 @@ Design* elaborate(list<perm_string>roots)
|
|||
// creates all the NetNet and NetMemory objects for declared
|
||||
// objects.
|
||||
for (i = 0; i < pack_elems.size(); i += 1) {
|
||||
PPackage*pack = pack_elems[i].pack;
|
||||
const PPackage*pack = pack_elems[i].pack;
|
||||
NetScope*scope= pack_elems[i].scope;
|
||||
|
||||
if (! pack->elaborate_sig(des, scope)) {
|
||||
|
|
@ -7680,7 +7680,7 @@ Design* elaborate(list<perm_string>roots)
|
|||
}
|
||||
|
||||
for (i = 0; i < root_elems.size(); i++) {
|
||||
Module *rmod = root_elems[i].mod;
|
||||
const Module *rmod = root_elems[i].mod;
|
||||
NetScope *scope = root_elems[i].scope;
|
||||
scope->set_num_ports( rmod->port_count() );
|
||||
|
||||
|
|
@ -7708,7 +7708,7 @@ Design* elaborate(list<perm_string>roots)
|
|||
for (unsigned pin = 0; pin < mport.size(); pin += 1) {
|
||||
// This really does more than we need and adds extra
|
||||
// stuff to the design that should be cleaned later.
|
||||
NetNet *netnet = mport[pin]->elaborate_subport(des, scope);
|
||||
const NetNet *netnet = mport[pin]->elaborate_subport(des, scope);
|
||||
if (netnet != 0) {
|
||||
// Elaboration may actually fail with
|
||||
// erroneous input source
|
||||
|
|
@ -7729,13 +7729,13 @@ Design* elaborate(list<perm_string>roots)
|
|||
// run through the pform again and generate the full netlist.
|
||||
|
||||
for (i = 0; i < pack_elems.size(); i += 1) {
|
||||
PPackage*pkg = pack_elems[i].pack;
|
||||
const PPackage*pkg = pack_elems[i].pack;
|
||||
NetScope*scope = pack_elems[i].scope;
|
||||
rc &= pkg->elaborate(des, scope);
|
||||
}
|
||||
|
||||
for (i = 0; i < root_elems.size(); i++) {
|
||||
Module *rmod = root_elems[i].mod;
|
||||
const Module *rmod = root_elems[i].mod;
|
||||
NetScope *scope = root_elems[i].scope;
|
||||
rc &= rmod->elaborate(des, scope);
|
||||
}
|
||||
|
|
|
|||
10
emit.cc
10
emit.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1998-2025 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
|
||||
|
|
@ -391,7 +391,7 @@ void NetBlock::emit_recurse(struct target_t*tgt) const
|
|||
if (last_ == 0)
|
||||
return;
|
||||
|
||||
NetProc*cur = last_;
|
||||
const NetProc*cur = last_;
|
||||
do {
|
||||
cur = cur->next_;
|
||||
cur->emit_proc(tgt);
|
||||
|
|
@ -467,7 +467,7 @@ void NetScope::emit_scope(struct target_t*tgt) const
|
|||
|
||||
tgt->scope(this);
|
||||
|
||||
for (NetEvent*cur = events_ ; cur ; cur = cur->snext_)
|
||||
for (const NetEvent*cur = events_ ; cur ; cur = cur->snext_)
|
||||
tgt->event(cur);
|
||||
|
||||
for (map<perm_string,netclass_t*>::const_iterator cur = classes_.begin()
|
||||
|
|
@ -566,7 +566,7 @@ int Design::emit(struct target_t*tgt) const
|
|||
// emit nodes
|
||||
bool nodes_rc = true;
|
||||
if (nodes_) {
|
||||
NetNode*cur = nodes_->node_next_;
|
||||
const NetNode*cur = nodes_->node_next_;
|
||||
do {
|
||||
nodes_rc = nodes_rc && cur->emit_node(tgt);
|
||||
cur = cur->node_next_;
|
||||
|
|
@ -575,7 +575,7 @@ int Design::emit(struct target_t*tgt) const
|
|||
|
||||
|
||||
bool branches_rc = true;
|
||||
for (NetBranch*cur = branches_ ; cur ; cur = cur->next_) {
|
||||
for (const NetBranch*cur = branches_ ; cur ; cur = cur->next_) {
|
||||
branches_rc = tgt->branch(cur) && branches_rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2025 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
|
||||
|
|
@ -58,9 +58,9 @@ attrib_list_t* evaluate_attributes(const map<perm_string,PExpr*>&att,
|
|||
if (!tmp)
|
||||
continue;
|
||||
|
||||
if (NetEConst *ce = dynamic_cast<NetEConst*>(tmp)) {
|
||||
if (const NetEConst *ce = dynamic_cast<NetEConst*>(tmp)) {
|
||||
table[idx].val = ce->value();
|
||||
} else if (NetECReal *cer = dynamic_cast<NetECReal*>(tmp)) {
|
||||
} else if (const NetECReal *cer = dynamic_cast<NetECReal*>(tmp)) {
|
||||
table[idx].val = verinum(cer->value().as_long());
|
||||
} else {
|
||||
cerr << exp->get_fileline() << ": error: ``"
|
||||
|
|
|
|||
16
eval_tree.cc
16
eval_tree.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2022 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2025 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
|
||||
|
|
@ -153,8 +153,8 @@ NetExpr* NetEBAdd::eval_tree()
|
|||
// example, the expression (a + 2) - 1 can be rewritten as a + 1.
|
||||
|
||||
NetEBAdd*se = dynamic_cast<NetEBAdd*>(left_);
|
||||
NetEConst*lc = se? dynamic_cast<NetEConst*>(se->right_) : NULL;
|
||||
NetEConst*rc = dynamic_cast<NetEConst*>(right_);
|
||||
const NetEConst*lc = se? dynamic_cast<NetEConst*>(se->right_) : NULL;
|
||||
const NetEConst*rc = dynamic_cast<NetEConst*>(right_);
|
||||
|
||||
if (lc != 0 && rc != 0) {
|
||||
ivl_assert(*this, se != 0);
|
||||
|
|
@ -1194,12 +1194,12 @@ NetEConst* NetEConcat::eval_arguments_(const vector<NetExpr*>&vals,
|
|||
NetEConst* NetESelect::eval_tree()
|
||||
{
|
||||
eval_expr(expr_);
|
||||
NetEConst*expr = dynamic_cast<NetEConst*>(expr_);
|
||||
const NetEConst*expr = dynamic_cast<NetEConst*>(expr_);
|
||||
|
||||
long bval = 0;
|
||||
if (base_) {
|
||||
eval_expr(base_);
|
||||
NetEConst*base = dynamic_cast<NetEConst*>(base_);
|
||||
const NetEConst*base = dynamic_cast<NetEConst*>(base_);
|
||||
|
||||
if (base == 0) return 0;
|
||||
|
||||
|
|
@ -1242,11 +1242,11 @@ NetEConst* NetESelect::eval_tree()
|
|||
|
||||
static void print_ternary_cond(NetExpr*expr)
|
||||
{
|
||||
if (NetEConst*c = dynamic_cast<NetEConst*>(expr)) {
|
||||
if (const NetEConst*c = dynamic_cast<NetEConst*>(expr)) {
|
||||
cerr << c->value() << endl;
|
||||
return;
|
||||
}
|
||||
if (NetECReal*c = dynamic_cast<NetECReal*>(expr)) {
|
||||
if (const NetECReal*c = dynamic_cast<NetECReal*>(expr)) {
|
||||
cerr << c->value() << endl;
|
||||
return;
|
||||
}
|
||||
|
|
@ -2499,7 +2499,7 @@ NetExpr* NetEUFunc::eval_tree()
|
|||
return 0;
|
||||
}
|
||||
|
||||
NetFuncDef*def = func_->func_def();
|
||||
const NetFuncDef*def = func_->func_def();
|
||||
ivl_assert(*this, def);
|
||||
|
||||
vector<NetExpr*>args(parms_.size());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021 Martin Whitaker (icarus@martin-whitaker.me.uk)
|
||||
* Copyright (c) 2016-2025 Martin Whitaker (icarus@martin-whitaker.me.uk)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -47,9 +47,9 @@ struct exposenodes_functor : public functor_t {
|
|||
|
||||
unsigned count;
|
||||
|
||||
virtual void lpm_mux(Design*des, NetMux*obj);
|
||||
virtual void lpm_part_select(Design*des, NetPartSelect*obj);
|
||||
virtual void lpm_substitute(Design*des, NetSubstitute*obj);
|
||||
virtual void lpm_mux(Design*des, NetMux*obj) override;
|
||||
virtual void lpm_part_select(Design*des, NetPartSelect*obj) override;
|
||||
virtual void lpm_substitute(Design*des, NetSubstitute*obj) override;
|
||||
};
|
||||
|
||||
static bool expose_nexus(Nexus*nex)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2025 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
|
||||
|
|
@ -177,7 +177,7 @@ NetNet* NetEBBits::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
rsig = pad_to_width(des, rsig, width, *this);
|
||||
|
||||
ivl_assert(*this, lsig->vector_width() == rsig->vector_width());
|
||||
netvector_t*osig_vec = new netvector_t(expr_type(), width-1, 0);
|
||||
const netvector_t*osig_vec = new netvector_t(expr_type(), width-1, 0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -247,7 +247,7 @@ NetNet* NetEBComp::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
rsig = pad_to_width(des, rsig, width, *this);
|
||||
}
|
||||
|
||||
netvector_t*osig_vec = new netvector_t(IVL_VT_LOGIC);
|
||||
const netvector_t*osig_vec = new netvector_t(IVL_VT_LOGIC);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -576,7 +576,7 @@ NetNet* NetEBLogic::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
olog->set_line(*this);
|
||||
des->add_node(olog);
|
||||
|
||||
netvector_t*osig_tmp = new netvector_t(expr_type());
|
||||
const netvector_t*osig_tmp = new netvector_t(expr_type());
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_tmp);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -618,7 +618,7 @@ NetNet* NetEBShift::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
/* Detect the special case where the shift amount is
|
||||
constant. Evaluate the shift amount, and simply reconnect
|
||||
the left operand to the output, but shifted. */
|
||||
if (NetEConst*rcon = dynamic_cast<NetEConst*>(right_)) {
|
||||
if (const NetEConst*rcon = dynamic_cast<NetEConst*>(right_)) {
|
||||
verinum shift_v = rcon->value();
|
||||
long shift = shift_v.as_long();
|
||||
|
||||
|
|
@ -628,7 +628,7 @@ NetNet* NetEBShift::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
if (shift == 0)
|
||||
return lsig;
|
||||
|
||||
netvector_t*osig_vec = new netvector_t(expr_type(), expr_width()-1,0);
|
||||
const netvector_t*osig_vec = new netvector_t(expr_type(), expr_width()-1,0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -650,7 +650,7 @@ NetNet* NetEBShift::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
psel->set_line(*this);
|
||||
des->add_node(psel);
|
||||
|
||||
netvector_t*psig_vec = new netvector_t(expr_type(), part_width-1, 0);
|
||||
const netvector_t*psig_vec = new netvector_t(expr_type(), part_width-1, 0);
|
||||
NetNet*psig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, psig_vec);
|
||||
psig->set_line(*this);
|
||||
|
|
@ -678,7 +678,7 @@ NetNet* NetEBShift::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
znum);
|
||||
des->add_node(zcon);
|
||||
|
||||
netvector_t*zsig_vec = new netvector_t(osig->data_type(),
|
||||
const netvector_t*zsig_vec = new netvector_t(osig->data_type(),
|
||||
znum.len()-1, 0);
|
||||
NetNet*zsig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, zsig_vec);
|
||||
|
|
@ -709,7 +709,7 @@ NetNet* NetEBShift::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
|
||||
if (rsig == 0) return 0;
|
||||
|
||||
netvector_t*osig_vec = new netvector_t(expr_type(), expr_width()-1, 0);
|
||||
const netvector_t*osig_vec = new netvector_t(expr_type(), expr_width()-1, 0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -966,7 +966,7 @@ NetNet* NetEUBits::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
}
|
||||
|
||||
unsigned width = isig->vector_width();
|
||||
netvector_t*osig_vec = new netvector_t(expr_type(), width-1, 0);
|
||||
const netvector_t*osig_vec = new netvector_t(expr_type(), width-1, 0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -1009,7 +1009,7 @@ NetNet* NetEUnary::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
if (expr_->has_sign() == false)
|
||||
return sub;
|
||||
|
||||
netvector_t*sig_vec = new netvector_t(sub->data_type(),
|
||||
const netvector_t*sig_vec = new netvector_t(sub->data_type(),
|
||||
sub->vector_width()-1, 0);
|
||||
NetNet*sig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, sig_vec);
|
||||
|
|
@ -1084,7 +1084,7 @@ NetNet* NetEUReduce::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
gate->set_line(*this);
|
||||
des->add_node(gate);
|
||||
|
||||
netvector_t*osig_vec = new netvector_t(expr_type());
|
||||
const netvector_t*osig_vec = new netvector_t(expr_type());
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
|
|
@ -1139,7 +1139,7 @@ NetNet* NetESelect::synthesize(Design *des, NetScope*scope, NetExpr*root)
|
|||
|
||||
// Detect the special case that there is a base expression and
|
||||
// it is constant. In this case we can generate fixed part selects.
|
||||
if (NetEConst*base_const = dynamic_cast<NetEConst*>(base_)) {
|
||||
if (const NetEConst*base_const = dynamic_cast<NetEConst*>(base_)) {
|
||||
verinum base_tmp = base_const->value();
|
||||
unsigned select_width = expr_width();
|
||||
|
||||
|
|
@ -1194,7 +1194,7 @@ NetNet* NetESelect::synthesize(Design *des, NetScope*scope, NetExpr*root)
|
|||
des->add_node(sel);
|
||||
|
||||
ivl_assert(*this, select_width > 0);
|
||||
netvector_t*tmp_vec = new netvector_t(sub->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(sub->data_type(),
|
||||
select_width-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
|
|
@ -1243,7 +1243,7 @@ NetNet* NetESelect::synthesize(Design *des, NetScope*scope, NetExpr*root)
|
|||
sel->set_line(*this);
|
||||
des->add_node(sel);
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(sub->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(sub->data_type(),
|
||||
expr_width()-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, tmp_vec);
|
||||
|
|
@ -1321,7 +1321,7 @@ NetNet* NetESelect::synthesize(Design *des, NetScope*scope, NetExpr*root)
|
|||
con->set_line(*this);
|
||||
des->add_node(con);
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(expr_type(), pad_width-1, 0);
|
||||
const netvector_t*tmp_vec = new netvector_t(expr_type(), pad_width-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, tmp_vec);
|
||||
tmp->set_line(*this);
|
||||
|
|
@ -1376,7 +1376,7 @@ NetNet* NetETernary::synthesize(Design *des, NetScope*scope, NetExpr*root)
|
|||
ivl_assert(*this, csig->vector_width() == 1);
|
||||
|
||||
unsigned width=expr_width();
|
||||
netvector_t*osig_vec = new netvector_t(expr_type(), width-1, 0);
|
||||
const netvector_t*osig_vec = new netvector_t(expr_type(), width-1, 0);
|
||||
NetNet*osig = new NetNet(csig->scope(), path, NetNet::IMPLICIT, osig_vec);
|
||||
osig->set_line(*this);
|
||||
osig->local_flag(true);
|
||||
|
|
@ -1421,7 +1421,7 @@ NetNet* NetESignal::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
// If this is a synthesis with a specific value for the
|
||||
// signal, then replace it (here) with a constant value.
|
||||
if (net_->scope()==scope && net_->name()==scope->genvar_tmp) {
|
||||
netvector_t*tmp_vec = new netvector_t(net_->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(net_->data_type(),
|
||||
net_->vector_width()-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, tmp_vec);
|
||||
|
|
@ -1452,7 +1452,7 @@ NetNet* NetESignal::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
return tmp;
|
||||
}
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(net_->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(net_->data_type(),
|
||||
net_->vector_width()-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::IMPLICIT, tmp_vec);
|
||||
|
|
@ -1462,7 +1462,7 @@ NetNet* NetESignal::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
// For NetExpr objects, the word index is already converted to
|
||||
// a canonical (lsb==0) address. Just use the index directly.
|
||||
|
||||
if (NetEConst*index_co = dynamic_cast<NetEConst*> (word_)) {
|
||||
if (const NetEConst*index_co = dynamic_cast<NetEConst*> (word_)) {
|
||||
|
||||
long index = index_co->value().as_long();
|
||||
connect(tmp->pin(0), net_->pin(index));
|
||||
|
|
@ -1611,7 +1611,7 @@ NetNet* NetEUFunc::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
des->add_node(net);
|
||||
|
||||
/* Create an output signal and connect it to the function. */
|
||||
netvector_t*osig_vec = new netvector_t(result_sig_->expr_type(),
|
||||
const netvector_t*osig_vec = new netvector_t(result_sig_->expr_type(),
|
||||
result_sig_->vector_width()-1, 0);
|
||||
NetNet*osig = new NetNet(scope_, scope_->local_symbol(), NetNet::WIRE,
|
||||
osig_vec);
|
||||
|
|
@ -1626,7 +1626,7 @@ NetNet* NetEUFunc::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
}
|
||||
|
||||
/* Connect the pins to the arguments. */
|
||||
NetFuncDef*def = func_->func_def();
|
||||
const NetFuncDef*def = func_->func_def();
|
||||
for (unsigned idx = 0; idx < eparms.size(); idx += 1) {
|
||||
unsigned width = def->port(idx)->vector_width();
|
||||
NetNet*tmp;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2025 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
|
||||
|
|
@ -56,8 +56,8 @@ const char* StringHeap::add(const char*text)
|
|||
char*buf = strdup(text);
|
||||
#ifdef CHECK_WITH_VALGRIND
|
||||
string_pool_count += 1;
|
||||
string_pool = (char**)realloc(string_pool,
|
||||
string_pool_count*sizeof(char**));
|
||||
string_pool = static_cast<char**>(realloc(string_pool,
|
||||
string_pool_count*sizeof(char**)));
|
||||
string_pool[string_pool_count-1] = buf;
|
||||
#endif
|
||||
return buf;
|
||||
|
|
@ -72,19 +72,19 @@ const char* StringHeap::add(const char*text)
|
|||
// same pointer.
|
||||
if (rem > 0) {
|
||||
char*old = cell_base_;
|
||||
cell_base_ = (char*)realloc(cell_base_, cell_ptr_);
|
||||
cell_base_ = static_cast<char*>(realloc(cell_base_, cell_ptr_));
|
||||
assert(cell_base_ != 0);
|
||||
assert(cell_base_ == old);
|
||||
}
|
||||
// start new cell
|
||||
cell_base_ = (char*)malloc(DEFAULT_CELL_SIZE);
|
||||
cell_base_ = static_cast<char*>(malloc(DEFAULT_CELL_SIZE));
|
||||
cell_ptr_ = 0;
|
||||
rem = DEFAULT_CELL_SIZE;
|
||||
assert(cell_base_ != 0);
|
||||
#ifdef CHECK_WITH_VALGRIND
|
||||
string_pool_count += 1;
|
||||
string_pool = (char **) realloc(string_pool,
|
||||
string_pool_count*sizeof(char **));
|
||||
string_pool = static_cast<char **>(realloc(string_pool,
|
||||
string_pool_count*sizeof(char **)));
|
||||
string_pool[string_pool_count-1] = cell_base_;
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2025 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
|
||||
|
|
@ -122,7 +122,7 @@ int build_library_index(const char*path, bool key_case_sensitive)
|
|||
/* Scan the director for files. check each file name to see if
|
||||
it has one of the configured suffixes. If it does, then use
|
||||
the root of the name as the key and index the file name. */
|
||||
while (struct dirent*de = readdir(dir)) {
|
||||
while (const struct dirent*de = readdir(dir)) {
|
||||
unsigned namsiz = strlen(de->d_name);
|
||||
char*key = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2025 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
|
||||
|
|
@ -290,7 +290,7 @@ unsigned NetAssignBase::l_val_count() const
|
|||
unsigned NetAssignBase::lwidth() const
|
||||
{
|
||||
unsigned sum = 0;
|
||||
for (NetAssign_*cur = lval_ ; cur ; cur = cur->more)
|
||||
for (const NetAssign_*cur = lval_ ; cur ; cur = cur->more)
|
||||
sum += cur->lwidth();
|
||||
return sum;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2022 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2025 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
|
||||
|
|
@ -643,7 +643,7 @@ void NetScope::evaluate_parameter_logic_(Design*des, param_ref_t cur)
|
|||
if ((*cur).second.range == 0)
|
||||
return;
|
||||
|
||||
NetEConst*val = dynamic_cast<NetEConst*>((*cur).second.val);
|
||||
const NetEConst*val = dynamic_cast<NetEConst*>((*cur).second.val);
|
||||
ivl_assert(*expr, val);
|
||||
|
||||
verinum value = val->value();
|
||||
|
|
@ -659,7 +659,7 @@ void NetScope::evaluate_parameter_logic_(Design*des, param_ref_t cur)
|
|||
continue;
|
||||
|
||||
if (value_range->low_expr) {
|
||||
NetEConst*tmp = dynamic_cast<NetEConst*>(value_range->low_expr);
|
||||
const NetEConst*tmp = dynamic_cast<NetEConst*>(value_range->low_expr);
|
||||
ivl_assert(*value_range->low_expr, tmp);
|
||||
if (value_range->low_open_flag && value <= tmp->value())
|
||||
continue;
|
||||
|
|
@ -668,7 +668,7 @@ void NetScope::evaluate_parameter_logic_(Design*des, param_ref_t cur)
|
|||
}
|
||||
|
||||
if (value_range->high_expr) {
|
||||
NetEConst*tmp = dynamic_cast<NetEConst*>(value_range->high_expr);
|
||||
const NetEConst*tmp = dynamic_cast<NetEConst*>(value_range->high_expr);
|
||||
ivl_assert(*value_range->high_expr, tmp);
|
||||
if (value_range->high_open_flag && value >= tmp->value())
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2022 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2025 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
|
||||
|
|
@ -73,7 +73,7 @@ const NetScope* NetEvent::scope() const
|
|||
unsigned NetEvent::nprobe() const
|
||||
{
|
||||
unsigned cnt = 0;
|
||||
NetEvProbe*cur = probes_;
|
||||
const NetEvProbe*cur = probes_;
|
||||
while (cur) {
|
||||
cnt += 1;
|
||||
cur = cur->enext_;
|
||||
|
|
@ -105,7 +105,7 @@ const NetEvProbe* NetEvent::probe(unsigned idx) const
|
|||
unsigned NetEvent::ntrig() const
|
||||
{
|
||||
unsigned cnt = 0;
|
||||
NetEvTrig*cur = trig_;
|
||||
const NetEvTrig*cur = trig_;
|
||||
while (cur) {
|
||||
cnt += 1;
|
||||
cur = cur->enext_;
|
||||
|
|
@ -198,7 +198,7 @@ void NetEvent::find_similar_event(list<NetEvent*>&event_list)
|
|||
continue;
|
||||
|
||||
unsigned tcnt = 0;
|
||||
for (NetEvProbe*cur = tmp->probes_ ; cur ; cur = cur->enext_)
|
||||
for (const NetEvProbe*cur = tmp->probes_ ; cur ; cur = cur->enext_)
|
||||
tcnt += 1;
|
||||
|
||||
if (tcnt == probe_count)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2025 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
|
||||
|
|
@ -52,7 +52,7 @@ NetUserFunc::~NetUserFunc()
|
|||
|
||||
unsigned NetUserFunc::port_width(unsigned port) const
|
||||
{
|
||||
NetFuncDef*fdef = def_->func_def();
|
||||
const NetFuncDef*fdef = def_->func_def();
|
||||
|
||||
/* Port 0 is the return port. */
|
||||
if (port == 0) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 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
|
||||
|
|
@ -329,7 +329,7 @@ bool NetAssign::eval_func_lval_(const LineInfo&loc,
|
|||
return false;
|
||||
}
|
||||
|
||||
NetEConst*word_const = dynamic_cast<NetEConst*>(word_result);
|
||||
const NetEConst*word_const = dynamic_cast<NetEConst*>(word_result);
|
||||
ivl_assert(loc, word_const);
|
||||
|
||||
if (!word_const->value().is_defined())
|
||||
|
|
@ -353,7 +353,7 @@ bool NetAssign::eval_func_lval_(const LineInfo&loc,
|
|||
return false;
|
||||
}
|
||||
|
||||
NetEConst*base_const = dynamic_cast<NetEConst*>(base_result);
|
||||
const NetEConst*base_const = dynamic_cast<NetEConst*>(base_result);
|
||||
ivl_assert(loc, base_const);
|
||||
|
||||
long base = base_const->value().as_long();
|
||||
|
|
@ -361,10 +361,10 @@ bool NetAssign::eval_func_lval_(const LineInfo&loc,
|
|||
if (old_lval == 0)
|
||||
old_lval = make_const_x(lval->sig()->vector_width());
|
||||
|
||||
NetEConst*lval_const = dynamic_cast<NetEConst*>(old_lval);
|
||||
const NetEConst*lval_const = dynamic_cast<NetEConst*>(old_lval);
|
||||
ivl_assert(loc, lval_const);
|
||||
verinum lval_v = lval_const->value();
|
||||
NetEConst*rval_const = dynamic_cast<NetEConst*>(rval_result);
|
||||
const NetEConst*rval_const = dynamic_cast<NetEConst*>(rval_result);
|
||||
ivl_assert(loc, rval_const);
|
||||
verinum rval_v = rval_const->value();
|
||||
|
||||
|
|
@ -392,10 +392,10 @@ bool NetAssign::eval_func_lval_(const LineInfo&loc,
|
|||
if (op_ == 0) {
|
||||
rval_result = fix_assign_value(lval->sig(), rval_result);
|
||||
} else if (dynamic_cast<NetECReal*>(rval_result)) {
|
||||
NetECReal*lval_const = dynamic_cast<NetECReal*>(old_lval);
|
||||
const NetECReal*lval_const = dynamic_cast<NetECReal*>(old_lval);
|
||||
ivl_assert(loc, lval_const);
|
||||
verireal lval_r = lval_const->value();
|
||||
NetECReal*rval_const = dynamic_cast<NetECReal*>(rval_result);
|
||||
const NetECReal*rval_const = dynamic_cast<NetECReal*>(rval_result);
|
||||
ivl_assert(loc, rval_const);
|
||||
verireal rval_r = rval_const->value();
|
||||
|
||||
|
|
@ -404,10 +404,10 @@ bool NetAssign::eval_func_lval_(const LineInfo&loc,
|
|||
delete rval_result;
|
||||
rval_result = new NetECReal(lval_r);
|
||||
} else {
|
||||
NetEConst*lval_const = dynamic_cast<NetEConst*>(old_lval);
|
||||
const NetEConst*lval_const = dynamic_cast<NetEConst*>(old_lval);
|
||||
ivl_assert(loc, lval_const);
|
||||
verinum lval_v = lval_const->value();
|
||||
NetEConst*rval_const = dynamic_cast<NetEConst*>(rval_result);
|
||||
const NetEConst*rval_const = dynamic_cast<NetEConst*>(rval_result);
|
||||
ivl_assert(loc, rval_const);
|
||||
verinum rval_v = rval_const->value();
|
||||
|
||||
|
|
@ -453,7 +453,7 @@ bool NetAssign::evaluate_function(const LineInfo&loc,
|
|||
|
||||
// If we get here, the LHS must be a concatenation, so we
|
||||
// expect the RHS to be a vector value.
|
||||
NetEConst*rval_const = dynamic_cast<NetEConst*>(rval_result);
|
||||
const NetEConst*rval_const = dynamic_cast<NetEConst*>(rval_result);
|
||||
ivl_assert(*this, rval_const);
|
||||
|
||||
if (op_) {
|
||||
|
|
@ -557,13 +557,13 @@ bool NetCase::evaluate_function_vect_(const LineInfo&loc,
|
|||
if (case_expr == 0)
|
||||
return false;
|
||||
|
||||
NetEConst*case_const = dynamic_cast<NetEConst*> (case_expr);
|
||||
const NetEConst*case_const = dynamic_cast<NetEConst*> (case_expr);
|
||||
ivl_assert(loc, case_const);
|
||||
|
||||
verinum case_val = case_const->value();
|
||||
delete case_expr;
|
||||
|
||||
NetProc*default_statement = 0;
|
||||
const NetProc*default_statement = 0;
|
||||
|
||||
for (unsigned cnt = 0 ; cnt < items_.size() ; cnt += 1) {
|
||||
const Item*item = &items_[cnt];
|
||||
|
|
@ -577,7 +577,7 @@ bool NetCase::evaluate_function_vect_(const LineInfo&loc,
|
|||
if (item_expr == 0)
|
||||
return false;
|
||||
|
||||
NetEConst*item_const = dynamic_cast<NetEConst*> (item_expr);
|
||||
const NetEConst*item_const = dynamic_cast<NetEConst*> (item_expr);
|
||||
ivl_assert(loc, item_const);
|
||||
|
||||
verinum item_val = item_const->value();
|
||||
|
|
@ -619,13 +619,13 @@ bool NetCase::evaluate_function_real_(const LineInfo&loc,
|
|||
if (case_expr == 0)
|
||||
return false;
|
||||
|
||||
NetECReal*case_const = dynamic_cast<NetECReal*> (case_expr);
|
||||
const NetECReal*case_const = dynamic_cast<NetECReal*> (case_expr);
|
||||
ivl_assert(loc, case_const);
|
||||
|
||||
double case_val = case_const->value().as_double();
|
||||
delete case_expr;
|
||||
|
||||
NetProc*default_statement = 0;
|
||||
const NetProc*default_statement = 0;
|
||||
|
||||
for (unsigned cnt = 0 ; cnt < items_.size() ; cnt += 1) {
|
||||
const Item*item = &items_[cnt];
|
||||
|
|
@ -639,7 +639,7 @@ bool NetCase::evaluate_function_real_(const LineInfo&loc,
|
|||
if (item_expr == 0)
|
||||
return false;
|
||||
|
||||
NetECReal*item_const = dynamic_cast<NetECReal*> (item_expr);
|
||||
const NetECReal*item_const = dynamic_cast<NetECReal*> (item_expr);
|
||||
ivl_assert(loc, item_const);
|
||||
|
||||
double item_val = item_const->value().as_double();
|
||||
|
|
@ -677,7 +677,7 @@ bool NetCondit::evaluate_function(const LineInfo&loc,
|
|||
return false;
|
||||
}
|
||||
|
||||
NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
const NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
ivl_assert(loc, cond_const);
|
||||
|
||||
long val = cond_const->value().as_long();
|
||||
|
|
@ -767,7 +767,7 @@ bool NetDoWhile::evaluate_function(const LineInfo&loc,
|
|||
break;
|
||||
}
|
||||
|
||||
NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
const NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
ivl_assert(loc, cond_const);
|
||||
|
||||
long val = cond_const->value().as_long();
|
||||
|
|
@ -843,7 +843,7 @@ bool NetForLoop::evaluate_function(const LineInfo&loc,
|
|||
break;
|
||||
}
|
||||
|
||||
NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
const NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
ivl_assert(loc, cond_const);
|
||||
|
||||
long val = cond_const->value().as_long();
|
||||
|
|
@ -891,7 +891,7 @@ bool NetRepeat::evaluate_function(const LineInfo&loc,
|
|||
NetExpr*count_expr = expr_->evaluate_function(loc, context_map);
|
||||
if (count_expr == 0) return false;
|
||||
|
||||
NetEConst*count_const = dynamic_cast<NetEConst*> (count_expr);
|
||||
const NetEConst*count_const = dynamic_cast<NetEConst*> (count_expr);
|
||||
ivl_assert(loc, count_const);
|
||||
|
||||
long count = count_const->value().as_long();
|
||||
|
|
@ -948,7 +948,7 @@ bool NetWhile::evaluate_function(const LineInfo&loc,
|
|||
break;
|
||||
}
|
||||
|
||||
NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
const NetEConst*cond_const = dynamic_cast<NetEConst*> (cond);
|
||||
ivl_assert(loc, cond_const);
|
||||
|
||||
long val = cond_const->value().as_long();
|
||||
|
|
@ -1047,7 +1047,7 @@ NetExpr* NetESelect::evaluate_function(const LineInfo&loc,
|
|||
NetExpr*sub_exp = expr_->evaluate_function(loc, context_map);
|
||||
ivl_assert(loc, sub_exp);
|
||||
|
||||
NetEConst*sub_const = dynamic_cast<NetEConst*> (sub_exp);
|
||||
const NetEConst*sub_const = dynamic_cast<NetEConst*> (sub_exp);
|
||||
ivl_assert(loc, sub_exp);
|
||||
|
||||
verinum sub = sub_const->value();
|
||||
|
|
@ -1058,7 +1058,7 @@ NetExpr* NetESelect::evaluate_function(const LineInfo&loc,
|
|||
NetExpr*base_val = base_->evaluate_function(loc, context_map);
|
||||
ivl_assert(loc, base_val);
|
||||
|
||||
NetEConst*base_const = dynamic_cast<NetEConst*>(base_val);
|
||||
const NetEConst*base_const = dynamic_cast<NetEConst*>(base_val);
|
||||
ivl_assert(loc, base_const);
|
||||
|
||||
base = base_const->value().as_long();
|
||||
|
|
@ -1096,14 +1096,14 @@ NetExpr* NetESignal::evaluate_function(const LineInfo&loc,
|
|||
var = var->ref;
|
||||
}
|
||||
|
||||
NetExpr*value = 0;
|
||||
const NetExpr*value = 0;
|
||||
if (var->nwords > 0) {
|
||||
ivl_assert(loc, word_);
|
||||
NetExpr*word_result = word_->evaluate_function(loc, context_map);
|
||||
if (word_result == 0)
|
||||
return 0;
|
||||
|
||||
NetEConst*word_const = dynamic_cast<NetEConst*>(word_result);
|
||||
const NetEConst*word_const = dynamic_cast<NetEConst*>(word_result);
|
||||
ivl_assert(loc, word_const);
|
||||
|
||||
int word = word_const->value().as_long();
|
||||
|
|
@ -1202,7 +1202,7 @@ NetExpr* NetESFunc::evaluate_function(const LineInfo&loc,
|
|||
NetExpr* NetEUFunc::evaluate_function(const LineInfo&loc,
|
||||
map<perm_string,LocalVar>&context_map) const
|
||||
{
|
||||
NetFuncDef*def = func_->func_def();
|
||||
const NetFuncDef*def = func_->func_def();
|
||||
ivl_assert(*this, def);
|
||||
|
||||
vector<NetExpr*>args(parms_.size());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2025 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
|
||||
|
|
@ -144,9 +144,9 @@ NexusSet* NetESelect::nex_input(bool rem_out, bool always_sens, bool nested_func
|
|||
NexusSet*tmp = expr_->nex_input(rem_out, always_sens, nested_func);
|
||||
bool const_select = result->size() == 0;
|
||||
if (always_sens && const_select) {
|
||||
if (NetEConst *val = dynamic_cast <NetEConst*> (base_)) {
|
||||
if (const NetEConst *val = dynamic_cast <NetEConst*> (base_)) {
|
||||
assert(select_type() == IVL_SEL_OTHER);
|
||||
if (NetESignal *sig = dynamic_cast<NetESignal*> (expr_)) {
|
||||
if (const NetESignal *sig = dynamic_cast<NetESignal*> (expr_)) {
|
||||
delete tmp;
|
||||
tmp = sig->nex_input_base(rem_out, always_sens, nested_func,
|
||||
val->value().as_unsigned(), expr_width());
|
||||
|
|
@ -221,7 +221,7 @@ NexusSet* NetESignal::nex_input_base(bool rem_out, bool always_sens, bool nested
|
|||
<< net_->unpacked_count() << " words in array '"
|
||||
<< name() << "'." << endl;
|
||||
}
|
||||
if (always_sens) if (NetEConst *val = dynamic_cast <NetEConst*> (word_)) {
|
||||
if (always_sens) if (const NetEConst *val = dynamic_cast <NetEConst*> (word_)) {
|
||||
const_select = true;
|
||||
const_word = val->value().as_unsigned();
|
||||
}
|
||||
|
|
@ -337,7 +337,7 @@ NexusSet* NetAssignBase::nex_input(bool rem_out, bool always_sens, bool nested_f
|
|||
/* It is possible that the lval_ can have nex_input values. In
|
||||
particular, index expressions are statement inputs as well,
|
||||
so should be addressed here. */
|
||||
for (NetAssign_*cur = lval_ ; cur ; cur = cur->more) {
|
||||
for (const NetAssign_*cur = lval_ ; cur ; cur = cur->more) {
|
||||
NexusSet*tmp = cur->nex_input(rem_out, always_sens, nested_func);
|
||||
result->add(*tmp);
|
||||
delete tmp;
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ void NetCase::prune()
|
|||
|
||||
// If the guard expression is not constant, assume
|
||||
// all bits are needed, so no pruning can be done.
|
||||
NetEConst*gc = dynamic_cast<NetEConst*>(items_[idx].guard);
|
||||
const NetEConst*gc = dynamic_cast<NetEConst*>(items_[idx].guard);
|
||||
if (gc == 0)
|
||||
return;
|
||||
|
||||
|
|
|
|||
10
netclass.h
10
netclass.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netclass_H
|
||||
#define IVL_netclass_H
|
||||
/*
|
||||
* Copyright (c) 2012-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 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
|
||||
|
|
@ -36,7 +36,7 @@ class PExpr;
|
|||
class netclass_t : public ivl_type_s {
|
||||
public:
|
||||
netclass_t(perm_string class_name, const netclass_t*super);
|
||||
~netclass_t();
|
||||
~netclass_t() override;
|
||||
|
||||
// Set the property of the class during elaboration. Set the
|
||||
// name and type, and return true. If the name is already
|
||||
|
|
@ -61,7 +61,7 @@ class netclass_t : public ivl_type_s {
|
|||
|
||||
// As an ivl_type_s object, the netclass is always an
|
||||
// ivl_VT_CLASS object.
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
|
||||
// This is the name of the class type
|
||||
inline perm_string get_name() const { return name_; }
|
||||
|
|
@ -114,7 +114,7 @@ class netclass_t : public ivl_type_s {
|
|||
void emit_scope(struct target_t*tgt) const;
|
||||
bool emit_defs(struct target_t*tgt) const;
|
||||
|
||||
std::ostream& debug_dump(std::ostream&fd) const;
|
||||
std::ostream& debug_dump(std::ostream&fd) const override;
|
||||
void dump_scope(std::ostream&fd) const;
|
||||
|
||||
const NetExpr* get_parameter(Design *des, perm_string name,
|
||||
|
|
@ -124,7 +124,7 @@ class netclass_t : public ivl_type_s {
|
|||
bool is_virtual() const { return virtual_class_; }
|
||||
|
||||
protected:
|
||||
bool test_compatibility(ivl_type_t that) const;
|
||||
bool test_compatibility(ivl_type_t that) const override;
|
||||
|
||||
private:
|
||||
perm_string name_;
|
||||
|
|
|
|||
14
netdarray.h
14
netdarray.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netdarray_H
|
||||
#define IVL_netdarray_H
|
||||
/*
|
||||
* Copyright (c) 2012-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 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
|
||||
|
|
@ -26,15 +26,15 @@ class netdarray_t : public netarray_t {
|
|||
|
||||
public:
|
||||
explicit netdarray_t(ivl_type_t vec);
|
||||
~netdarray_t();
|
||||
~netdarray_t() override;
|
||||
|
||||
// This is the "base_type()" virtual method of the
|
||||
// nettype_base_t. The ivl_target api expects this to return
|
||||
// IVL_VT_DARRAY for dynamic arrays?
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
|
||||
// A dynamic array may have a type that is signed.
|
||||
inline bool get_signed() const { return element_type()->get_signed(); }
|
||||
inline bool get_signed() const override { return element_type()->get_signed(); }
|
||||
|
||||
// This is the base_type() of the element of the array. We
|
||||
// need this in some cases in order to get the base type of
|
||||
|
|
@ -45,11 +45,11 @@ class netdarray_t : public netarray_t {
|
|||
// element. Strictly speaking it's not necessary.
|
||||
inline unsigned long element_width(void) const { return element_type()->packed_width(); }
|
||||
|
||||
std::ostream& debug_dump(std::ostream&) const;
|
||||
std::ostream& debug_dump(std::ostream&) const override;
|
||||
|
||||
private:
|
||||
bool test_compatibility(ivl_type_t that) const;
|
||||
bool test_equivalence(ivl_type_t that) const;
|
||||
bool test_compatibility(ivl_type_t that) const override;
|
||||
bool test_equivalence(ivl_type_t that) const override;
|
||||
};
|
||||
|
||||
#endif /* IVL_netdarray_H */
|
||||
|
|
|
|||
14
netenum.h
14
netenum.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netenum_H
|
||||
#define IVL_netenum_H
|
||||
/*
|
||||
* Copyright (c) 2010-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2010-2025 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
|
||||
|
|
@ -34,13 +34,13 @@ class netenum_t : public LineInfo, public ivl_type_s {
|
|||
public:
|
||||
explicit netenum_t(ivl_type_t base_type, size_t name_count,
|
||||
bool integer_flag);
|
||||
~netenum_t();
|
||||
~netenum_t() override;
|
||||
|
||||
virtual ivl_variable_type_t base_type() const;
|
||||
virtual bool packed() const;
|
||||
virtual long packed_width() const;
|
||||
netranges_t slice_dimensions() const;
|
||||
bool get_signed() const;
|
||||
virtual ivl_variable_type_t base_type() const override;
|
||||
virtual bool packed() const override;
|
||||
virtual long packed_width() const override;
|
||||
netranges_t slice_dimensions() const override;
|
||||
bool get_signed() const override;
|
||||
bool get_isint() const;
|
||||
|
||||
// The size() is the number of enumeration literals.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1998-2025 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
|
||||
|
|
@ -1013,7 +1013,7 @@ NetProcTop::~NetProcTop()
|
|||
bool flag = false;
|
||||
for (unsigned idx = 0 ; idx < nex_set.size() ; idx += 1) {
|
||||
|
||||
NetNet*net = nex_set[idx].lnk.nexus()->pick_any_net();
|
||||
const NetNet*net = nex_set[idx].lnk.nexus()->pick_any_net();
|
||||
if (net->peek_lref() > 0) {
|
||||
cerr << get_fileline() << ": warning: '" << net->name()
|
||||
<< "' is driven by more than one process." << endl;
|
||||
|
|
@ -3070,7 +3070,7 @@ static void check_if_logic_l_value(const NetAssignBase *base,
|
|||
const NetAssign_*lval = base->l_val(0);
|
||||
if (! lval) return;
|
||||
|
||||
NetNet*sig = lval->sig();
|
||||
const NetNet*sig = lval->sig();
|
||||
if (! sig) return;
|
||||
|
||||
if ((sig->data_type() != IVL_VT_BOOL) &&
|
||||
|
|
@ -3451,7 +3451,7 @@ bool NetScope::check_synth(ivl_process_type_t pr_type,
|
|||
{
|
||||
bool result = false;
|
||||
// Skip local events/signals
|
||||
for (NetEvent*cur = events_ ; cur ; cur = cur->snext_) {
|
||||
for (const NetEvent*cur = events_ ; cur ; cur = cur->snext_) {
|
||||
if (cur->local_flag()) continue;
|
||||
cerr << cur->get_fileline() << ": warning: An event ("
|
||||
<< cur->name() << ") cannot be synthesized "
|
||||
|
|
|
|||
26
netmisc.cc
26
netmisc.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2025 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
|
||||
|
|
@ -34,7 +34,7 @@ using namespace std;
|
|||
|
||||
NetNet* sub_net_from(Design*des, NetScope*scope, long val, NetNet*sig)
|
||||
{
|
||||
netvector_t*zero_vec = new netvector_t(sig->data_type(),
|
||||
const netvector_t*zero_vec = new netvector_t(sig->data_type(),
|
||||
sig->vector_width()-1, 0);
|
||||
NetNet*zero_net = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, zero_vec);
|
||||
|
|
@ -68,7 +68,7 @@ NetNet* sub_net_from(Design*des, NetScope*scope, long val, NetNet*sig)
|
|||
connect(zero_net->pin(0), adder->pin_DataA());
|
||||
connect(adder->pin_DataB(), sig->pin(0));
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(sig->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(sig->data_type(),
|
||||
sig->vector_width()-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
|
|
@ -85,7 +85,7 @@ NetNet* cast_to_int2(Design*des, NetScope*scope, NetNet*src, unsigned wid)
|
|||
if (src->data_type() == IVL_VT_BOOL)
|
||||
return src;
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(IVL_VT_BOOL, wid-1, 0,
|
||||
const netvector_t*tmp_vec = new netvector_t(IVL_VT_BOOL, wid-1, 0,
|
||||
src->get_signed());
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(), NetNet::WIRE, tmp_vec);
|
||||
tmp->set_line(*src);
|
||||
|
|
@ -106,7 +106,7 @@ NetNet* cast_to_int4(Design*des, NetScope*scope, NetNet*src, unsigned wid)
|
|||
if (src->data_type() != IVL_VT_REAL)
|
||||
return src;
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(IVL_VT_LOGIC, wid-1, 0);
|
||||
const netvector_t*tmp_vec = new netvector_t(IVL_VT_LOGIC, wid-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(), NetNet::WIRE, tmp_vec);
|
||||
tmp->set_line(*src);
|
||||
tmp->local_flag(true);
|
||||
|
|
@ -126,7 +126,7 @@ NetNet* cast_to_real(Design*des, NetScope*scope, NetNet*src)
|
|||
if (src->data_type() == IVL_VT_REAL)
|
||||
return src;
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(IVL_VT_REAL);
|
||||
const netvector_t*tmp_vec = new netvector_t(IVL_VT_REAL);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(), NetNet::WIRE, tmp_vec);
|
||||
tmp->set_line(*src);
|
||||
tmp->local_flag(true);
|
||||
|
|
@ -514,7 +514,7 @@ void indices_to_expressions(Design*des, NetScope*scope,
|
|||
|
||||
// Track if we detect any non-constant expressions
|
||||
// here. This may allow for a special case.
|
||||
NetEConst*word_const = dynamic_cast<NetEConst*> (word_index);
|
||||
const NetEConst*word_const = dynamic_cast<NetEConst*> (word_index);
|
||||
if (word_const == 0)
|
||||
flags.variable = true;
|
||||
else if (!word_const->value().is_defined())
|
||||
|
|
@ -631,7 +631,7 @@ NetExpr* normalize_variable_unpacked(const LineInfo&loc, const netranges_t&dims,
|
|||
|
||||
// Now generate the math to calculate the canonical address.
|
||||
NetExpr*tmp_scaled = 0;
|
||||
if (NetEConst*tmp_const = dynamic_cast<NetEConst*> (tmp)) {
|
||||
if (const NetEConst*tmp_const = dynamic_cast<NetEConst*> (tmp)) {
|
||||
// Special case: the index is constant, so this
|
||||
// iteration can be replaced with a constant
|
||||
// expression.
|
||||
|
|
@ -748,7 +748,7 @@ static NetNet* make_const_net(Design*des, NetScope*scope, verinum val)
|
|||
NetConst*res = new NetConst(scope, scope->local_symbol(), val);
|
||||
des->add_node(res);
|
||||
|
||||
netvector_t*sig_vec = new netvector_t(IVL_VT_LOGIC, val.len() - 1, 0);
|
||||
const netvector_t*sig_vec = new netvector_t(IVL_VT_LOGIC, val.len() - 1, 0);
|
||||
NetNet*sig = new NetNet(scope, scope->local_symbol(), NetNet::WIRE, sig_vec);
|
||||
sig->local_flag(true);
|
||||
|
||||
|
|
@ -774,7 +774,7 @@ NetNet* make_const_z(Design*des, NetScope*scope, unsigned long wid)
|
|||
NetExpr* condition_reduce(NetExpr*expr)
|
||||
{
|
||||
if (expr->expr_type() == IVL_VT_REAL) {
|
||||
if (NetECReal *tmp = dynamic_cast<NetECReal*>(expr)) {
|
||||
if (const NetECReal *tmp = dynamic_cast<NetECReal*>(expr)) {
|
||||
verinum::V res;
|
||||
if (tmp->value().as_double() == 0.0) res = verinum::V0;
|
||||
else res = verinum::V1;
|
||||
|
|
@ -1181,12 +1181,12 @@ bool eval_as_long(long&value, const NetExpr*expr)
|
|||
|
||||
bool eval_as_double(double&value, NetExpr*expr)
|
||||
{
|
||||
if (NetEConst*tmp = dynamic_cast<NetEConst*>(expr) ) {
|
||||
if (const NetEConst*tmp = dynamic_cast<NetEConst*>(expr) ) {
|
||||
value = tmp->value().as_double();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (NetECReal*rtmp = dynamic_cast<NetECReal*>(expr)) {
|
||||
if (const NetECReal*rtmp = dynamic_cast<NetECReal*>(expr)) {
|
||||
value = rtmp->value().as_double();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1431,7 +1431,7 @@ void collapse_partselect_pv_to_concat(Design*des, NetNet*sig)
|
|||
unsigned idx = 0;
|
||||
unsigned device_count = 0;
|
||||
while (idx < ps_map.size()) {
|
||||
NetPartSelect*ps_obj = ps_map[idx];
|
||||
const NetPartSelect*ps_obj = ps_map[idx];
|
||||
if (ps_obj == 0)
|
||||
return;
|
||||
|
||||
|
|
|
|||
22
netparray.h
22
netparray.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netarray_H
|
||||
#define IVL_netarray_H
|
||||
/*
|
||||
* Copyright (c) 2012-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2012 / Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -31,7 +31,7 @@ class netsarray_t : public netarray_t {
|
|||
|
||||
public:
|
||||
explicit netsarray_t(const netranges_t&packed, ivl_type_t etype);
|
||||
~netsarray_t();
|
||||
~netsarray_t() override;
|
||||
|
||||
public:
|
||||
// Virtual methods from the ivl_type_s type...
|
||||
|
|
@ -57,17 +57,17 @@ class netparray_t : public netsarray_t {
|
|||
|
||||
public:
|
||||
explicit netparray_t(const netranges_t&packed, ivl_type_t etype);
|
||||
~netparray_t();
|
||||
~netparray_t() override;
|
||||
|
||||
public:
|
||||
// Virtual methods from the ivl_type_s type...
|
||||
bool packed(void) const;
|
||||
long packed_width(void) const;
|
||||
netranges_t slice_dimensions() const;
|
||||
bool packed(void) const override;
|
||||
long packed_width(void) const override;
|
||||
netranges_t slice_dimensions() const override;
|
||||
|
||||
private:
|
||||
bool test_compatibility(ivl_type_t that) const;
|
||||
bool test_equivalence(ivl_type_t that) const;
|
||||
bool test_compatibility(ivl_type_t that) const override;
|
||||
bool test_equivalence(ivl_type_t that) const override;
|
||||
};
|
||||
|
||||
inline netparray_t::netparray_t(const netranges_t&pd, ivl_type_t etype)
|
||||
|
|
@ -82,14 +82,14 @@ class netuarray_t : public netsarray_t {
|
|||
|
||||
public:
|
||||
explicit netuarray_t(const netranges_t&packed, ivl_type_t etype);
|
||||
~netuarray_t();
|
||||
~netuarray_t() override;
|
||||
|
||||
public:
|
||||
// Virtual methods from the ivl_type_s type...
|
||||
netranges_t slice_dimensions() const;
|
||||
netranges_t slice_dimensions() const override;
|
||||
|
||||
private:
|
||||
bool test_equivalence(ivl_type_t that) const;
|
||||
bool test_equivalence(ivl_type_t that) const override;
|
||||
};
|
||||
|
||||
inline netuarray_t::netuarray_t(const netranges_t&pd, ivl_type_t etype)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL__netqueue_H
|
||||
#define IVL__netqueue_H
|
||||
/*
|
||||
* Copyright (c) 2014-2020 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2014-2025 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
|
||||
|
|
@ -31,16 +31,16 @@ class netqueue_t : public netdarray_t {
|
|||
|
||||
public:
|
||||
explicit netqueue_t(ivl_type_t vec, long max_idx);
|
||||
~netqueue_t();
|
||||
~netqueue_t() override;
|
||||
|
||||
// This is the "base_type()" virtual method of the
|
||||
// nettype_base_t. The ivl_target api expects this to return
|
||||
// IVL_VT_QUEUE for queues.
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
|
||||
long max_idx(void) const { return max_idx_; }
|
||||
|
||||
std::ostream& debug_dump(std::ostream&) const;
|
||||
std::ostream& debug_dump(std::ostream&) const override;
|
||||
|
||||
private:
|
||||
long max_idx_;
|
||||
|
|
|
|||
18
netscalar.h
18
netscalar.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netscalar_H
|
||||
#define IVL_netscalar_H
|
||||
/*
|
||||
* Copyright (c) 2013-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2013-2025 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
|
||||
|
|
@ -25,13 +25,13 @@ class netreal_t : public ivl_type_s {
|
|||
|
||||
public:
|
||||
inline explicit netreal_t() { }
|
||||
~netreal_t();
|
||||
~netreal_t() override;
|
||||
|
||||
ivl_variable_type_t base_type() const;
|
||||
bool get_signed() const { return true; }
|
||||
bool get_scalar() const { return true; }
|
||||
ivl_variable_type_t base_type() const override;
|
||||
bool get_signed() const override { return true; }
|
||||
bool get_scalar() const override { return true; }
|
||||
|
||||
std::ostream& debug_dump(std::ostream&) const;
|
||||
std::ostream& debug_dump(std::ostream&) const override;
|
||||
|
||||
public:
|
||||
static netreal_t type_real;
|
||||
|
|
@ -42,11 +42,11 @@ class netstring_t : public ivl_type_s {
|
|||
|
||||
public:
|
||||
inline explicit netstring_t() { }
|
||||
~netstring_t();
|
||||
~netstring_t() override;
|
||||
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
|
||||
std::ostream& debug_dump(std::ostream&) const;
|
||||
std::ostream& debug_dump(std::ostream&) const override;
|
||||
|
||||
public:
|
||||
static netstring_t type_string;
|
||||
|
|
|
|||
18
netstruct.h
18
netstruct.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netstruct_H
|
||||
#define IVL_netstruct_H
|
||||
/*
|
||||
* Copyright (c) 2011-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2011-2025 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
|
||||
|
|
@ -40,7 +40,7 @@ class netstruct_t : public LineInfo, public ivl_type_s {
|
|||
|
||||
public:
|
||||
netstruct_t();
|
||||
~netstruct_t();
|
||||
~netstruct_t() override;
|
||||
|
||||
// If this is a union (instead of struct) then this flag is
|
||||
// set. We handle union and struct together because they are
|
||||
|
|
@ -49,11 +49,11 @@ class netstruct_t : public LineInfo, public ivl_type_s {
|
|||
bool union_flag(void) const;
|
||||
|
||||
void packed(bool flag);
|
||||
bool packed(void) const;
|
||||
bool packed(void) const override;
|
||||
|
||||
// When the struct is accessed as a primary it can be signed or unsigned
|
||||
void set_signed(bool flag) { signed_ = flag; }
|
||||
bool get_signed(void) const { return signed_; }
|
||||
bool get_signed(void) const override { return signed_; }
|
||||
|
||||
// Append a new member to the struct/union. This must be done
|
||||
// after the union_flag and packed settings are set. This
|
||||
|
|
@ -69,16 +69,16 @@ class netstruct_t : public LineInfo, public ivl_type_s {
|
|||
|
||||
// Return the width (in bits) of the packed record, or -1 if
|
||||
// the record is not packed.
|
||||
long packed_width() const;
|
||||
netranges_t slice_dimensions() const;
|
||||
long packed_width() const override;
|
||||
netranges_t slice_dimensions() const override;
|
||||
|
||||
// Return the base type of the packed record, or
|
||||
// IVL_VT_NO_TYPE if the record is not packed.
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
|
||||
private:
|
||||
bool test_compatibility(ivl_type_t that) const;
|
||||
bool test_equivalence(ivl_type_t that) const;
|
||||
bool test_compatibility(ivl_type_t that) const override;
|
||||
bool test_equivalence(ivl_type_t that) const override;
|
||||
|
||||
private:
|
||||
bool union_;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_nettypes_H
|
||||
#define IVL_nettypes_H
|
||||
/*
|
||||
* Copyright (c) 2012-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 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
|
||||
|
|
@ -80,13 +80,13 @@ class netarray_t : public ivl_type_s {
|
|||
|
||||
public:
|
||||
inline explicit netarray_t(ivl_type_t etype) : element_type_(etype) { }
|
||||
~netarray_t();
|
||||
~netarray_t() override;
|
||||
|
||||
public:
|
||||
// Some virtual methods have a common implementation for arrays.
|
||||
|
||||
// The base_type() for arrays is the base_Typeof the element.
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
|
||||
public:
|
||||
inline ivl_type_t element_type() const { return element_type_; }
|
||||
|
|
|
|||
22
netvector.h
22
netvector.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_netvector_H
|
||||
#define IVL_netvector_H
|
||||
/*
|
||||
* Copyright (c) 2012-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 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
|
||||
|
|
@ -37,29 +37,29 @@ class netvector_t : public ivl_type_s {
|
|||
// Special case: scalar object--no packed dimensions at all.
|
||||
explicit netvector_t(ivl_variable_type_t type);
|
||||
|
||||
~netvector_t();
|
||||
~netvector_t() override;
|
||||
|
||||
// Vectors can be interpreted as signed or unsigned when
|
||||
// handled as vectors.
|
||||
inline void set_signed(bool flag) { signed_ = flag; }
|
||||
inline bool get_signed(void) const { return signed_; }
|
||||
inline bool get_signed(void) const override { return signed_; }
|
||||
|
||||
inline void set_isint(bool flag) { isint_ = flag; }
|
||||
inline bool get_isint(void) const { return isint_; }
|
||||
|
||||
inline bool get_scalar(void) const { return packed_dims_.empty(); }
|
||||
inline bool get_scalar(void) const override { return packed_dims_.empty(); }
|
||||
|
||||
void set_implicit(bool implicit) { implicit_ = implicit; }
|
||||
bool get_implicit() const { return implicit_; }
|
||||
|
||||
ivl_variable_type_t base_type() const;
|
||||
ivl_variable_type_t base_type() const override;
|
||||
const netranges_t&packed_dims() const;
|
||||
|
||||
bool packed(void) const;
|
||||
long packed_width() const;
|
||||
netranges_t slice_dimensions() const;
|
||||
bool packed(void) const override;
|
||||
long packed_width() const override;
|
||||
netranges_t slice_dimensions() const override;
|
||||
|
||||
std::ostream& debug_dump(std::ostream&) const;
|
||||
std::ostream& debug_dump(std::ostream&) const override;
|
||||
|
||||
public:
|
||||
// Some commonly used predefined types
|
||||
|
|
@ -78,8 +78,8 @@ class netvector_t : public ivl_type_s {
|
|||
static const netvector_t*integer_type(bool is_signed = true);
|
||||
|
||||
private:
|
||||
bool test_compatibility(ivl_type_t that) const;
|
||||
bool test_equivalence(ivl_type_t that) const;
|
||||
bool test_compatibility(ivl_type_t that) const override;
|
||||
bool test_equivalence(ivl_type_t that) const override;
|
||||
|
||||
private:
|
||||
netranges_t packed_dims_;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2025 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
|
||||
|
|
@ -33,8 +33,8 @@ using namespace std;
|
|||
|
||||
class nodangle_f : public functor_t {
|
||||
public:
|
||||
void event(Design*des, NetEvent*ev);
|
||||
void signal(Design*des, NetNet*sig);
|
||||
void event(Design*des, NetEvent*ev) override;
|
||||
void signal(Design*des, NetNet*sig) override;
|
||||
|
||||
unsigned iteration;
|
||||
unsigned stotal, etotal;
|
||||
|
|
@ -230,7 +230,7 @@ void nodangle_f::signal(Design*, NetNet*sig)
|
|||
if (cur == &sig->pin(idx))
|
||||
continue;
|
||||
|
||||
NetNet*cursig = dynamic_cast<NetNet*>(cur->get_obj());
|
||||
const NetNet*cursig = dynamic_cast<NetNet*>(cur->get_obj());
|
||||
if (cursig == 0)
|
||||
continue;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2016 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2025 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
|
||||
|
|
@ -106,7 +106,7 @@ NetNet*pad_to_width(Design*des, NetNet*net, unsigned wid, const LineInfo&info)
|
|||
connect(cc->pin(2), con->pin(0));
|
||||
|
||||
// Make a NetNet for the NetConst to NetConcat link.
|
||||
netvector_t*tmp_vec = new netvector_t(net->data_type(),
|
||||
const netvector_t*tmp_vec = new netvector_t(net->data_type(),
|
||||
wid - net->vector_width() - 1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
|
|
@ -162,7 +162,7 @@ NetNet*crop_to_width(Design*des, NetNet*net, unsigned wid)
|
|||
ps->set_line(*net);
|
||||
des->add_node(ps);
|
||||
|
||||
netvector_t*tmp_vec = new netvector_t(net->data_type(), wid-1, 0);
|
||||
const netvector_t*tmp_vec = new netvector_t(net->data_type(), wid-1, 0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
tmp->set_line(*net);
|
||||
|
|
|
|||
8
parse.y
8
parse.y
|
|
@ -439,7 +439,7 @@ Module::port_t *module_declare_port(const YYLTYPE&loc, char *id,
|
|||
// are variables. Unlike the other port types, which are nets in
|
||||
// that case.
|
||||
if (net_type == NetNet::IMPLICIT) {
|
||||
if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (data_type)) {
|
||||
if (const vector_type_t*dtype = dynamic_cast<vector_type_t*> (data_type)) {
|
||||
if (!dtype->implicit_flag)
|
||||
net_type = NetNet::IMPLICIT_REG;
|
||||
} else if (data_type) {
|
||||
|
|
@ -4998,7 +4998,7 @@ module_item
|
|||
*/
|
||||
| attribute_list_opt K_inout data_type_or_implicit list_of_port_identifiers ';'
|
||||
{ NetNet::Type use_type = $3 ? NetNet::IMPLICIT : NetNet::NONE;
|
||||
if (vector_type_t*dtype = dynamic_cast<vector_type_t*> ($3)) {
|
||||
if (const vector_type_t*dtype = dynamic_cast<vector_type_t*> ($3)) {
|
||||
if (dtype->implicit_flag)
|
||||
use_type = NetNet::NONE;
|
||||
}
|
||||
|
|
@ -5010,7 +5010,7 @@ module_item
|
|||
|
||||
| attribute_list_opt K_input data_type_or_implicit list_of_port_identifiers ';'
|
||||
{ NetNet::Type use_type = $3 ? NetNet::IMPLICIT : NetNet::NONE;
|
||||
if (vector_type_t*dtype = dynamic_cast<vector_type_t*> ($3)) {
|
||||
if (const vector_type_t*dtype = dynamic_cast<vector_type_t*> ($3)) {
|
||||
if (dtype->implicit_flag)
|
||||
use_type = NetNet::NONE;
|
||||
}
|
||||
|
|
@ -5022,7 +5022,7 @@ module_item
|
|||
|
||||
| attribute_list_opt K_output data_type_or_implicit list_of_variable_port_identifiers ';'
|
||||
{ NetNet::Type use_type = $3 ? NetNet::IMPLICIT : NetNet::NONE;
|
||||
if (vector_type_t*dtype = dynamic_cast<vector_type_t*> ($3)) {
|
||||
if (const vector_type_t*dtype = dynamic_cast<vector_type_t*> ($3)) {
|
||||
if (dtype->implicit_flag)
|
||||
use_type = NetNet::NONE;
|
||||
else
|
||||
|
|
|
|||
18
pform.cc
18
pform.cc
|
|
@ -138,7 +138,7 @@ void parm_to_defparam_list(const string¶m)
|
|||
unsigned off = param.find('=');
|
||||
if (off > param.size()) {
|
||||
key = strdup(param.c_str());
|
||||
value = (char*)malloc(1);
|
||||
value = static_cast<char*>(malloc(1));
|
||||
*value = '\0';
|
||||
|
||||
} else {
|
||||
|
|
@ -2007,7 +2007,7 @@ void pform_make_udp(const struct vlltype&loc, perm_string name,
|
|||
// XXXX
|
||||
ivl_assert(loc, pins[0]->get_wire_type() == NetNet::REG);
|
||||
|
||||
PAssign*pa = dynamic_cast<PAssign*>(init_expr);
|
||||
const PAssign*pa = dynamic_cast<PAssign*>(init_expr);
|
||||
ivl_assert(*init_expr, pa);
|
||||
|
||||
const PEIdent*id = dynamic_cast<const PEIdent*>(pa->lval());
|
||||
|
|
@ -2088,7 +2088,7 @@ void pform_make_udp(const struct vlltype&loc, perm_string name,
|
|||
// XXXX
|
||||
ivl_assert(*init_expr, pins[0]->get_wire_type() == NetNet::REG);
|
||||
|
||||
PAssign*pa = dynamic_cast<PAssign*>(init_expr);
|
||||
const PAssign*pa = dynamic_cast<PAssign*>(init_expr);
|
||||
ivl_assert(*init_expr, pa);
|
||||
|
||||
const PEIdent*id = dynamic_cast<const PEIdent*>(pa->lval());
|
||||
|
|
@ -2157,7 +2157,7 @@ static void pform_set_net_range(PWire *wire,
|
|||
if (!vec_type)
|
||||
return;
|
||||
|
||||
list<pform_range_t> *range = vec_type->pdims.get();
|
||||
const list<pform_range_t> *range = vec_type->pdims.get();
|
||||
if (range)
|
||||
wire->set_range(*range, rt);
|
||||
wire->set_signed(vec_type->signed_flag);
|
||||
|
|
@ -2745,7 +2745,7 @@ vector<pform_tf_port_t>*pform_make_task_ports(const struct vlltype&loc,
|
|||
|
||||
// If this is a non-ansi port declaration and the type is an implicit type
|
||||
// this is only a port declaration.
|
||||
vector_type_t*vec_type = dynamic_cast<vector_type_t*>(vtype);
|
||||
const vector_type_t*vec_type = dynamic_cast<vector_type_t*>(vtype);
|
||||
if (allow_implicit && (!vtype || (vec_type && vec_type->implicit_flag)))
|
||||
rt = SR_PORT;
|
||||
|
||||
|
|
@ -3193,7 +3193,7 @@ void pform_set_port_type(const struct vlltype&li,
|
|||
{
|
||||
ivl_assert(li, pt != NetNet::PIMPLICIT && pt != NetNet::NOT_A_PORT);
|
||||
|
||||
vector_type_t *vt = dynamic_cast<vector_type_t*> (dt);
|
||||
const vector_type_t *vt = dynamic_cast<vector_type_t*> (dt);
|
||||
|
||||
bool have_init_expr = false;
|
||||
for (list<pform_port_t>::iterator cur = ports->begin()
|
||||
|
|
@ -3242,7 +3242,7 @@ void pform_set_data_type(const struct vlltype&li, data_type_t*data_type,
|
|||
ivl_assert(li, 0);
|
||||
}
|
||||
|
||||
vector_type_t*vec_type = dynamic_cast<vector_type_t*> (data_type);
|
||||
const vector_type_t*vec_type = dynamic_cast<vector_type_t*> (data_type);
|
||||
|
||||
for (std::vector<PWire*>::iterator it= wires->begin();
|
||||
it != wires->end() ; ++it) {
|
||||
|
|
@ -3428,8 +3428,8 @@ int pform_parse(const char*path)
|
|||
if (strcmp(path, "-") == 0) {
|
||||
vl_input = stdin;
|
||||
} else if (ivlpp_string) {
|
||||
char*cmdline = (char*)malloc(strlen(ivlpp_string) +
|
||||
strlen(path) + 4);
|
||||
char*cmdline = static_cast<char*>(malloc(strlen(ivlpp_string) +
|
||||
strlen(path) + 4));
|
||||
strcpy(cmdline, ivlpp_string);
|
||||
strcat(cmdline, " \"");
|
||||
strcat(cmdline, path);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2024 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2025 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2013 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -118,7 +118,7 @@ PPackage *pform_package_importable(PPackage *pkg, perm_string name)
|
|||
if (import_pkg == pkg->explicit_imports.end())
|
||||
return nullptr;
|
||||
|
||||
for (auto &exp : pkg->exports) {
|
||||
for (const auto &exp : pkg->exports) {
|
||||
// *::* will match all imports, P::* will match all imports
|
||||
// from a package and P::ID will match a specific identifier
|
||||
// from a package.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_pform_types_H
|
||||
#define IVL_pform_types_H
|
||||
/*
|
||||
* Copyright (c) 2007-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2007-2025 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
|
||||
|
|
@ -157,7 +157,7 @@ struct pform_tf_port_t {
|
|||
class data_type_t : public PNamedItem {
|
||||
public:
|
||||
inline explicit data_type_t() { }
|
||||
virtual ~data_type_t() = 0;
|
||||
virtual ~data_type_t() override = 0;
|
||||
// This method is used by the pform dumper to diagnostic dump. The
|
||||
// pform_dump dumps type type in pform format, and the debug_dump
|
||||
// prints the output in a linear form.
|
||||
|
|
@ -166,7 +166,7 @@ class data_type_t : public PNamedItem {
|
|||
|
||||
ivl_type_t elaborate_type(Design*des, NetScope*scope);
|
||||
|
||||
virtual SymbolType symbol_type() const;
|
||||
virtual SymbolType symbol_type() const override;
|
||||
|
||||
private:
|
||||
// Elaborate the type to an ivl_type_s type.
|
||||
|
|
@ -208,10 +208,10 @@ public:
|
|||
struct typeref_t : public data_type_t {
|
||||
explicit typeref_t(typedef_t *t, PScope *s = 0) : scope(s), type(t) {}
|
||||
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
NetScope *find_scope(Design* des, NetScope *scope) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
NetScope *find_scope(Design* des, NetScope *scope) const override;
|
||||
|
||||
std::ostream& debug_dump(std::ostream&out) const;
|
||||
std::ostream& debug_dump(std::ostream&out) const override;
|
||||
|
||||
private:
|
||||
PScope *scope;
|
||||
|
|
@ -220,13 +220,13 @@ private:
|
|||
|
||||
struct type_parameter_t : data_type_t {
|
||||
explicit type_parameter_t(perm_string n) : name(n) { }
|
||||
ivl_type_t elaborate_type_raw(Design *des, NetScope *scope) const;
|
||||
ivl_type_t elaborate_type_raw(Design *des, NetScope *scope) const override;
|
||||
|
||||
perm_string name;
|
||||
};
|
||||
|
||||
struct void_type_t : public data_type_t {
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const override;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -239,9 +239,9 @@ struct enum_type_t : public data_type_t {
|
|||
explicit enum_type_t(data_type_t *btype) : base_type(btype) { }
|
||||
|
||||
// Return the elaborated version of the type.
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
|
||||
SymbolType symbol_type() const;
|
||||
SymbolType symbol_type() const override;
|
||||
|
||||
std::unique_ptr<data_type_t> base_type;
|
||||
std::unique_ptr< std::list<named_pexpr_t> > names;
|
||||
|
|
@ -254,8 +254,8 @@ struct struct_member_t : public LineInfo {
|
|||
};
|
||||
|
||||
struct struct_type_t : public data_type_t {
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const override;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
|
||||
bool packed_flag;
|
||||
bool union_flag;
|
||||
|
|
@ -279,9 +279,9 @@ struct atom_type_t : public data_type_t {
|
|||
enum type_code type_code;
|
||||
bool signed_flag;
|
||||
|
||||
virtual std::ostream& debug_dump(std::ostream&out) const;
|
||||
virtual std::ostream& debug_dump(std::ostream&out) const override;
|
||||
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
};
|
||||
|
||||
extern atom_type_t size_type;
|
||||
|
|
@ -304,9 +304,9 @@ struct vector_type_t : public data_type_t {
|
|||
inline explicit vector_type_t(ivl_variable_type_t bt, bool sf,
|
||||
std::list<pform_range_t>*pd)
|
||||
: base_type(bt), signed_flag(sf), integer_flag(false), implicit_flag(false), pdims(pd) { }
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
virtual std::ostream& debug_dump(std::ostream&out) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const override;
|
||||
virtual std::ostream& debug_dump(std::ostream&out) const override;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
|
||||
ivl_variable_type_t base_type;
|
||||
bool signed_flag;
|
||||
|
|
@ -334,8 +334,8 @@ struct parray_type_t : public array_base_t {
|
|||
inline explicit parray_type_t(data_type_t*btype, std::list<pform_range_t>*pd)
|
||||
: array_base_t(btype, pd) { }
|
||||
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const override;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -346,17 +346,17 @@ struct uarray_type_t : public array_base_t {
|
|||
: array_base_t(btype, pd) { }
|
||||
|
||||
public:
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
virtual void pform_dump(std::ostream&out, unsigned indent) const override;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
};
|
||||
|
||||
struct real_type_t : public data_type_t {
|
||||
public:
|
||||
enum type_t { REAL, SHORTREAL };
|
||||
inline explicit real_type_t(type_t tc) : type_code_(tc) { }
|
||||
virtual std::ostream& debug_dump(std::ostream&out) const;
|
||||
virtual std::ostream& debug_dump(std::ostream&out) const override;
|
||||
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
|
||||
inline type_t type_code() const { return type_code_; }
|
||||
|
||||
|
|
@ -366,16 +366,16 @@ struct real_type_t : public data_type_t {
|
|||
|
||||
struct string_type_t : public data_type_t {
|
||||
inline explicit string_type_t() { }
|
||||
~string_type_t();
|
||||
~string_type_t() override;
|
||||
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const;
|
||||
ivl_type_t elaborate_type_raw(Design*des, NetScope*scope) const override;
|
||||
};
|
||||
|
||||
struct class_type_t : public data_type_t {
|
||||
|
||||
inline explicit class_type_t(perm_string n) : name(n) { }
|
||||
|
||||
void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
void pform_dump(std::ostream&out, unsigned indent) const override;
|
||||
void pform_dump_init(std::ostream&out, unsigned indent) const;
|
||||
|
||||
// This is the named type that is supposed to be the base
|
||||
|
|
@ -408,11 +408,11 @@ struct class_type_t : public data_type_t {
|
|||
// without waiting for any constructor.
|
||||
std::vector<Statement*> initialize_static;
|
||||
|
||||
ivl_type_t elaborate_type_raw(Design*, NetScope*) const;
|
||||
ivl_type_t elaborate_type_raw(Design*, NetScope*) const override;
|
||||
|
||||
perm_string name;
|
||||
|
||||
virtual SymbolType symbol_type() const;
|
||||
virtual SymbolType symbol_type() const override;
|
||||
};
|
||||
|
||||
ivl_type_t elaborate_array_type(Design *des, NetScope *scope,
|
||||
|
|
|
|||
4
sync.cc
4
sync.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2010 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2025 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
|
||||
|
|
@ -40,7 +40,7 @@ bool NetEvWait::is_synchronous()
|
|||
return false;
|
||||
|
||||
for (unsigned pdx = 0 ; pdx < ev->nprobe() ; pdx += 1) {
|
||||
NetEvProbe*pr = ev->probe(pdx);
|
||||
const NetEvProbe*pr = ev->probe(pdx);
|
||||
|
||||
/* No level sensitive clocks. */
|
||||
if (pr->edge() == NetEvProbe::ANYEDGE)
|
||||
|
|
|
|||
12
synth.cc
12
synth.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2017 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2025 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
|
||||
|
|
@ -41,10 +41,10 @@ class do_expr : public proc_match_t {
|
|||
Design*des_;
|
||||
NetScope*scope_;
|
||||
|
||||
virtual int assign(NetAssign*);
|
||||
virtual int assign_nb(NetAssignNB*);
|
||||
virtual int event_wait(NetEvWait*);
|
||||
virtual int condit(NetCondit*);
|
||||
virtual int assign(NetAssign*) override;
|
||||
virtual int assign_nb(NetAssignNB*) override;
|
||||
virtual int event_wait(NetEvWait*) override;
|
||||
virtual int condit(NetCondit*) override;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ class synth_f : public functor_t {
|
|||
|
||||
public:
|
||||
synth_f() { top_ = NULL; }
|
||||
void process(Design*, NetProcTop*);
|
||||
void process(Design*, NetProcTop*) override;
|
||||
|
||||
private:
|
||||
void proc_always_(Design*);
|
||||
|
|
|
|||
42
synth2.cc
42
synth2.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2022 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2025 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
|
||||
|
|
@ -261,7 +261,7 @@ bool NetProcTop::tie_off_floating_inputs_(Design*des,
|
|||
continue;
|
||||
|
||||
ivl_variable_type_t data_type = IVL_VT_LOGIC;
|
||||
netvector_t*tmp_vec = new netvector_t(data_type, width-1,0);
|
||||
const netvector_t*tmp_vec = new netvector_t(data_type, width-1,0);
|
||||
NetNet*sig = new NetNet(scope(), scope()->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
sig->local_flag(true);
|
||||
|
|
@ -421,14 +421,14 @@ bool NetAssignBase::synth_async(Design*des, NetScope*scope,
|
|||
// Evaluate the index expression to a constant.
|
||||
const NetExpr*base_expr_raw = lval_->get_base();
|
||||
ivl_assert(*this, base_expr_raw);
|
||||
NetExpr*base_expr = base_expr_raw->evaluate_function(*this, scope->loop_index_tmp);
|
||||
const NetExpr*base_expr = base_expr_raw->evaluate_function(*this, scope->loop_index_tmp);
|
||||
if (! eval_as_long(base_off, base_expr)) {
|
||||
ivl_assert(*this, 0);
|
||||
}
|
||||
ivl_assert(*this, base_off >= 0);
|
||||
|
||||
ivl_variable_type_t tmp_data_type = rsig->data_type();
|
||||
netvector_t*tmp_type = new netvector_t(tmp_data_type, lsig_width-1,0);
|
||||
const netvector_t*tmp_type = new netvector_t(tmp_data_type, lsig_width-1,0);
|
||||
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_type);
|
||||
|
|
@ -451,7 +451,7 @@ bool NetAssignBase::synth_async(Design*des, NetScope*scope,
|
|||
|
||||
const NetExpr*base_expr_raw = lval_->get_base();
|
||||
ivl_assert(*this, base_expr_raw);
|
||||
NetExpr*base_expr = base_expr_raw->evaluate_function(*this, scope->loop_index_tmp);
|
||||
const NetExpr*base_expr = base_expr_raw->evaluate_function(*this, scope->loop_index_tmp);
|
||||
if (! eval_as_long(base_off, base_expr)) {
|
||||
cerr << get_fileline() << ": sorry: assignment to variable "
|
||||
"bit location is not currently supported in "
|
||||
|
|
@ -462,7 +462,7 @@ bool NetAssignBase::synth_async(Design*des, NetScope*scope,
|
|||
ivl_assert(*this, base_off >= 0);
|
||||
|
||||
ivl_variable_type_t tmp_data_type = rsig->data_type();
|
||||
netvector_t*tmp_type = new netvector_t(tmp_data_type, lsig_width-1,0);
|
||||
const netvector_t*tmp_type = new netvector_t(tmp_data_type, lsig_width-1,0);
|
||||
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_type);
|
||||
|
|
@ -679,7 +679,7 @@ static NetNet* mux_selector_reduce_width(Design*des, NetScope*scope,
|
|||
|
||||
// This is the output signal, osig.
|
||||
ivl_variable_type_t osig_data_type = IVL_VT_LOGIC;
|
||||
netvector_t*osig_vec = new netvector_t(osig_data_type, sel_need-1, 0);
|
||||
const netvector_t*osig_vec = new netvector_t(osig_data_type, sel_need-1, 0);
|
||||
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::TRI, osig_vec);
|
||||
osig->local_flag(true);
|
||||
|
|
@ -699,7 +699,7 @@ static NetNet* mux_selector_reduce_width(Design*des, NetScope*scope,
|
|||
des->add_node(ps0);
|
||||
connect(ps0->pin(1), esig->pin(0));
|
||||
|
||||
netvector_t*ps0_vec = new netvector_t(osig_data_type, sel_need-2, 0);
|
||||
const netvector_t*ps0_vec = new netvector_t(osig_data_type, sel_need-2, 0);
|
||||
NetNet*ps0_sig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::TRI, ps0_vec);
|
||||
ps0_sig->local_flag(true);
|
||||
|
|
@ -717,7 +717,7 @@ static NetNet* mux_selector_reduce_width(Design*des, NetScope*scope,
|
|||
des->add_node(ps1);
|
||||
connect(ps1->pin(1), esig->pin(0));
|
||||
|
||||
netvector_t*ps1_vec = new netvector_t(osig_data_type, sel_got-sel_need, 0);
|
||||
const netvector_t*ps1_vec = new netvector_t(osig_data_type, sel_got-sel_need, 0);
|
||||
NetNet*ps1_sig = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::TRI, ps1_vec);
|
||||
ps1_sig->local_flag(true);
|
||||
|
|
@ -819,7 +819,7 @@ bool NetCase::synth_async(Design*des, NetScope*scope,
|
|||
continue;
|
||||
}
|
||||
|
||||
NetEConst*ge = dynamic_cast<NetEConst*>(items_[item].guard);
|
||||
const NetEConst*ge = dynamic_cast<NetEConst*>(items_[item].guard);
|
||||
if (ge == 0) {
|
||||
cerr << items_[item].guard->get_fileline() << ": sorry: "
|
||||
<< "variable case item expressions with a variable "
|
||||
|
|
@ -939,7 +939,7 @@ bool NetCase::synth_async(Design*des, NetScope*scope,
|
|||
// the pin.
|
||||
if (out_mux[mdx]->pin_Result().nexus()->pick_any_net() == 0) {
|
||||
ivl_variable_type_t mux_data_type = IVL_VT_LOGIC;
|
||||
netvector_t*tmp_vec = new netvector_t(mux_data_type, mux_width[mdx]-1,0);
|
||||
const netvector_t*tmp_vec = new netvector_t(mux_data_type, mux_width[mdx]-1,0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
tmp->local_flag(true);
|
||||
|
|
@ -1105,7 +1105,7 @@ bool NetCase::synth_async_casez_(Design*des, NetScope*scope,
|
|||
}
|
||||
}
|
||||
|
||||
netvector_t*condit_type = new netvector_t(IVL_VT_LOGIC, 0, 0);
|
||||
const netvector_t*condit_type = new netvector_t(IVL_VT_LOGIC, 0, 0);
|
||||
|
||||
NetCaseCmp::kind_t case_kind = NetCaseCmp::EEQ;
|
||||
switch (type()) {
|
||||
|
|
@ -1185,7 +1185,7 @@ bool NetCase::synth_async_casez_(Design*des, NetScope*scope,
|
|||
|
||||
// Make a NetNet for the result.
|
||||
ivl_variable_type_t mux_data_type = IVL_VT_LOGIC;
|
||||
netvector_t*tmp_vec = new netvector_t(mux_data_type, mux_width[mdx]-1,0);
|
||||
const netvector_t*tmp_vec = new netvector_t(mux_data_type, mux_width[mdx]-1,0);
|
||||
NetNet*tmp = new NetNet(scope, scope->local_symbol(),
|
||||
NetNet::WIRE, tmp_vec);
|
||||
tmp->local_flag(true);
|
||||
|
|
@ -1335,7 +1335,7 @@ bool NetCondit::synth_async(Design*des, NetScope*scope,
|
|||
|
||||
// Guess the mux type from the type of the output.
|
||||
ivl_variable_type_t mux_data_type = IVL_VT_LOGIC;
|
||||
if (NetNet*tmp = nex_out.pin(idx).nexus()->pick_any_net()) {
|
||||
if (const NetNet*tmp = nex_out.pin(idx).nexus()->pick_any_net()) {
|
||||
mux_data_type = tmp->data_type();
|
||||
}
|
||||
|
||||
|
|
@ -1389,7 +1389,7 @@ bool NetCondit::synth_async(Design*des, NetScope*scope,
|
|||
mux->set_line(*this);
|
||||
des->add_node(mux);
|
||||
|
||||
netvector_t*tmp_type = 0;
|
||||
const netvector_t*tmp_type = 0;
|
||||
if (mux_width==1)
|
||||
tmp_type = new netvector_t(mux_data_type);
|
||||
else
|
||||
|
|
@ -1477,7 +1477,7 @@ bool NetForLoop::synth_async(Design*des, NetScope*scope,
|
|||
NetAssign*step_assign = dynamic_cast<NetAssign*> (step_statement_);
|
||||
char assign_operator = step_assign->assign_operator();
|
||||
ivl_assert(*this, step_assign);
|
||||
NetExpr*step_expr = step_assign->rval();
|
||||
const NetExpr*step_expr = step_assign->rval();
|
||||
|
||||
// Tell the scope that this index value is like a genvar.
|
||||
LocalVar index_var;
|
||||
|
|
@ -1814,11 +1814,11 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope,
|
|||
case NetEvProbe::NEGEDGE: {
|
||||
bool is_inverter = false;
|
||||
NetNode*node = rst->pin(0).nexus()->pick_any_node();
|
||||
if (NetLogic*gate = dynamic_cast<NetLogic*>(node)) {
|
||||
if (const NetLogic*gate = dynamic_cast<NetLogic*>(node)) {
|
||||
if (gate->type() == NetLogic::NOT)
|
||||
is_inverter = true;
|
||||
}
|
||||
if (NetUReduce*gate = dynamic_cast<NetUReduce*>(node)) {
|
||||
if (const NetUReduce*gate = dynamic_cast<NetUReduce*>(node)) {
|
||||
if (gate->type() == NetUReduce::NOR)
|
||||
is_inverter = true;
|
||||
}
|
||||
|
|
@ -1854,7 +1854,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope,
|
|||
ivl_assert(*this, tmp_out.pin_count() == ff_aset.pin_count());
|
||||
|
||||
for (unsigned pin = 0 ; pin < tmp_out.pin_count() ; pin += 1) {
|
||||
Nexus*rst_nex = tmp_out.pin(pin).nexus();
|
||||
const Nexus*rst_nex = tmp_out.pin(pin).nexus();
|
||||
|
||||
if (!all_bits_driven(tmp_masks[pin])) {
|
||||
cerr << get_fileline() << ": sorry: Not all bits of '"
|
||||
|
|
@ -2034,7 +2034,7 @@ bool NetEvWait::synth_sync(Design*des, NetScope*scope,
|
|||
|
||||
/* Get the input set from the substatement. This will be used
|
||||
to figure out which of the probes is the clock. */
|
||||
NexusSet*statement_input = statement_ -> nex_input();
|
||||
const NexusSet*statement_input = statement_ -> nex_input();
|
||||
|
||||
/* Search for a clock input. The clock input is the edge event
|
||||
that is not also an input to the substatement. */
|
||||
|
|
@ -2209,7 +2209,7 @@ bool NetProcTop::synth_sync(Design*des)
|
|||
class synth2_f : public functor_t {
|
||||
|
||||
public:
|
||||
void process(Design*, NetProcTop*);
|
||||
void process(Design*, NetProcTop*) override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998-2021 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1998-2025 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
|
||||
|
|
@ -563,7 +563,7 @@ string verinum::as_string() const
|
|||
string res;
|
||||
for (unsigned idx = nbits_ ; idx > 0 ; idx -= 8) {
|
||||
char char_val = 0;
|
||||
V*bp = bits_+idx;
|
||||
const V*bp = bits_+idx;
|
||||
|
||||
if (*(--bp) == V1) char_val |= 0x80;
|
||||
if (*(--bp) == V1) char_val |= 0x40;
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ bool load_vpi_module(const char*path)
|
|||
ivl_dlclose(dll);
|
||||
return true;
|
||||
}
|
||||
vpip_set_callback_t set_callback = (vpip_set_callback_t)function;
|
||||
vpip_set_callback_t set_callback = static_cast<vpip_set_callback_t>(function);
|
||||
if (!set_callback(&vpi_routines, vpip_routines_version)) {
|
||||
cerr << "error: Failed to link '" << path << "'. "
|
||||
"Try rebuilding it with iverilog-vpi." << endl;
|
||||
|
|
|
|||
|
|
@ -1082,7 +1082,7 @@ struct __vpiModPath* vpip_make_modpath(vvp_net_t *net)
|
|||
#ifdef CHECK_WITH_VALGRIND
|
||||
mp_count += 1;
|
||||
mp_list = static_cast<struct __vpiModPath **>
|
||||
(realloc(static_cast<void*>(mp_list),
|
||||
(realloc(mp_list,
|
||||
mp_count*sizeof(struct __vpiModPath **)));
|
||||
mp_list[mp_count-1] = obj;
|
||||
#endif
|
||||
|
|
@ -1451,7 +1451,7 @@ struct __vpiInterModPath* vpip_make_intermodpath(vvp_net_t *net, vpiPortInfo* po
|
|||
#ifdef CHECK_WITH_VALGRIND
|
||||
imp_count += 1;
|
||||
imp_list = static_cast<struct __vpiInterModPath **>
|
||||
(realloc(static_cast<void>(imp_list),
|
||||
(realloc(imp_list,
|
||||
imp_count*sizeof(struct __vpiInterModPath **)));
|
||||
imp_list[imp_count-1] = obj;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ void vpip_load_module(const char*name)
|
|||
/* Add the dll to the list so it can be closed when we are done. */
|
||||
dll_list_cnt += 1;
|
||||
dll_list = static_cast<ivl_dll_t*>
|
||||
(realloc(static_cast<void *>(dll_list), dll_list_cnt*sizeof(ivl_dll_t)));
|
||||
(realloc(dll_list, dll_list_cnt*sizeof(ivl_dll_t)));
|
||||
dll_list[dll_list_cnt-1] = dll;
|
||||
|
||||
vpi_mode_flag = VPI_MODE_REGISTER;
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ static void delete_sub_scopes(__vpiScope *scope)
|
|||
citer != scope->classes.end(); ++ citer ) {
|
||||
class_list_count += 1;
|
||||
class_list = static_cast<class_type **>
|
||||
(realloc(static_cast<void>(class_list),
|
||||
(realloc(class_list,
|
||||
class_list_count*sizeof(class_type **)));
|
||||
class_list[class_list_count-1] = citer->second;
|
||||
}
|
||||
|
|
@ -663,7 +663,7 @@ unsigned vpip_add_item_to_context(automatic_hooks_s*item,
|
|||
(malloc(sizeof(automatic_hooks_s*)));
|
||||
else
|
||||
scope->item = static_cast<automatic_hooks_s**>
|
||||
(realloc(static_cast<void *>(scope->item),
|
||||
(realloc(scope->item,
|
||||
sizeof(automatic_hooks_s*)*scope->nitem));
|
||||
|
||||
scope->item[idx] = item;
|
||||
|
|
|
|||
|
|
@ -1204,7 +1204,7 @@ void* __vpiSignal::operator new(size_t siz)
|
|||
VALGRIND_CREATE_MEMPOOL(alloc_array, 0, 1);
|
||||
signal_pool_count += 1;
|
||||
signal_pool = static_cast<vpiSignal_plug **>
|
||||
(realloc(static_cast<void *>(signal_pool),
|
||||
(realloc(signal_pool,
|
||||
signal_pool_count*sizeof(vpiSignal_plug **)));
|
||||
signal_pool[signal_pool_count-1] = alloc_array;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -581,7 +581,7 @@ static struct __vpiUserSystf* allocate_def(void)
|
|||
}
|
||||
|
||||
def_table = static_cast<struct __vpiUserSystf**>
|
||||
(realloc(static_cast<void *>(def_table),
|
||||
(realloc(def_table,
|
||||
(def_count+1)*sizeof(struct __vpiUserSystf*)));
|
||||
|
||||
def_table[def_count] = new __vpiUserSystf;
|
||||
|
|
@ -708,7 +708,7 @@ static void add_vpi_call_error(vpi_call_error_type type, const char *name,
|
|||
long file_idx, long lineno)
|
||||
{
|
||||
vpi_call_error_lst = static_cast<vpi_call_error_p>
|
||||
(realloc(static_cast<void *>(vpi_call_error_lst),
|
||||
(realloc(vpi_call_error_lst,
|
||||
(vpi_call_error_num + 1) *
|
||||
sizeof(vpi_call_error_s)));
|
||||
vpi_call_error_lst[vpi_call_error_num].type = type;
|
||||
|
|
|
|||
Loading…
Reference in New Issue