diff options
author | Ian Lance Taylor <iant@google.com> | 2011-04-06 15:30:20 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-04-06 15:30:20 +0000 |
commit | cfebcf30eae6e2f41e61d600f129872aaa286fb3 (patch) | |
tree | e4c5789d3e18768d85a0d98624e3eb6b2fd8fa0a | |
parent | 763ea608b45d48c7bf8d81160ed0227e201af548 (diff) | |
download | gcc-cfebcf30eae6e2f41e61d600f129872aaa286fb3.zip gcc-cfebcf30eae6e2f41e61d600f129872aaa286fb3.tar.gz gcc-cfebcf30eae6e2f41e61d600f129872aaa286fb3.tar.bz2 |
Use backend interface for expression statements.
* go-gcc.cc (Gcc_backend::expression_statement): New function.
From-SVN: r172051
-rw-r--r-- | gcc/go/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/go/go-gcc.cc | 12 | ||||
-rw-r--r-- | gcc/go/gofrontend/backend.h | 4 | ||||
-rw-r--r-- | gcc/go/gofrontend/statements.cc | 14 |
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index 657091a..b83eae8 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,7 @@ +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> * go-gcc.c (class Blabel): Define. diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc index ee100c6..ce26d4d 100644 --- a/gcc/go/go-gcc.cc +++ b/gcc/go/go-gcc.cc @@ -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::string& str) { 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* diff --git a/gcc/go/gofrontend/backend.h b/gcc/go/gofrontend/backend.h index 814263e..a84b9e8 100644 --- a/gcc/go/gofrontend/backend.h +++ b/gcc/go/gofrontend/backend.h @@ -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, diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index 854b329..da29a35d 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -1551,8 +1551,7 @@ class Expression_statement : public Statement 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_through() const 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* |