diff --git a/netlist.cc b/netlist.cc index c0650959e..328e1a42b 100644 --- a/netlist.cc +++ b/netlist.cc @@ -2524,6 +2524,20 @@ NetETernary::~NetETernary() delete false_val_; } +const netenum_t* NetETernary::enumeration() const +{ + // If the condition can evaluate to an ambiguous value, + // the result may be blended, and so is not guaranteed + // to be a valid enumeration value. + if (cond_->expr_type() != IVL_VT_BOOL) + return 0; + + if (true_val_->enumeration() != false_val_->enumeration()) + return 0; + + return true_val_->enumeration(); +} + const NetExpr* NetETernary::cond_expr() const { return cond_; diff --git a/netlist.h b/netlist.h index ae546bc94..66eb0890e 100644 --- a/netlist.h +++ b/netlist.h @@ -4757,6 +4757,8 @@ class NetETernary : public NetExpr { NetETernary(NetExpr*c, NetExpr*t, NetExpr*f, unsigned wid, bool signed_flag); ~NetETernary(); + const netenum_t* enumeration() const; + const NetExpr*cond_expr() const; const NetExpr*true_expr() const; const NetExpr*false_expr() const;