This patch to the Go frontend uses the backend interface for expression statements. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian 2011-04-06 Ian Lance Taylor <i...@google.com> * go-gcc.cc (Gcc_backend::expression_statement): New function.
Index: gcc/go/go-gcc.cc =================================================================== --- gcc/go/go-gcc.cc (revision 171968) +++ gcc/go/go-gcc.cc (working copy) @@ -167,6 +167,9 @@ class Gcc_backend : public Backend // Statements. Bstatement* + expression_statement(Bexpression*); + + Bstatement* assignment_statement(Bexpression* lhs, Bexpression* rhs, source_location); Bstatement* @@ -206,6 +209,15 @@ get_identifier_from_string(const std::st { 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. Bstatement* Index: gcc/go/gofrontend/statements.cc =================================================================== --- gcc/go/gofrontend/statements.cc (revision 171968) +++ gcc/go/gofrontend/statements.cc (working copy) @@ -1551,8 +1551,7 @@ class Expression_statement : public Stat do_may_fall_through() const; tree - do_get_tree(Translate_context* context) - { return this->expr_->get_tree(context); } + do_get_tree(Translate_context* context); private: Expression* expr_; @@ -1589,6 +1588,17 @@ Expression_statement::do_may_fall_throug 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. Statement* Index: gcc/go/gofrontend/backend.h =================================================================== --- gcc/go/gofrontend/backend.h (revision 171968) +++ gcc/go/gofrontend/backend.h (working copy) @@ -107,6 +107,10 @@ class Backend // Statements. + // Create an expression statement. + virtual Bstatement* + expression_statement(Bexpression*) = 0; + // Create an assignment statement. virtual Bstatement* assignment_statement(Bexpression* lhs, Bexpression* rhs,