aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/PickleFormat.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-03-04 14:39:13 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 11:14:14 +0100
commita4b2a67fa5d58f7dbd34b8876e8a87e309524e22 (patch)
tree66c721ac1d151b0c3b640dffb56f647ebf727f4f /src/dotty/tools/dotc/core/pickling/PickleFormat.scala
parent96fbd7bfe252026f59d1f5e8aa33f2d8fae65769 (diff)
downloaddotty-a4b2a67fa5d58f7dbd34b8876e8a87e309524e22.tar.gz
dotty-a4b2a67fa5d58f7dbd34b8876e8a87e309524e22.tar.bz2
dotty-a4b2a67fa5d58f7dbd34b8876e8a87e309524e22.zip
Changes to Tasty format
Use fewer length fields in type encodings. - create new category of tags that take exactly one argument tree. - avoid using length where a tag fits in one of theopther categories.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/PickleFormat.scala')
-rw-r--r--src/dotty/tools/dotc/core/pickling/PickleFormat.scala105
1 files changed, 53 insertions, 52 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/PickleFormat.scala b/src/dotty/tools/dotc/core/pickling/PickleFormat.scala
index 1a79ad08e..3338c355e 100644
--- a/src/dotty/tools/dotc/core/pickling/PickleFormat.scala
+++ b/src/dotty/tools/dotc/core/pickling/PickleFormat.scala
@@ -55,7 +55,7 @@ Standard-Section: "ASTs" TopLevelStat*
Modifier*
TYPEDEF Length NameRef (Type | Template) Modifier*
IMPORT Length qual_Term Selector*
- Selector = IMPORTED Length name_NameRef
+ Selector = IMPORTED name_NameRef
RENAMED Length from_NameRef to_NameRef
// Imports are for scala.meta, they are not used in the backend
@@ -65,14 +65,14 @@ Standard-Section: "ASTs" TopLevelStat*
Template = TEMPLATE Length TypeParam* Param* Parent* Self? Stat* // Stat* always starts with the primary constructor.
Parent = Application
Type
- Self = SELFDEF Length selfName_NameRef selfType_Type
+ Self = SELFDEF selfName_NameRef selfType_Type
Term = Path
Application
IDENT NameRef Type // used when ident’s type is not a TermRef
SELECT possiblySigned_NameRef qual_Term
+ NEW cls_Type
SUPER Length this_Term mixinTrait_Type?
- NEW Length cls_Type
PAIR Length left_Term right_Term
TYPED Length expr_Term ascription_Type
NAMEDARG Length paramName_NameRef arg_Term
@@ -94,7 +94,7 @@ Standard-Section: "ASTs" TopLevelStat*
TYPEAPPLY Length fn_Term arg_Type*
CaseDef = CASEDEF Length pat_Term rhs_Tree guard_Tree?
- ImplicitArg = IMPLICITARG Length arg_Term
+ ImplicitArg = IMPLICITARG arg_Term
ASTRef = Nat // byte position in AST payload
Path = Constant
@@ -102,7 +102,7 @@ Standard-Section: "ASTs" TopLevelStat*
TERMREFsymbol sym_ASTRef qual_Type
TERMREFpkg fullyQualified_NameRef
TERMREF possiblySigned_NameRef qual_Type
- THIS Length clsRef_Type
+ THIS clsRef_Type
SKOLEMtype refinedType_ASTRef
SHARED path_ASTRef
@@ -119,8 +119,8 @@ Standard-Section: "ASTs" TopLevelStat*
DOUBLEconst LongInt
STRINGconst NameRef
NULLconst
- CLASSconst Length Type
- ENUMconst Length Path
+ CLASSconst Type
+ ENUMconst Path
Type = Path
TYPEREFdirect sym_ASTRef
@@ -147,10 +147,10 @@ Standard-Section: "ASTs" TopLevelStat*
NameType = paramName_NameRef typeOrBounds_ASTRef
Modifier = PRIVATE
- INTERNAL // package private
+ INTERNAL // package private
PROTECTED
- PRIVATEqualified Length qualifier_Type // will be dropped
- PROTECTEDqualified Length qualifier_Type // will be dropped
+ PRIVATEqualified qualifier_Type // will be dropped
+ PROTECTEDqualified qualifier_Type // will be dropped
ABSTRACT
FINAL
SEALED
@@ -158,33 +158,34 @@ Standard-Section: "ASTs" TopLevelStat*
IMPLICIT
LAZY
OVERRIDE
- INLINE // macro
- ABSOVERRIDE // abstract override
- STATIC // mapped to static Java member
- MODULE // an object or its class
- TRAIT // a trait
- LOCAL // private[this] or protected[this]
- SYNTHETIC // generated by Scala compiler
- ARTIFACT // to be tagged Java Synthetic
- MUTABLE // a var
- LABEL // method generated as a label
- FIELDaccessor // getter or setter
- CASEaccessor // getter for case class param
- COVARIANT // type param marked “+”
- CONTRAVARIANT // type param marked “-”
- SCALA2X // Imported from Scala2.x
- DEFAULTparameterized // Method with default params
- DEFAULTinit // variable with “_” initializer
- INSUPERCALL // defined in the argument of a constructor supercall
+ INLINE // macro
+ ABSOVERRIDE // abstract override
+ STATIC // mapped to static Java member
+ MODULE // an object or its class
+ TRAIT // a trait
+ LOCAL // private[this] or protected[this]
+ SYNTHETIC // generated by Scala compiler
+ ARTIFACT // to be tagged Java Synthetic
+ MUTABLE // a var
+ LABEL // method generated as a label
+ FIELDaccessor // getter or setter
+ CASEaccessor // getter for case class param
+ COVARIANT // type param marked “+”
+ CONTRAVARIANT // type param marked “-”
+ SCALA2X // Imported from Scala2.x
+ DEFAULTparameterized // Method with default params
+ DEFAULTinit // variable with “_” initializer
+ INSUPERCALL // defined in the argument of a constructor supercall
Annotation
- Annotation = ANNOTATION Length tycon_Symbol fullAnnotation_Term
+ Annotation = ANNOTATION Length tycon_Type fullAnnotation_Term
-Note: Tree tags are grouped into 4 categories that determine what follows, and thus allow to compute the size of the tagged tree in a generic way.
+Note: Tree tags are grouped into 5 categories that determine what follows, and thus allow to compute the size of the tagged tree in a generic way.
- Category 1 (tags 0-63) : tag
- Category 2 (tags 64-99) : tag Nat
- Category 3 (tags 100-127): tag Nat AST
- Category 4 (tags 128-255): tag Length <payload>
+ Category 1 (tags 0-63) : tag
+ Category 2 (tags 64-95) : tag Nat
+ Category 3 (tags 96-111) : tag AST
+ Category 4 (tags 112-127): tag Nat AST
+ Category 5 (tags 128-255): tag Length <payload>
Standard Section: "Positions" sourceLength_Nat Assoc*
@@ -271,13 +272,23 @@ object PickleFormat {
final val FLOATconst = 75
final val DOUBLEconst = 76
final val STRINGconst = 77
-
- final val IDENT = 100
- final val SELECT = 101
- final val TERMREFsymbol = 102
- final val TERMREF = 103
- final val TYPEREFsymbol = 104
- final val TYPEREF = 105
+ final val IMPORTED = 78
+
+ final val THIS = 96
+ final val CLASSconst = 97
+ final val ENUMconst = 98
+ final val NEW = 99
+ final val IMPLICITarg = 100
+ final val PRIVATEqualified = 101
+ final val PROTECTEDqualified = 102
+
+ final val IDENT = 112
+ final val SELECT = 113
+ final val TERMREFsymbol = 114
+ final val TERMREF = 115
+ final val TYPEREFsymbol = 116
+ final val TYPEREF = 117
+ final val SELFDEF = 118
final val PACKAGE = 128
final val VALDEF = 129
@@ -287,11 +298,9 @@ object PickleFormat {
final val TYPEPARAM = 133
final val PARAMS = 134
final val PARAM = 136
- final val IMPORTED = 137
final val RENAMED = 138
final val APPLY = 139
final val TYPEAPPLY = 140
- final val NEW = 141
final val PAIR = 142
final val TYPED = 143
final val NAMEDARG = 144
@@ -309,13 +318,8 @@ object PickleFormat {
final val UNAPPLY = 156
final val ANNOTATED = 157
final val CASEDEF = 158
- final val IMPLICITarg = 159
final val TEMPLATE = 160
- final val SELFDEF = 161
- final val THIS = 162
final val SUPER = 163
- final val CLASSconst = 164
- final val ENUMconst = 165
final val SUPERtype = 166
final val REFINEDtype = 167
final val APPLIEDtype = 168
@@ -327,13 +331,11 @@ object PickleFormat {
final val METHODtype = 174
final val POLYtype = 175
final val PARAMtype = 176
- final val IMPLICITARG = 177
final val ANNOTATION = 178
- final val PRIVATEqualified = 179
- final val PROTECTEDqualified = 180
final val firstSimpleTreeTag = EMPTYTREE
final val firstNatTreeTag = SHARED
+ final val firstASTTreeTag = THIS
final val firstNatASTTreeTag = IDENT
final val firstLengthTreeTag = PACKAGE
@@ -490,7 +492,6 @@ object PickleFormat {
case POLYtype => "POLYtype"
case METHODtype => "METHODtype"
case PARAMtype => "PARAMtype"
- case IMPLICITARG => "IMPLICITARG"
case ANNOTATION => "ANNOTATION"
case PRIVATEqualified => "PRIVATEqualified"
case PROTECTEDqualified => "PROTECTEDqualified"