Commit 5b26ad55 by Ian Lance Taylor

Permit _ as a result variable name.

From-SVN: r167877
parent 354bc607
...@@ -640,7 +640,7 @@ Gogo::start_function(const std::string& name, Function_type* type, ...@@ -640,7 +640,7 @@ Gogo::start_function(const std::string& name, Function_type* type,
} }
} }
function->create_named_result_variables(); function->create_named_result_variables(this);
const std::string* pname; const std::string* pname;
std::string nested_name; std::string nested_name;
...@@ -2473,7 +2473,7 @@ Function::Function(Function_type* type, Function* enclosing, Block* block, ...@@ -2473,7 +2473,7 @@ Function::Function(Function_type* type, Function* enclosing, Block* block,
// Create the named result variables. // Create the named result variables.
void void
Function::create_named_result_variables() Function::create_named_result_variables(Gogo* gogo)
{ {
const Typed_identifier_list* results = this->type_->results(); const Typed_identifier_list* results = this->type_->results();
if (results == NULL if (results == NULL
...@@ -2490,10 +2490,17 @@ Function::create_named_result_variables() ...@@ -2490,10 +2490,17 @@ Function::create_named_result_variables()
p != results->end(); p != results->end();
++p, ++index) ++p, ++index)
{ {
Result_variable* result = new Result_variable(p->type(), this, std::string name = p->name();
index); if (Gogo::is_sink_name(name))
Named_object* no = block->bindings()->add_result_variable(p->name(), {
result); static int unnamed_result_counter;
char buf[100];
snprintf(buf, sizeof buf, "_$%d", unnamed_result_counter);
++unnamed_result_counter;
name = gogo->pack_hidden_name(buf, false);
}
Result_variable* result = new Result_variable(p->type(), this, index);
Named_object* no = block->bindings()->add_result_variable(name, result);
this->named_results_->push_back(no); this->named_results_->push_back(no);
} }
} }
......
...@@ -785,7 +785,7 @@ class Function ...@@ -785,7 +785,7 @@ class Function
// Create the named result variables in the outer block. // Create the named result variables in the outer block.
void void
create_named_result_variables(); create_named_result_variables(Gogo*);
// Add a new field to the closure variable. // Add a new field to the closure variable.
void void
......
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