diff options
author | Martin Odersky <odersky@gmail.com> | 2015-03-04 14:39:13 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 11:14:14 +0100 |
commit | a4b2a67fa5d58f7dbd34b8876e8a87e309524e22 (patch) | |
tree | 66c721ac1d151b0c3b640dffb56f647ebf727f4f /src/dotty/tools/dotc/core/pickling/PickleFormat.scala | |
parent | 96fbd7bfe252026f59d1f5e8aa33f2d8fae65769 (diff) | |
download | dotty-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.scala | 105 |
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" |