Add some debug convenience functions.

This commit is contained in:
Stephen Williams 2014-07-04 18:12:35 -07:00
parent 58ec35a6af
commit c1e533d484
3 changed files with 74 additions and 0 deletions

View File

@ -237,6 +237,68 @@ ostream& operator <<(ostream&o, struct __ObjectPathManip marg)
return o;
}
ostream& operator <<(ostream&fd, Link::DIR dir)
{
switch (dir) {
case Link::PASSIVE:
fd << "PASSIVE";
break;
case Link::INPUT:
fd << "INPUT";
break;
case Link::OUTPUT:
fd << "OUTPUT";
break;
default:
fd << "<" << (int)dir << ">";
break;
}
return fd;
}
void NetPins::show_type(ostream&fd) const
{
fd << typeid(*this).name();
}
void NetObj::show_type(ostream&fd) const
{
fd << typeid(*this).name() << "[" << scope_path(scope_) << "." << name_ << "]";
}
struct __ShowTypeManip { const NetPins*pins; };
inline __ShowTypeManip show_type(const NetPins*pins)
{ __ShowTypeManip tmp; tmp.pins = pins; return tmp; }
inline ostream& operator << (ostream&fd, __ShowTypeManip man)
{
if (man.pins == 0)
fd << "NexusSet";
else
man.pins->show_type(fd);
return fd;
}
void Link::dump_link(ostream&fd, unsigned ind) const
{
const Link*cur;
const Nexus*nex = nexus();
if (nex == 0) {
fd << setw(ind) << "" << "<unlinked>" << endl;
return;
}
for (cur = nex->first_nlink() ; cur; cur = cur->next_nlink()) {
const NetPins*obj = cur->get_obj();
unsigned pin = cur->get_pin();
fd << setw(ind) << "" << "Pin " << pin
<< " of " << show_type(obj)
<< ", dir=" << cur->dir_ << endl;
}
}
void NetBranch::dump(ostream&o, unsigned ind) const
{
static const char*pin_names[2] = {

View File

@ -561,6 +561,8 @@ void NetNet::calculate_slice_widths_from_packed_dims_(void)
}
}
const list<netrange_t> NetNet::not_an_array;
NetNet::NetNet(NetScope*s, perm_string n, Type t,
const list<netrange_t>&unpacked, ivl_type_t use_net_type)
: NetObj(s, n, calculate_count(unpacked)),

View File

@ -161,6 +161,8 @@ class Link {
NetPins*get_obj();
unsigned get_pin() const;
void dump_link(ostream&fd, unsigned ind) const;
private:
// The NetNode manages these. They point back to the
// NetNode so that following the links can get me here.
@ -208,6 +210,10 @@ class NetPins : public LineInfo {
bool pins_are_virtual(void) const;
void devirtualize_pins(void);
// This is for showing a brief description of the object to
// the stream. It is used for debug and diagnostics.
virtual void show_type(std::ostream&fd) const;
private:
Link*pins_;
const unsigned npins_;
@ -258,6 +264,8 @@ class NetObj : public NetPins, public Attrib {
void dump_obj_attr(ostream&, unsigned) const;
virtual void show_type(std::ostream&fd) const;
private:
NetScope*scope_;
perm_string name_;
@ -642,6 +650,8 @@ class NetNet : public NetObj, public PortType {
typedef PortType::Enum PortType;
static const std::list<netrange_t>not_an_array;
public:
// This form is the more generic form of the constructor. For
// now, the unpacked type is not buried into an ivl_type_s object.