Make vhdl_element::emit a little more generic

This commit is contained in:
Nick Gasson 2008-07-01 10:37:22 +01:00
parent f03dfb50ad
commit 050aa277ae
7 changed files with 74 additions and 74 deletions

View File

@ -38,14 +38,14 @@ int indent(int level)
/*
* Emit a newline and indent to the correct level.
*/
void newline(std::ofstream &of, int level)
void newline(std::ostream &of, int level)
{
of << std::endl;
while (level--)
of << ' ';
}
void blank_line(std::ofstream &of, int level)
void blank_line(std::ostream &of, int level)
{
of << std::endl;
newline(of, level);
@ -61,7 +61,7 @@ void vhdl_element::set_comment(std::string comment)
* a line before the element (end_of_line is false) or at the
* end of the line containing the element (end_of_line is true).
*/
void vhdl_element::emit_comment(std::ofstream &of, int level,
void vhdl_element::emit_comment(std::ostream &of, int level,
bool end_of_line) const
{
if (comment_.size() > 0) {

View File

@ -34,11 +34,11 @@ class vhdl_element {
public:
virtual ~vhdl_element() {}
virtual void emit(std::ofstream &of, int level=0) const = 0;
virtual void emit(std::ostream &of, int level=0) const = 0;
void set_comment(std::string comment);
protected:
void emit_comment(std::ofstream &of, int level,
void emit_comment(std::ostream &of, int level,
bool end_of_line=false) const;
private:
std::string comment_;
@ -47,8 +47,8 @@ private:
typedef std::list<vhdl_element*> element_list_t;
int indent(int level);
void newline(std::ofstream &of, int level);
void blank_line(std::ofstream &of, int level);
void newline(std::ostream &of, int level);
void blank_line(std::ostream &of, int level);
#endif

View File

@ -26,7 +26,7 @@
#include <cassert>
template <class T>
void emit_children(std::ofstream &of,
void emit_children(std::ostream &of,
const std::list<T*> &children,
int level, const char *delim="")
{

View File

@ -80,7 +80,7 @@ void vhdl_entity::add_port(vhdl_port_decl *decl)
ports_.add_decl(decl);
}
void vhdl_entity::emit(std::ofstream &of, int level) const
void vhdl_entity::emit(std::ostream &of, int level) const
{
// Pretty much every design will use std_logic so we
// might as well include it by default
@ -122,7 +122,7 @@ void vhdl_arch::add_stmt(vhdl_conc_stmt *stmt)
stmts_.push_back(stmt);
}
void vhdl_arch::emit(std::ofstream &of, int level) const
void vhdl_arch::emit(std::ostream &of, int level) const
{
emit_comment(of, level);
of << "architecture " << name_ << " of " << entity_;
@ -139,7 +139,7 @@ void vhdl_process::add_sensitivity(const char *name)
sens_.push_back(name);
}
void vhdl_process::emit(std::ofstream &of, int level) const
void vhdl_process::emit(std::ostream &of, int level) const
{
// If there are no statements in the body, this process
// can't possibly do anything, so don't bother to emit it
@ -184,7 +184,7 @@ void stmt_container::add_stmt(vhdl_seq_stmt *stmt)
stmts_.push_back(stmt);
}
void stmt_container::emit(std::ofstream &of, int level) const
void stmt_container::emit(std::ostream &of, int level) const
{
emit_children<vhdl_seq_stmt>(of, stmts_, level);
}
@ -210,7 +210,7 @@ void vhdl_comp_inst::map_port(const char *name, vhdl_expr *expr)
mapping_.push_back(pmap);
}
void vhdl_comp_inst::emit(std::ofstream &of, int level) const
void vhdl_comp_inst::emit(std::ostream &of, int level) const
{
emit_comment(of, level);
of << inst_name_ << ": " << comp_name_;
@ -258,7 +258,7 @@ vhdl_component_decl *vhdl_component_decl::component_decl_for(vhdl_entity *ent)
return decl;
}
void vhdl_component_decl::emit(std::ofstream &of, int level) const
void vhdl_component_decl::emit(std::ostream &of, int level) const
{
emit_comment(of, level);
of << "component " << name_ << " is";
@ -280,7 +280,7 @@ vhdl_wait_stmt::~vhdl_wait_stmt()
delete expr_;
}
void vhdl_wait_stmt::emit(std::ofstream &of, int level) const
void vhdl_wait_stmt::emit(std::ostream &of, int level) const
{
of << "wait";
@ -318,7 +318,7 @@ void vhdl_decl::set_initial(vhdl_expr *initial)
initial_ = initial;
}
void vhdl_port_decl::emit(std::ofstream &of, int level) const
void vhdl_port_decl::emit(std::ostream &of, int level) const
{
of << name_ << " : ";
@ -337,7 +337,7 @@ void vhdl_port_decl::emit(std::ofstream &of, int level) const
type_->emit(of, level);
}
void vhdl_var_decl::emit(std::ofstream &of, int level) const
void vhdl_var_decl::emit(std::ostream &of, int level) const
{
of << "variable " << name_ << " : ";
type_->emit(of, level);
@ -351,7 +351,7 @@ void vhdl_var_decl::emit(std::ofstream &of, int level) const
emit_comment(of, level, true);
}
void vhdl_signal_decl::emit(std::ofstream &of, int level) const
void vhdl_signal_decl::emit(std::ostream &of, int level) const
{
of << "signal " << name_ << " : ";
type_->emit(of, level);
@ -435,7 +435,7 @@ vhdl_expr_list::~vhdl_expr_list()
delete_children<vhdl_expr>(exprs_);
}
void vhdl_expr_list::emit(std::ofstream &of, int level) const
void vhdl_expr_list::emit(std::ostream &of, int level) const
{
of << "(";
@ -450,7 +450,7 @@ void vhdl_expr_list::emit(std::ofstream &of, int level) const
of << ")";
}
void vhdl_pcall_stmt::emit(std::ofstream &of, int level) const
void vhdl_pcall_stmt::emit(std::ostream &of, int level) const
{
of << name_;
if (!exprs_.empty())
@ -464,7 +464,7 @@ vhdl_var_ref::~vhdl_var_ref()
delete slice_;
}
void vhdl_var_ref::emit(std::ofstream &of, int level) const
void vhdl_var_ref::emit(std::ostream &of, int level) const
{
of << name_;
if (slice_) {
@ -474,7 +474,7 @@ void vhdl_var_ref::emit(std::ofstream &of, int level) const
}
}
void vhdl_const_string::emit(std::ofstream &of, int level) const
void vhdl_const_string::emit(std::ostream &of, int level) const
{
// In some instances a string literal can be ambiguous between
// a String type and some other types (e.g. std_logic_vector)
@ -483,12 +483,12 @@ void vhdl_const_string::emit(std::ofstream &of, int level) const
of << "String'(\"" << value_ << "\")";
}
void vhdl_null_stmt::emit(std::ofstream &of, int level) const
void vhdl_null_stmt::emit(std::ostream &of, int level) const
{
of << "null;";
}
void vhdl_fcall::emit(std::ofstream &of, int level) const
void vhdl_fcall::emit(std::ostream &of, int level) const
{
of << name_;
exprs_.emit(of, level);
@ -502,7 +502,7 @@ vhdl_abstract_assign_stmt::~vhdl_abstract_assign_stmt()
delete after_;
}
void vhdl_nbassign_stmt::emit(std::ofstream &of, int level) const
void vhdl_nbassign_stmt::emit(std::ostream &of, int level) const
{
lhs_->emit(of, level);
of << " <= ";
@ -516,7 +516,7 @@ void vhdl_nbassign_stmt::emit(std::ofstream &of, int level) const
of << ";";
}
void vhdl_assign_stmt::emit(std::ofstream &of, int level) const
void vhdl_assign_stmt::emit(std::ostream &of, int level) const
{
lhs_->emit(of, level);
of << " := ";
@ -569,7 +569,7 @@ vhdl_expr *vhdl_const_bits::cast(const vhdl_type *to)
return vhdl_expr::cast(to);
}
void vhdl_const_bits::emit(std::ofstream &of, int level) const
void vhdl_const_bits::emit(std::ostream &of, int level) const
{
if (qualified_)
of << (signed_ ? "signed" : "unsigned") << "'(\"";
@ -584,17 +584,17 @@ void vhdl_const_bits::emit(std::ofstream &of, int level) const
of << (qualified_ ? "\")" : "\"");
}
void vhdl_const_bit::emit(std::ofstream &of, int level) const
void vhdl_const_bit::emit(std::ostream &of, int level) const
{
of << "'" << vl_to_vhdl_bit(bit_) << "'";
}
void vhdl_const_int::emit(std::ofstream &of, int level) const
void vhdl_const_int::emit(std::ostream &of, int level) const
{
of << value_;
}
void vhdl_const_time::emit(std::ofstream &of, int level) const
void vhdl_const_time::emit(std::ostream &of, int level) const
{
of << value_;
switch (units_) {
@ -609,7 +609,7 @@ vhdl_cassign_stmt::~vhdl_cassign_stmt()
delete rhs_;
}
void vhdl_cassign_stmt::emit(std::ofstream &of, int level) const
void vhdl_cassign_stmt::emit(std::ostream &of, int level) const
{
lhs_->emit(of, level);
of << " <= ";
@ -617,7 +617,7 @@ void vhdl_cassign_stmt::emit(std::ofstream &of, int level) const
of << ";";
}
void vhdl_assert_stmt::emit(std::ofstream &of, int level) const
void vhdl_assert_stmt::emit(std::ostream &of, int level) const
{
of << "assert false"; // TODO: Allow arbitrary expression
of << " report \"" << reason_ << "\" severity failure;";
@ -635,7 +635,7 @@ vhdl_if_stmt::~vhdl_if_stmt()
delete test_;
}
void vhdl_if_stmt::emit(std::ofstream &of, int level) const
void vhdl_if_stmt::emit(std::ostream &of, int level) const
{
of << "if ";
test_->emit(of, level);
@ -653,7 +653,7 @@ vhdl_unaryop_expr::~vhdl_unaryop_expr()
delete operand_;
}
void vhdl_unaryop_expr::emit(std::ofstream &of, int level) const
void vhdl_unaryop_expr::emit(std::ostream &of, int level) const
{
switch (op_) {
case VHDL_UNARYOP_NOT:
@ -681,7 +681,7 @@ void vhdl_binop_expr::add_expr(vhdl_expr *e)
operands_.push_back(e);
}
void vhdl_binop_expr::emit(std::ofstream &of, int level) const
void vhdl_binop_expr::emit(std::ostream &of, int level) const
{
// Expressions are fully parenthesized to remove any
// ambiguity in the output
@ -711,7 +711,7 @@ vhdl_case_branch::~vhdl_case_branch()
delete when_;
}
void vhdl_case_branch::emit(std::ofstream &of, int level) const
void vhdl_case_branch::emit(std::ostream &of, int level) const
{
of << "when ";
when_->emit(of, level);
@ -724,7 +724,7 @@ vhdl_case_stmt::~vhdl_case_stmt()
delete test_;
}
void vhdl_case_stmt::emit(std::ofstream &of, int level) const
void vhdl_case_stmt::emit(std::ostream &of, int level) const
{
of << "case ";
test_->emit(of, level);
@ -743,7 +743,7 @@ vhdl_while_stmt::~vhdl_while_stmt()
delete test_;
}
void vhdl_while_stmt::emit(std::ofstream &of, int level) const
void vhdl_while_stmt::emit(std::ostream &of, int level) const
{
of << "while ";
test_->emit(of, level);
@ -762,7 +762,7 @@ vhdl_function::vhdl_function(const char *name, vhdl_type *ret_type)
variables_.set_parent(&scope_);
}
void vhdl_function::emit(std::ofstream &of, int level) const
void vhdl_function::emit(std::ostream &of, int level) const
{
of << "function " << name_ << " (";
emit_children<vhdl_decl>(of, scope_.get_decls(), level, ";");
@ -777,7 +777,7 @@ void vhdl_function::emit(std::ofstream &of, int level) const
of << "end function;";
}
void vhdl_param_decl::emit(std::ofstream &of, int level) const
void vhdl_param_decl::emit(std::ostream &of, int level) const
{
of << name_ << " : ";
type_->emit(of, level);

View File

@ -54,7 +54,7 @@ public:
: vhdl_expr(type), name_(name), slice_(slice) {}
~vhdl_var_ref();
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
const std::string &get_name() const { return name_; }
void set_slice(vhdl_expr *s) { slice_ = s; }
private:
@ -93,7 +93,7 @@ public:
~vhdl_binop_expr();
void add_expr(vhdl_expr *e);
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
std::list<vhdl_expr*> operands_;
vhdl_binop_t op_;
@ -111,7 +111,7 @@ public:
: vhdl_expr(type), op_(op), operand_(operand) {}
~vhdl_unaryop_expr();
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_unaryop_t op_;
vhdl_expr *operand_;
@ -123,7 +123,7 @@ public:
vhdl_const_string(const char *value)
: vhdl_expr(vhdl_type::string(), true), value_(value) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
std::string value_;
};
@ -131,7 +131,7 @@ private:
class vhdl_const_bits : public vhdl_expr {
public:
vhdl_const_bits(const char *value, int width, bool issigned);
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
const std::string &get_value() const { return value_; }
vhdl_expr *cast(const vhdl_type *to);
private:
@ -143,7 +143,7 @@ class vhdl_const_bit : public vhdl_expr {
public:
vhdl_const_bit(char bit)
: vhdl_expr(vhdl_type::std_logic(), true), bit_(bit) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
char bit_;
};
@ -156,7 +156,7 @@ class vhdl_const_time : public vhdl_expr {
public:
vhdl_const_time(int64_t value, time_unit_t units)
: vhdl_expr(vhdl_type::time(), true), value_(value), units_(units) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
int64_t value_;
time_unit_t units_;
@ -166,7 +166,7 @@ class vhdl_const_int : public vhdl_expr {
public:
vhdl_const_int(int64_t value)
: vhdl_expr(vhdl_type::integer(), true), value_(value) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
int64_t value_;
};
@ -175,7 +175,7 @@ class vhdl_expr_list : public vhdl_element {
public:
~vhdl_expr_list();
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
bool empty() const { return exprs_.empty(); }
void add_expr(vhdl_expr *e);
private:
@ -193,7 +193,7 @@ public:
~vhdl_fcall() {}
void add_expr(vhdl_expr *e) { exprs_.add_expr(e); }
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
std::string name_;
vhdl_expr_list exprs_;
@ -219,7 +219,7 @@ public:
: lhs_(lhs), rhs_(rhs) {}
~vhdl_cassign_stmt();
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_var_ref *lhs_;
vhdl_expr *rhs_;
@ -243,7 +243,7 @@ public:
~stmt_container();
void add_stmt(vhdl_seq_stmt *stmt);
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
bool empty() const { return stmts_.empty(); }
private:
std::list<vhdl_seq_stmt*> stmts_;
@ -275,7 +275,7 @@ public:
vhdl_nbassign_stmt(vhdl_var_ref *lhs, vhdl_expr *rhs)
: vhdl_abstract_assign_stmt(lhs, rhs) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
};
@ -284,7 +284,7 @@ public:
vhdl_assign_stmt(vhdl_var_ref *lhs, vhdl_expr *rhs)
: vhdl_abstract_assign_stmt(lhs, rhs) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
};
@ -304,7 +304,7 @@ public:
: type_(type), expr_(expr) {}
~vhdl_wait_stmt();
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_wait_type_t type_;
vhdl_expr *expr_;
@ -313,7 +313,7 @@ private:
class vhdl_null_stmt : public vhdl_seq_stmt {
public:
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
};
@ -322,7 +322,7 @@ public:
vhdl_assert_stmt(const char *reason)
: reason_(reason) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
std::string reason_;
};
@ -335,7 +335,7 @@ public:
stmt_container *get_then_container() { return &then_part_; }
stmt_container *get_else_container() { return &else_part_; }
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_expr *test_;
stmt_container then_part_, else_part_;
@ -352,7 +352,7 @@ public:
~vhdl_case_branch();
stmt_container *get_container() { return &stmts_; }
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_expr *when_;
stmt_container stmts_;
@ -366,7 +366,7 @@ public:
~vhdl_case_stmt();
void add_branch(vhdl_case_branch *b) { branches_.push_back(b); }
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_expr *test_;
case_branch_list_t branches_;
@ -379,7 +379,7 @@ public:
~vhdl_while_stmt();
stmt_container *get_container() { return &stmts_; }
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_expr *test_;
stmt_container stmts_;
@ -394,7 +394,7 @@ class vhdl_pcall_stmt : public vhdl_seq_stmt {
public:
vhdl_pcall_stmt(const char *name) : name_(name) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
void add_expr(vhdl_expr *e) { exprs_.add_expr(e); }
private:
std::string name_;
@ -438,7 +438,7 @@ class vhdl_component_decl : public vhdl_decl {
public:
static vhdl_component_decl *component_decl_for(vhdl_entity *ent);
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_component_decl(const char *name);
@ -454,7 +454,7 @@ class vhdl_var_decl : public vhdl_decl {
public:
vhdl_var_decl(const char *name, vhdl_type *type)
: vhdl_decl(name, type) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
};
@ -465,7 +465,7 @@ class vhdl_signal_decl : public vhdl_decl {
public:
vhdl_signal_decl(const char *name, vhdl_type *type)
: vhdl_decl(name, type) {}
virtual void emit(std::ofstream &of, int level) const;
virtual void emit(std::ostream &of, int level) const;
};
@ -476,7 +476,7 @@ class vhdl_param_decl : public vhdl_decl {
public:
vhdl_param_decl(const char *name, vhdl_type *type)
: vhdl_decl(name, type) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
};
enum vhdl_port_mode_t {
@ -496,7 +496,7 @@ public:
vhdl_port_mode_t mode)
: vhdl_decl(name, type), mode_(mode) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
private:
vhdl_port_mode_t mode_;
};
@ -520,7 +520,7 @@ public:
vhdl_comp_inst(const char *inst_name, const char *comp_name);
~vhdl_comp_inst();
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
void map_port(const char *name, vhdl_expr *expr);
private:
std::string comp_name_, inst_name_;
@ -580,7 +580,7 @@ class vhdl_function : public vhdl_decl, public vhdl_procedural {
public:
vhdl_function(const char *name, vhdl_type *ret_type);
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
vhdl_scope *get_scope() { return &variables_; }
void add_param(vhdl_param_decl *p) { scope_.add_decl(p); }
private:
@ -592,7 +592,7 @@ class vhdl_process : public vhdl_conc_stmt, public vhdl_procedural {
public:
vhdl_process(const char *name = "") : name_(name) {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
void add_sensitivity(const char *name);
private:
std::string name_;
@ -609,7 +609,7 @@ public:
: name_(name), entity_(entity) {}
virtual ~vhdl_arch();
void emit(std::ofstream &of, int level=0) const;
void emit(std::ostream &of, int level=0) const;
void add_stmt(vhdl_process *proc);
void add_stmt(vhdl_conc_stmt *stmt);
vhdl_scope *get_scope() { return &scope_; }
@ -631,7 +631,7 @@ public:
vhdl_arch *arch);
virtual ~vhdl_entity();
void emit(std::ofstream &of, int level=0) const;
void emit(std::ostream &of, int level=0) const;
void add_port(vhdl_port_decl *decl);
vhdl_arch *get_arch() const { return arch_; }
const std::string &get_name() const { return name_; }

View File

@ -112,7 +112,7 @@ std::string vhdl_type::get_decl_string() const
}
}
void vhdl_type::emit(std::ofstream &of, int level) const
void vhdl_type::emit(std::ostream &of, int level) const
{
of << get_decl_string();
}

View File

@ -47,7 +47,7 @@ public:
: name_(name), msb_(msb), lsb_(lsb) {}
virtual ~vhdl_type() {}
void emit(std::ofstream &of, int level) const;
void emit(std::ostream &of, int level) const;
vhdl_type_name_t get_name() const { return name_; }
std::string get_string() const;
std::string get_decl_string() const;