Commit e3552bf9 by Ian Lance Taylor

compiler: Type check params in sink function decl.

    
    When a function is declared and named with the blank identifier, only
    the syntax is checked.  This patch modifies the parser to add a dummy
    node for each function declaration with a blank identifier name that
    will be type checked like any function declaration.
    
    Fixes golang/go#11535.
    
    Reviewed-on: https://go-review.googlesource.com/13792

From-SVN: r227160
parent cd0fea2b
cc7303c97b232ea979cab950d95aaf76c4e0f5b5 81810917af7ba19e1f9f8efc8b1989f7d6419d30
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -2305,8 +2305,20 @@ Parse::function_decl(bool saw_nointerface) ...@@ -2305,8 +2305,20 @@ Parse::function_decl(bool saw_nointerface)
if (!this->peek_token()->is_op(OPERATOR_LCURLY)) if (!this->peek_token()->is_op(OPERATOR_LCURLY))
{ {
if (named_object == NULL && !Gogo::is_sink_name(name)) if (named_object == NULL)
{ {
// Function declarations with the blank identifier as a name are
// mostly ignored since they cannot be called. We make an object
// for this declaration for type-checking purposes.
if (Gogo::is_sink_name(name))
{
static int count;
char buf[30];
snprintf(buf, sizeof buf, ".$sinkfndecl%d", count);
++count;
name = std::string(buf);
}
if (fntype == NULL if (fntype == NULL
|| (expected_receiver && rec == NULL)) || (expected_receiver && rec == NULL))
this->gogo_->add_erroneous_name(name); this->gogo_->add_erroneous_name(name);
......
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