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
This commit is contained in:
parent
c735deb4fa
commit
4f3952228a
@ -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.
|
||||
|
@ -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")))
|
||||
|
@ -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; }
|
||||
@ -4017,6 +4024,9 @@ class Receive_expression : public Expression
|
||||
Bexpression*
|
||||
do_get_backend(Translate_context*);
|
||||
|
||||
void
|
||||
do_export(Export_function_body*) const;
|
||||
|
||||
void
|
||||
do_dump_expression(Ast_dump_context*) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user