@@ -317,38 +317,16 @@ func (p *parser) importDecl(group *Group) Decl {
317
317
return d
318
318
}
319
319
320
- // AliasSpec = identifier "=>" [ PackageName "." ] identifier .
321
- func (p * parser ) aliasDecl (tok token , name * Name , group * Group ) Decl {
322
- // no tracing since this is already called from a const/type/var/funcDecl
323
-
324
- d := new (AliasDecl )
325
- d .initFrom (& name .node )
326
-
327
- // lhs identifier and "=>" have been consumed already
328
-
329
- d .Tok = tok
330
- d .Name = name
331
- d .Orig = p .dotname (p .name ())
332
- d .Group = group
333
-
334
- return d
335
- }
336
-
337
- // ConstSpec = IdentifierList [ [ Type ] "=" ExpressionList ] | AliasSpec .
320
+ // ConstSpec = IdentifierList [ [ Type ] "=" ExpressionList ] .
338
321
func (p * parser ) constDecl (group * Group ) Decl {
339
322
if trace {
340
323
defer p .trace ("constDecl" )()
341
324
}
342
325
343
- name := p .name ()
344
- if p .got (_Rarrow ) {
345
- return p .aliasDecl (Const , name , group )
346
- }
347
-
348
326
d := new (ConstDecl )
349
- d .initFrom ( & name . node )
327
+ d .init ( p )
350
328
351
- d .NameList = p .nameList (name )
329
+ d .NameList = p .nameList (p . name () )
352
330
if p .tok != _EOF && p .tok != _Semi && p .tok != _Rparen {
353
331
d .Type = p .tryType ()
354
332
if p .got (_Assign ) {
@@ -360,21 +338,16 @@ func (p *parser) constDecl(group *Group) Decl {
360
338
return d
361
339
}
362
340
363
- // TypeSpec = identifier Type | AliasSpec .
341
+ // TypeSpec = identifier Type .
364
342
func (p * parser ) typeDecl (group * Group ) Decl {
365
343
if trace {
366
344
defer p .trace ("typeDecl" )()
367
345
}
368
346
369
- name := p .name ()
370
- if p .got (_Rarrow ) {
371
- return p .aliasDecl (Type , name , group )
372
- }
373
-
374
347
d := new (TypeDecl )
375
- d .initFrom ( & name . node )
348
+ d .init ( p )
376
349
377
- d .Name = name
350
+ d .Name = p . name ()
378
351
d .Type = p .tryType ()
379
352
if d .Type == nil {
380
353
p .syntax_error ("in type declaration" )
@@ -386,21 +359,16 @@ func (p *parser) typeDecl(group *Group) Decl {
386
359
return d
387
360
}
388
361
389
- // VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) | AliasSpec .
362
+ // VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
390
363
func (p * parser ) varDecl (group * Group ) Decl {
391
364
if trace {
392
365
defer p .trace ("varDecl" )()
393
366
}
394
367
395
- name := p .name ()
396
- if p .got (_Rarrow ) {
397
- return p .aliasDecl (Var , name , group )
398
- }
399
-
400
368
d := new (VarDecl )
401
- d .initFrom ( & name . node )
369
+ d .init ( p )
402
370
403
- d .NameList = p .nameList (name )
371
+ d .NameList = p .nameList (p . name () )
404
372
if p .got (_Assign ) {
405
373
d .Values = p .exprList ()
406
374
} else {
@@ -417,28 +385,31 @@ func (p *parser) varDecl(group *Group) Decl {
417
385
return d
418
386
}
419
387
420
- var badRecv = new (Field ) // to signal invalid receiver in funcDecl
421
-
422
- // FunctionDecl = "func" FunctionName ( Function | Signature ) | "func" AliasSpec .
388
+ // FunctionDecl = "func" FunctionName ( Function | Signature ) .
423
389
// FunctionName = identifier .
424
390
// Function = Signature FunctionBody .
425
391
// MethodDecl = "func" Receiver MethodName ( Function | Signature ) .
426
392
// Receiver = Parameters .
427
- func (p * parser ) funcDecl () Decl {
393
+ func (p * parser ) funcDecl () * FuncDecl {
428
394
if trace {
429
395
defer p .trace ("funcDecl" )()
430
396
}
431
397
432
- var recv * Field
398
+ f := new (FuncDecl )
399
+ f .init (p )
400
+
401
+ badRecv := false
433
402
if p .tok == _Lparen {
434
- recv = badRecv
435
- switch list := p . paramList (); len (list ) {
403
+ rcvr := p . paramList ()
404
+ switch len (rcvr ) {
436
405
case 0 :
437
406
p .error ("method has no receiver" )
407
+ badRecv = true
438
408
case 1 :
439
- recv = list [0 ]
409
+ f . Recv = rcvr [0 ]
440
410
default :
441
411
p .error ("method has multiple receivers" )
412
+ badRecv = true
442
413
}
443
414
}
444
415
@@ -448,11 +419,6 @@ func (p *parser) funcDecl() Decl {
448
419
return nil
449
420
}
450
421
451
- name := p .name ()
452
- if recv == nil && p .got (_Rarrow ) {
453
- return p .aliasDecl (Func , name , nil )
454
- }
455
-
456
422
// TODO(gri) check for regular functions only
457
423
// if name.Sym.Name == "init" {
458
424
// name = renameinit()
@@ -467,11 +433,7 @@ func (p *parser) funcDecl() Decl {
467
433
// }
468
434
// }
469
435
470
- f := new (FuncDecl )
471
- f .initFrom (& name .node ) // TODO(gri) is this the correct position for methods?
472
-
473
- f .Recv = recv
474
- f .Name = name
436
+ f .Name = p .name ()
475
437
f .Type = p .funcType ()
476
438
if gcCompat {
477
439
f .node = f .Type .node
@@ -486,7 +448,7 @@ func (p *parser) funcDecl() Decl {
486
448
// p.error("can only use //go:noescape with external func implementations")
487
449
// }
488
450
489
- if recv == badRecv {
451
+ if badRecv {
490
452
return nil // TODO(gri) better solution
491
453
}
492
454
return f
@@ -555,7 +517,7 @@ func (p *parser) unaryExpr() Expr {
555
517
return x
556
518
}
557
519
558
- case _Larrow :
520
+ case _Arrow :
559
521
// receive op (<-x) or receive-only channel (<-chan E)
560
522
p .next ()
561
523
@@ -969,7 +931,7 @@ func (p *parser) tryType() Expr {
969
931
p .next ()
970
932
return indirect (p .type_ ())
971
933
972
- case _Larrow :
934
+ case _Arrow :
973
935
// recvchantype
974
936
p .next ()
975
937
p .want (_Chan )
@@ -1015,7 +977,7 @@ func (p *parser) tryType() Expr {
1015
977
p .next ()
1016
978
t := new (ChanType )
1017
979
t .init (p )
1018
- if p .got (_Larrow ) {
980
+ if p .got (_Arrow ) {
1019
981
t .Dir = SendOnly
1020
982
}
1021
983
t .Elem = p .chanElem ()
@@ -1358,7 +1320,7 @@ func (p *parser) paramDecl() *Field {
1358
1320
case _Name :
1359
1321
f .Name = p .name ()
1360
1322
switch p .tok {
1361
- case _Name , _Star , _Larrow , _Func , _Lbrack , _Chan , _Map , _Struct , _Interface , _Lparen :
1323
+ case _Name , _Star , _Arrow , _Func , _Lbrack , _Chan , _Map , _Struct , _Interface , _Lparen :
1362
1324
// sym name_or_type
1363
1325
f .Type = p .type_ ()
1364
1326
@@ -1373,7 +1335,7 @@ func (p *parser) paramDecl() *Field {
1373
1335
f .Name = nil
1374
1336
}
1375
1337
1376
- case _Larrow , _Star , _Func , _Lbrack , _Chan , _Map , _Struct , _Interface , _Lparen :
1338
+ case _Arrow , _Star , _Func , _Lbrack , _Chan , _Map , _Struct , _Interface , _Lparen :
1377
1339
// name_or_type
1378
1340
f .Type = p .type_ ()
1379
1341
@@ -1507,7 +1469,7 @@ func (p *parser) simpleStmt(lhs Expr, rangeOk bool) SimpleStmt {
1507
1469
p .next ()
1508
1470
return p .newAssignStmt (op , lhs , ImplicitOne )
1509
1471
1510
- case _Larrow :
1472
+ case _Arrow :
1511
1473
// lhs <- rhs
1512
1474
p .next ()
1513
1475
s := new (SendStmt )
@@ -1860,7 +1822,7 @@ func (p *parser) commClause() *CommClause {
1860
1822
p .next ()
1861
1823
lhs := p .exprList ()
1862
1824
1863
- if _ , ok := lhs .(* ListExpr ); ! ok && p .tok == _Larrow {
1825
+ if _ , ok := lhs .(* ListExpr ); ! ok && p .tok == _Arrow {
1864
1826
// lhs <- x
1865
1827
} else {
1866
1828
// lhs
@@ -1940,7 +1902,7 @@ func (p *parser) stmt() Stmt {
1940
1902
1941
1903
case _Literal , _Func , _Lparen , // operands
1942
1904
_Lbrack , _Struct , _Map , _Chan , _Interface , // composite types
1943
- _Larrow : // receive operator
1905
+ _Arrow : // receive operator
1944
1906
return p .simpleStmt (nil , false )
1945
1907
1946
1908
case _For :
0 commit comments