Skip to content

Commit bc73cd1

Browse files
committed
Tasty: Have a tpt form for Apply as well as TypeApply
Needed to accurately reflect parameterized type applications. We now use APPLYtpt/TYPEAPPLYtpt instead of APPLIEDtpt.
1 parent ca30494 commit bc73cd1

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ Standard-Section: "ASTs" TopLevelStat*
104104
SELECTtpt NameRef qual_Term
105105
SINGLETONtpt ref_Term
106106
REFINEDtpt Length underlying_Term refinement_Stat*
107-
APPLIEDtpt Length tycon_Term arg_Term*
107+
APPLYtpt Length tycon_Term arg_Term*
108+
TYPEAPPLYtpt Length tycon_Term arg_Term*
108109
POLYtpt Length TypeParam* body_Term
109110
TYPEBOUNDStpt Length low_Term high_Term?
110111
ANNOTATEDtpt Length underlying_Term fullAnnotation_Term
@@ -247,7 +248,7 @@ Standard Section: "Comments" Comment*
247248
object TastyFormat {
248249

249250
final val header = Array(0x5C, 0xA1, 0xAB, 0x1F)
250-
val MajorVersion = 9
251+
val MajorVersion = 10
251252
val MinorVersion = 0
252253

253254
/** Tags used to serialize names */
@@ -409,7 +410,7 @@ object TastyFormat {
409410
final val REFINEDtype = 158
410411
final val REFINEDtpt = 159
411412
final val APPLIEDtype = 160
412-
final val APPLIEDtpt = 161
413+
final val TYPEAPPLYtpt = 161
413414
final val TYPEBOUNDS = 162
414415
final val TYPEBOUNDStpt = 163
415416
final val ANDtype = 164
@@ -423,7 +424,7 @@ object TastyFormat {
423424
final val ANNOTATION = 172
424425
final val TERMREFin = 173
425426
final val TYPEREFin = 174
426-
final val OBJECTDEF = 175
427+
final val APPLYtpt = 175
427428

428429
// In binary: 101100EI
429430
// I = implicit method type
@@ -432,6 +433,7 @@ object TastyFormat {
432433
final val IMPLICITMETHODtype = 177
433434
final val ERASEDMETHODtype = 178
434435
final val ERASEDIMPLICITMETHODtype = 179
436+
final val OBJECTDEF = 180
435437

436438
final val UNTYPEDSPLICE = 199
437439

@@ -507,15 +509,15 @@ object TastyFormat {
507509
| SELECTtpt
508510
| SINGLETONtpt
509511
| REFINEDtpt
510-
| APPLIEDtpt
512+
| APPLYtpt
513+
| TYPEAPPLYtpt
511514
| LAMBDAtpt
512515
| TYPEBOUNDStpt
513516
| ANNOTATEDtpt
514517
| ANDtpt
515518
| ORtpt
516519
| BYNAMEtpt
517-
| BIND
518-
| APPLY => true
520+
| BIND => true
519521
case _ => false
520522
}
521523

@@ -632,7 +634,8 @@ object TastyFormat {
632634
case REFINEDtype => "REFINEDtype"
633635
case REFINEDtpt => "REFINEDtpt"
634636
case APPLIEDtype => "APPLIEDtype"
635-
case APPLIEDtpt => "APPLIEDtpt"
637+
case APPLYtpt => "APPLYtpt"
638+
case TYPEAPPLYtpt => "TYPEAPPLYtpt"
636639
case TYPEBOUNDS => "TYPEBOUNDS"
637640
case TYPEBOUNDStpt => "TYPEBOUNDStpt"
638641
case TYPEALIAS => "TYPEALIAS"

compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,14 +365,14 @@ class TreePickler(pickler: TastyPickler) {
365365
writeByte(THROW)
366366
pickleTree(args.head)
367367
} else {
368-
writeByte(APPLY)
368+
writeByte(if (tree.isType) APPLYtpt else APPLY)
369369
withLength {
370370
pickleTree(fun)
371371
args.foreach(pickleTree)
372372
}
373373
}
374374
case TypeApply(fun, args) =>
375-
writeByte(TYPEAPPLY)
375+
writeByte(if (tree.isType) TYPEAPPLYtpt else TYPEAPPLY)
376376
withLength {
377377
pickleTree(fun)
378378
args.foreach(pickleTpt)
@@ -524,7 +524,7 @@ class TreePickler(pickler: TastyPickler) {
524524
withLength { pickleTree(parent); refinements.foreach(pickleTree) }
525525
}
526526
case AppliedTypeTree(tycon, args) =>
527-
writeByte(APPLIEDtpt)
527+
writeByte(TYPEAPPLYtpt)
528528
withLength { pickleTree(tycon); args.foreach(pickleTree) }
529529
case AndTypeTree(tp1, tp2) =>
530530
writeByte(ANDtpt)
@@ -819,7 +819,7 @@ class TreePickler(pickler: TastyPickler) {
819819
writeByte(REFINEDtpt)
820820
withLength { pickleTpt(parent); refinements.foreach(pickleTerm) }
821821
case AppliedTypeTree(tycon, args) =>
822-
writeByte(APPLIEDtpt)
822+
writeByte(TYPEAPPLYtpt)
823823
withLength { pickleTpt(tycon); args.foreach(pickleTpt) }
824824
case AndTypeTree(tp1, tp2) =>
825825
writeByte(ANDtpt)

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,9 @@ class TreeUnpickler(reader: TastyReader,
11231123
val parent = readTpt()
11241124
val refinements = readStats(refineCls, end)(localContext(refineCls))
11251125
RefinedTypeTree(parent, refinements, refineCls)
1126-
case APPLIEDtpt =>
1126+
case APPLYtpt =>
1127+
tpd.Apply(readTpt(), until(end)(readTerm()))
1128+
case TYPEAPPLYtpt =>
11271129
// If we do directly a tpd.AppliedType tree we might get a
11281130
// wrong number of arguments in some scenarios reading F-bounded
11291131
// types. This came up in #137 of collection strawman.
@@ -1374,7 +1376,7 @@ class TreeUnpickler(reader: TastyReader,
13741376
untpd.Import(readUntyped(), readSelectors())
13751377
case REFINEDtpt =>
13761378
untpd.RefinedTypeTree(readUntyped(), until(end)(readUntyped()))
1377-
case APPLIEDtpt =>
1379+
case TYPEAPPLYtpt =>
13781380
untpd.AppliedTypeTree(readUntyped(), until(end)(readUntyped()))
13791381
case ANDtpt =>
13801382
untpd.AndTypeTree(readUntyped(), readUntyped())

0 commit comments

Comments
 (0)