Commit cfebcf30 by Ian Lance Taylor Committed by Ian Lance Taylor

Use backend interface for expression statements.

	* go-gcc.cc (Gcc_backend::expression_statement): New function.

From-SVN: r172051
parent 763ea608
2011-04-06 Ian Lance Taylor <iant@google.com>
* go-gcc.cc (Gcc_backend::expression_statement): New function.
2011-04-04 Ian Lance Taylor <iant@google.com> 2011-04-04 Ian Lance Taylor <iant@google.com>
* go-gcc.c (class Blabel): Define. * go-gcc.c (class Blabel): Define.
......
...@@ -167,6 +167,9 @@ class Gcc_backend : public Backend ...@@ -167,6 +167,9 @@ class Gcc_backend : public Backend
// Statements. // Statements.
Bstatement* Bstatement*
expression_statement(Bexpression*);
Bstatement*
assignment_statement(Bexpression* lhs, Bexpression* rhs, source_location); assignment_statement(Bexpression* lhs, Bexpression* rhs, source_location);
Bstatement* Bstatement*
...@@ -206,6 +209,15 @@ get_identifier_from_string(const std::string& str) ...@@ -206,6 +209,15 @@ get_identifier_from_string(const std::string& str)
{ {
return get_identifier_with_length(str.data(), str.length()); return get_identifier_with_length(str.data(), str.length());
} }
// An expression as a statement.
Bstatement*
Gcc_backend::expression_statement(Bexpression* expr)
{
return this->make_statement(expr->get_tree());
}
// Assignment. // Assignment.
Bstatement* Bstatement*
......
...@@ -107,6 +107,10 @@ class Backend ...@@ -107,6 +107,10 @@ class Backend
// Statements. // Statements.
// Create an expression statement.
virtual Bstatement*
expression_statement(Bexpression*) = 0;
// Create an assignment statement. // Create an assignment statement.
virtual Bstatement* virtual Bstatement*
assignment_statement(Bexpression* lhs, Bexpression* rhs, assignment_statement(Bexpression* lhs, Bexpression* rhs,
......
...@@ -1551,8 +1551,7 @@ class Expression_statement : public Statement ...@@ -1551,8 +1551,7 @@ class Expression_statement : public Statement
do_may_fall_through() const; do_may_fall_through() const;
tree tree
do_get_tree(Translate_context* context) do_get_tree(Translate_context* context);
{ return this->expr_->get_tree(context); }
private: private:
Expression* expr_; Expression* expr_;
...@@ -1589,6 +1588,17 @@ Expression_statement::do_may_fall_through() const ...@@ -1589,6 +1588,17 @@ Expression_statement::do_may_fall_through() const
return true; return true;
} }
// Convert to backend representation.
tree
Expression_statement::do_get_tree(Translate_context* context)
{
tree expr_tree = this->expr_->get_tree(context);
Bexpression* bexpr = tree_to_expr(expr_tree);
Bstatement* ret = context->backend()->expression_statement(bexpr);
return statement_to_tree(ret);
}
// Make an expression statement from an Expression. // Make an expression statement from an Expression.
Statement* Statement*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment