@@ -263,7 +263,7 @@ func typecheck1(n *Node, top int) *Node {
263
263
// n.Sym is a field/method name, not a variable.
264
264
default :
265
265
if n .Sym != nil {
266
- if n .Op == ONAME && n .Etype != 0 && top & Ecall == 0 {
266
+ if n .Op == ONAME && n .SubOp () != 0 && top & Ecall == 0 {
267
267
yyerror ("use of builtin %v not in function call" , n .Sym )
268
268
n .Type = nil
269
269
return n
@@ -300,7 +300,7 @@ func typecheck1(n *Node, top int) *Node {
300
300
if n .Name .Decldepth == 0 {
301
301
n .Name .Decldepth = decldepth
302
302
}
303
- if n .Etype != 0 {
303
+ if n .SubOp () != 0 {
304
304
ok |= Ecall
305
305
break
306
306
}
@@ -428,11 +428,11 @@ func typecheck1(n *Node, top int) *Node {
428
428
if l .Type .NotInHeap () {
429
429
yyerror ("chan of go:notinheap type not allowed" )
430
430
}
431
- t := types .NewChan (l .Type , types . ChanDir ( n . Etype )) // TODO(marvin): Fix Node.EType type union.
431
+ t := types .NewChan (l .Type , n . TChanDir ())
432
432
n .Op = OTYPE
433
433
n .Type = t
434
434
n .Left = nil
435
- n .Etype = 0
435
+ n .ResetAux ()
436
436
437
437
case OTSTRUCT :
438
438
ok |= Etype
@@ -540,7 +540,7 @@ func typecheck1(n *Node, top int) *Node {
540
540
return n
541
541
}
542
542
// TODO(marvin): Fix Node.EType type union.
543
- op = Op ( n . Etype )
543
+ op = n . SubOp ( )
544
544
} else {
545
545
ok |= Erv
546
546
n .Left = typecheck (n .Left , Erv )
@@ -712,9 +712,9 @@ func typecheck1(n *Node, top int) *Node {
712
712
713
713
if et == TSTRING {
714
714
if iscmp [n .Op ] {
715
- // TODO(marvin): Fix Node.EType type union.
716
- n .Etype = types .EType (n .Op )
715
+ ot := n .Op
717
716
n .Op = OCMPSTR
717
+ n .SetSubOp (ot )
718
718
} else if n .Op == OADD {
719
719
// create OADDSTR node with list of strings in x + y + z + (w + v) + ...
720
720
n .Op = OADDSTR
@@ -743,9 +743,9 @@ func typecheck1(n *Node, top int) *Node {
743
743
} else if r .Op == OLITERAL && r .Val ().Ctype () == CTNIL {
744
744
} else // leave alone for back end
745
745
if r .Type .IsInterface () == l .Type .IsInterface () {
746
- // TODO(marvin): Fix Node.EType type union.
747
- n .Etype = types .EType (n .Op )
746
+ ot := n .Op
748
747
n .Op = OCMPIFACE
748
+ n .SetSubOp (ot )
749
749
}
750
750
}
751
751
@@ -1026,13 +1026,13 @@ func typecheck1(n *Node, top int) *Node {
1026
1026
}
1027
1027
1028
1028
case TMAP :
1029
- n .Etype = 0
1030
1029
n .Right = defaultlit (n .Right , t .Key ())
1031
1030
if n .Right .Type != nil {
1032
1031
n .Right = assignconv (n .Right , t .Key (), "map index" )
1033
1032
}
1034
1033
n .Type = t .Val ()
1035
1034
n .Op = OINDEXMAP
1035
+ n .ResetAux ()
1036
1036
}
1037
1037
1038
1038
case ORECV :
@@ -1088,10 +1088,6 @@ func typecheck1(n *Node, top int) *Node {
1088
1088
return n
1089
1089
}
1090
1090
n .Right = assignconv (r , t .Elem (), "send" )
1091
-
1092
- // TODO: more aggressive
1093
- n .Etype = 0
1094
-
1095
1091
n .Type = nil
1096
1092
1097
1093
case OSLICE , OSLICE3 :
@@ -1177,15 +1173,13 @@ func typecheck1(n *Node, top int) *Node {
1177
1173
1178
1174
l := n .Left
1179
1175
1180
- if l .Op == ONAME && l .Etype != 0 {
1181
- // TODO(marvin): Fix Node.EType type union.
1182
- if n .Isddd () && Op (l .Etype ) != OAPPEND {
1176
+ if l .Op == ONAME && l .SubOp () != 0 {
1177
+ if n .Isddd () && l .SubOp () != OAPPEND {
1183
1178
yyerror ("invalid use of ... with builtin %v" , l )
1184
1179
}
1185
1180
1186
1181
// builtin: OLEN, OCAP, etc.
1187
- // TODO(marvin): Fix Node.EType type union.
1188
- n .Op = Op (l .Etype )
1182
+ n .Op = l .SubOp ()
1189
1183
n .Left = n .Right
1190
1184
n .Right = nil
1191
1185
n = typecheck1 (n , top )
@@ -3214,7 +3208,7 @@ func checkassign(stmt *Node, n *Node) {
3214
3208
return
3215
3209
}
3216
3210
if n .Op == OINDEXMAP {
3217
- n .Etype = 1
3211
+ n .SetIndexMapLValue ( true )
3218
3212
return
3219
3213
}
3220
3214
@@ -3705,7 +3699,7 @@ func typecheckdef(n *Node) {
3705
3699
break
3706
3700
}
3707
3701
if n .Name .Defn == nil {
3708
- if n .Etype != 0 { // like OPRINTN
3702
+ if n .SubOp () != 0 { // like OPRINTN
3709
3703
break
3710
3704
}
3711
3705
if nsavederrors + nerrors > 0 {
0 commit comments