Make overriding port assignments in Python work,

and print better error messages when it doesn't.
This commit is contained in:
Steve Reinhardt 2008-09-29 23:30:14 -07:00
parent 45cba35fc1
commit 7bf6a219db
2 changed files with 9 additions and 3 deletions

View file

@ -212,7 +212,8 @@ class PioDevice : public MemObject
{
if (if_name == "pio") {
if (pioPort != NULL)
panic("pio port already connected to.");
fatal("%s: pio port already connected to %s",
name(), pioPort->getPeer()->name());
pioPort = new PioPort(this, sys);
return pioPort;
} else
@ -289,12 +290,14 @@ class DmaDevice : public PioDevice
{
if (if_name == "pio") {
if (pioPort != NULL)
panic("pio port already connected to.");
fatal("%s: pio port already connected to %s",
name(), pioPort->getPeer()->name());
pioPort = new PioPort(this, sys);
return pioPort;
} else if (if_name == "dma") {
if (dmaPort != NULL)
panic("dma port already connected to.");
fatal("%s: dma port already connected to %s",
name(), pioPort->getPeer()->name());
dmaPort = new DmaPort(this, sys);
return dmaPort;
} else

View file

@ -1004,6 +1004,7 @@ class PortRef(object):
if self.peer and not proxy.isproxy(self.peer):
print "warning: overwriting port", self, \
"value", self.peer, "with", other
self.peer.peer = None
self.peer = other
if proxy.isproxy(other):
other.set_param_desc(PortParamDesc())
@ -1046,6 +1047,8 @@ class PortRef(object):
if self.ccConnected: # already done this
return
peer = self.peer
if not self.peer: # nothing to connect to
return
connectPorts(self.simobj.getCCObject(), self.name, self.index,
peer.simobj.getCCObject(), peer.name, peer.index)
self.ccConnected = True