]> Cypherpunks repositories - gostls13.git/commit
spec: receiver declaration is just a parameter declaration
authorRobert Griesemer <gri@golang.org>
Tue, 24 Jun 2014 23:25:09 +0000 (16:25 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 24 Jun 2014 23:25:09 +0000 (16:25 -0700)
commit187ee2cf2bfd221d8c03daf69a08adb9ede44c84
treecd5e58610175baf621a539bb7e4699a2e90aaefc
parentde2feeafdcd41a7ba2ff67299d4ccd33ad2fdf75
spec: receiver declaration is just a parameter declaration

This CL removes the special syntax for method receivers and
makes it just like other parameters. Instead, the crucial
receiver-specific rules (exactly one receiver, receiver type
must be of the form T or *T) are specified verbally instead
of syntactically.

This is a fully backward-compatible (and minor) syntax
relaxation. As a result, the following syntactic restrictions
(which are completely irrelevant) and which were only in place
for receivers are removed:

a) receiver types cannot be parenthesized
b) receiver parameter lists cannot have a trailing comma

The result of this CL is a simplication of the spec and the
implementation, with no impact on existing (or future) code.

Noteworthy:

- gc already permits a trailing comma at the end of a receiver
  declaration:

  func (recv T,) m() {}

  This is technically a bug with the current spec; this CL will
  legalize this notation.

- gccgo produces a misleading error when a trailing comma is used:

  error: method has multiple receivers

  (even though there's only one receiver)

- Compilers and type-checkers won't need to report errors anymore
  if receiver types are parenthesized.

Fixes #4496.

LGTM=iant, rsc
R=r, rsc, iant, ken
CC=golang-codereviews
https://golang.org/cl/101500044
doc/go_spec.html