diff --git a/PExpr.h b/PExpr.h index 3481351aa..7f82b1c6b 100644 --- a/PExpr.h +++ b/PExpr.h @@ -474,6 +474,8 @@ class PEUnary : public PExpr { virtual void dump(ostream&out) const; + virtual bool elaborate_sig(Design*des, NetScope*scope) const; + virtual NetNet* elaborate_net(Design*des, NetScope*scope, unsigned width, const NetExpr* rise, @@ -533,6 +535,8 @@ class PEBinary : public PExpr { unsigned min, unsigned lval, bool&unsized_flag) const; + virtual bool elaborate_sig(Design*des, NetScope*scope) const; + virtual NetNet* elaborate_net(Design*des, NetScope*scope, unsigned width, const NetExpr* rise, @@ -648,6 +652,8 @@ class PETernary : public PExpr { unsigned min, unsigned lval, bool&unsized_flag) const; + virtual bool elaborate_sig(Design*des, NetScope*scope) const; + virtual NetNet* elaborate_net(Design*des, NetScope*scope, unsigned width, const NetExpr* rise, diff --git a/elab_sig.cc b/elab_sig.cc index dbbda62a4..95a9fa032 100644 --- a/elab_sig.cc +++ b/elab_sig.cc @@ -267,6 +267,28 @@ bool PEIdent::elaborate_sig(Design*des, NetScope*scope) const return sig != 0; } +bool PEBinary::elaborate_sig(Design*des, NetScope*scope) const +{ + bool flag = true; + + flag = left_->elaborate_sig(des, scope) && flag; + flag = right_->elaborate_sig(des, scope) && flag; + return flag; +} + +bool PETernary::elaborate_sig(Design*des, NetScope*scope) const +{ + bool flag = true; + flag = tru_->elaborate_sig(des, scope) && flag; + flag = fal_->elaborate_sig(des, scope) && flag; + return flag; +} + +bool PEUnary::elaborate_sig(Design*des, NetScope*scope) const +{ + return expr_->elaborate_sig(des, scope); +} + bool PGate::elaborate_sig(Design*des, NetScope*scope) const { return true;