From e569e07d4ee6abdffbbbfa7116586c9308651b5b Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Tue, 17 Feb 2015 14:58:33 +0100 Subject: [PATCH] vhdlpp: Type 'NATURAL' is translated to 'int unsigned'. --- vhdlpp/expression_elaborate.cc | 2 +- vhdlpp/library.cc | 3 +-- vhdlpp/vtype.cc | 5 ++++- vhdlpp/vtype.h | 3 ++- vhdlpp/vtype_emit.cc | 3 +++ vhdlpp/vtype_stream.cc | 3 +++ 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/vhdlpp/expression_elaborate.cc b/vhdlpp/expression_elaborate.cc index c5c67e9e6..19c79b591 100644 --- a/vhdlpp/expression_elaborate.cc +++ b/vhdlpp/expression_elaborate.cc @@ -570,7 +570,7 @@ const VType* ExpAttribute::probe_type(Entity*ent, ScopeBase*scope) const base_->probe_type(ent, scope); if (name_ == "length" || name_ == "left" || name_ == "right") { - return &primitive_INTEGER; + return &primitive_NATURAL; } return 0; diff --git a/vhdlpp/library.cc b/vhdlpp/library.cc index d906f58dc..61ae426df 100644 --- a/vhdlpp/library.cc +++ b/vhdlpp/library.cc @@ -387,12 +387,11 @@ static void import_std_use(const YYLTYPE&loc, ActiveScope*/*res*/, perm_string p const VTypePrimitive primitive_BOOLEAN(VTypePrimitive::BOOLEAN, true); const VTypePrimitive primitive_BIT(VTypePrimitive::BIT, true); const VTypePrimitive primitive_INTEGER(VTypePrimitive::INTEGER); +const VTypePrimitive primitive_NATURAL(VTypePrimitive::NATURAL); const VTypePrimitive primitive_REAL(VTypePrimitive::REAL); const VTypePrimitive primitive_STDLOGIC(VTypePrimitive::STDLOGIC, true); const VTypePrimitive primitive_CHARACTER(VTypePrimitive::CHARACTER); -const VTypeRange primitive_NATURAL(&primitive_INTEGER, INT64_MAX, 0); - static const VTypeArray primitive_BIT_VECTOR(&primitive_BIT, vector (1)); static const VTypeArray primitive_BOOL_VECTOR(&primitive_BOOLEAN, vector (1)); static const VTypeArray primitive_STRING(&primitive_CHARACTER, vector (1)); diff --git a/vhdlpp/vtype.cc b/vhdlpp/vtype.cc index efda4d1a1..9acfcacee 100644 --- a/vhdlpp/vtype.cc +++ b/vhdlpp/vtype.cc @@ -67,11 +67,14 @@ void VTypePrimitive::show(ostream&out) const case INTEGER: out << "INTEGER"; break; + case NATURAL: + out << "NATURAL"; + break; case REAL: out << "REAL"; break; case STDLOGIC: - out << "std_logic"; + out << "STD_LOGIC"; break; } } diff --git a/vhdlpp/vtype.h b/vhdlpp/vtype.h index 562ebb155..c5cdff9a4 100644 --- a/vhdlpp/vtype.h +++ b/vhdlpp/vtype.h @@ -151,7 +151,7 @@ class VTypeERROR : public VType { class VTypePrimitive : public VType { public: - enum type_t { BOOLEAN, BIT, INTEGER, REAL, STDLOGIC, CHARACTER }; + enum type_t { BOOLEAN, BIT, INTEGER, NATURAL, REAL, STDLOGIC, CHARACTER }; public: VTypePrimitive(type_t tt, bool packed = false); @@ -177,6 +177,7 @@ class VTypePrimitive : public VType { extern const VTypePrimitive primitive_BOOLEAN; extern const VTypePrimitive primitive_BIT; extern const VTypePrimitive primitive_INTEGER; +extern const VTypePrimitive primitive_NATURAL; extern const VTypePrimitive primitive_REAL; extern const VTypePrimitive primitive_STDLOGIC; extern const VTypePrimitive primitive_CHARACTER; diff --git a/vhdlpp/vtype_emit.cc b/vhdlpp/vtype_emit.cc index 7675568f9..e64e18aa5 100644 --- a/vhdlpp/vtype_emit.cc +++ b/vhdlpp/vtype_emit.cc @@ -154,6 +154,9 @@ int VTypePrimitive::emit_primitive_type(ostream&out) const case STDLOGIC: out << "logic"; break; + case NATURAL: + out << "int unsigned"; + break; case INTEGER: out << "int"; break; diff --git a/vhdlpp/vtype_stream.cc b/vhdlpp/vtype_stream.cc index 3e4572049..6d24b6d74 100644 --- a/vhdlpp/vtype_stream.cc +++ b/vhdlpp/vtype_stream.cc @@ -140,6 +140,9 @@ void VTypePrimitive::write_to_stream(ostream&fd) const case INTEGER: fd << "integer"; break; + case NATURAL: + fd << "natural"; + break; case REAL: fd << "real"; break;