From 9031f392ba937eb03f68cea4ecdf3c68d2101942 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Fri, 8 Aug 2014 11:20:07 +0200 Subject: [PATCH] Convert string to bitstring in SigVarBase constructor if applicable (vhdlpp). --- vhdlpp/expression.h | 1 + vhdlpp/vsignal.cc | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/vhdlpp/expression.h b/vhdlpp/expression.h index d26a8c5df..185622f91 100644 --- a/vhdlpp/expression.h +++ b/vhdlpp/expression.h @@ -639,6 +639,7 @@ class ExpString : public Expression { int emit(ostream&out, Entity*ent, Architecture*arc); bool is_primary(void) const; void dump(ostream&out, int indent = 0) const; + const std::vector& get_value() const { return value_; } private: int emit_as_array_(ostream&out, Entity*ent, Architecture*arc, const VTypeArray*arr); diff --git a/vhdlpp/vsignal.cc b/vhdlpp/vsignal.cc index 29627f924..59cf3774b 100644 --- a/vhdlpp/vsignal.cc +++ b/vhdlpp/vsignal.cc @@ -27,6 +27,21 @@ using namespace std; SigVarBase::SigVarBase(perm_string nam, const VType*typ, Expression*exp) : name_(nam), type_(typ), init_expr_(exp), refcnt_sequ_(0) { + if(init_expr_) + { + // convert the initializing string to bitstring if applicable + const ExpString *string = dynamic_cast(init_expr_); + if(string) { + const std::vector& val = string->get_value(); + char buf[val.size() + 1]; + std::copy(val.begin(), val.end(), buf); + buf[val.size()] = 0; + + ExpBitstring *bitstring = new ExpBitstring(buf); + delete init_expr_; + init_expr_ = bitstring; + } + } } SigVarBase::~SigVarBase()