diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-05-10 19:41:55 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-05-10 19:41:55 +0000 |
commit | 4f3952228acc6e60cd5d4e356094319bb2aca010 (patch) | |
tree | f984027ce277325a6dd9023205d9846b6f9f9357 /gcc | |
parent | c735deb4fa985b0ab210cbad3802d46a7d4aaa17 (diff) | |
download | gcc-4f3952228acc6e60cd5d4e356094319bb2aca010.zip gcc-4f3952228acc6e60cd5d4e356094319bb2aca010.tar.gz gcc-4f3952228acc6e60cd5d4e356094319bb2aca010.tar.bz2 |
compiler: permit inlining receive expressions
This does not permit any new inlinable functions in the standard library.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176637
From-SVN: r271074
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 21 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.h | 10 |
3 files changed, 32 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 8158367..d8bcef4 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -b5e4ba88a2e7f3c34e9183f43370c38ea639c393 +76ab85364745e445498fe53f9ca8e37b49650779 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index ed65852..54f6e52 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -15423,6 +15423,15 @@ Receive_expression::do_get_backend(Translate_context* context) return Expression::make_compound(recv, recv_ref, loc)->get_backend(context); } +// Export a receive expression. + +void +Receive_expression::do_export(Export_function_body* efb) const +{ + efb->write_c_string("<-"); + this->channel_->export_expression(efb); +} + // Dump ast representation for a receive expression. void @@ -15432,6 +15441,16 @@ Receive_expression::do_dump_expression(Ast_dump_context* ast_dump_context) const ast_dump_context->dump_expression(channel_); } +// Import a receive expression. + +Expression* +Receive_expression::do_import(Import_expression* imp, Location loc) +{ + imp->require_c_string("<-"); + Expression* expr = Expression::import_expression(imp, loc); + return Expression::make_receive(expr, loc); +} + // Make a receive expression. Receive_expression* @@ -16783,6 +16802,8 @@ Expression::import_expression(Import_expression* imp, Location loc) // This handles integers, floats and complex constants. return Integer_expression::do_import(imp, loc); } + else if (imp->match_c_string("<-")) + return Receive_expression::do_import(imp, loc); else if (imp->match_c_string("$nil") || (imp->version() < EXPORT_FORMAT_V3 && imp->match_c_string("nil"))) diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index 2cca824..9ed81f1 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -3982,6 +3982,9 @@ class Receive_expression : public Expression channel() { return this->channel_; } + static Expression* + do_import(Import_expression*, Location); + protected: int do_traverse(Traverse* traverse) @@ -4010,6 +4013,10 @@ class Receive_expression : public Expression return Expression::make_receive(this->channel_->copy(), this->location()); } + int + do_inlining_cost() const + { return 1; } + bool do_must_eval_in_order() const { return true; } @@ -4018,6 +4025,9 @@ class Receive_expression : public Expression do_get_backend(Translate_context*); void + do_export(Export_function_body*) const; + + void do_dump_expression(Ast_dump_context*) const; private: |