diff --git a/tgt-vhdl/support.cc b/tgt-vhdl/support.cc index e76730241..bdbeab6f8 100644 --- a/tgt-vhdl/support.cc +++ b/tgt-vhdl/support.cc @@ -64,41 +64,27 @@ void support_function::emit(std::ostream &of, int level) const switch (type_) { case SF_UNSIGNED_TO_BOOLEAN: - of << "(X : unsigned) return Boolean is"; - newline(of, level); - of << "begin"; - newline(of, indent(level)); - of << "return X /= To_Unsigned(0, X'Length);"; - newline(of, level); + of << "(X : unsigned) return Boolean is" << nl_string(level) + << "begin" << nl_string(indent(level)) + << "return X /= To_Unsigned(0, X'Length);" << nl_string(level); break; case SF_SIGNED_TO_BOOLEAN: - of << "(X : signed) return Boolean is"; - newline(of, level); - of << "begin"; - newline(of, indent(level)); - of << "return X /= To_Signed(0, X'Length);"; - newline(of, level); + of << "(X : signed) return Boolean is" << nl_string(level) + << "begin" << nl_string(indent(level)) + << "return X /= To_Signed(0, X'Length);" << nl_string (level); break; case SF_BOOLEAN_TO_LOGIC: - of << "(B : Boolean) return std_logic is"; - newline(of, level); - of << "begin"; - newline(of, indent(level)); - of << "if B then"; - newline(of, indent(indent(level))); - of << "return '1'"; - newline(of, indent(level)); - of << "else"; - newline(of, indent(indent(level))); - of << "return '0'"; - newline(of, indent(level)); - of << "end if;"; - newline(of, level); + of << "(B : Boolean) return std_logic is" << nl_string(level) + << "begin" << nl_string(indent(level)) + << "if B then" << nl_string(indent(indent(level))) + << "return '1'" << nl_string(indent(level)) + << "else" << nl_string(indent(indent(level))) + << "return '0'" << nl_string(indent(level)) + << "end if;" << nl_string(level); break; default: assert(false); } - of << "end function;"; - newline(of, level); + of << "end function;" << nl_string(level); } diff --git a/tgt-vhdl/vhdl_element.cc b/tgt-vhdl/vhdl_element.cc index e631319fc..fc09fe158 100644 --- a/tgt-vhdl/vhdl_element.cc +++ b/tgt-vhdl/vhdl_element.cc @@ -35,6 +35,13 @@ int indent(int level) return level + VHDL_INDENT; } +std::string nl_string(int level) +{ + std::ostringstream ss; + newline(ss, level); + return ss.str(); +} + /* * Emit a newline and indent to the correct level. */ diff --git a/tgt-vhdl/vhdl_element.hh b/tgt-vhdl/vhdl_element.hh index abccdfdb2..f4248500b 100644 --- a/tgt-vhdl/vhdl_element.hh +++ b/tgt-vhdl/vhdl_element.hh @@ -49,6 +49,7 @@ typedef std::list element_list_t; int indent(int level); void newline(std::ostream &of, int level); +std::string nl_string(int level); void blank_line(std::ostream &of, int level); #endif