aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/tasty
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-14 16:47:55 +0100
committerMartin Odersky <odersky@gmail.com>2017-04-06 13:15:27 +0200
commit6545606cefaf8ec7090f8a601123bfae61b441a6 (patch)
tree8d8f261fb6c9807923ea60f4611b8c2b6e4f3ddf /compiler/src/dotty/tools/dotc/core/tasty
parent62c2a1e2d6265cf7f096e4c4e51e4e883bce1514 (diff)
downloaddotty-6545606cefaf8ec7090f8a601123bfae61b441a6.tar.gz
dotty-6545606cefaf8ec7090f8a601123bfae61b441a6.tar.bz2
dotty-6545606cefaf8ec7090f8a601123bfae61b441a6.zip
Encode variances in parameter names
This leads to a slight overall simplification, harmonizes pickle format with internal representation, and makes MethodTypes and PolyTypes more similar to each other. I believe the change is useful as it is, but in particular it is a useful step for an eventual unification of MethodTypes and PolyTypes.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/tasty')
-rw-r--r--compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala6
-rw-r--r--compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala4
-rw-r--r--compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala6
3 files changed, 4 insertions, 12 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala b/compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala
index cb1b56c3c..98577f3c5 100644
--- a/compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala
+++ b/compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala
@@ -151,7 +151,7 @@ Standard-Section: "ASTs" TopLevelStat*
BIND Length boundName_NameRef bounds_Type
// for type-variables defined in a type pattern
BYNAMEtype underlying_Type
- POLYtype Length result_Type NamesTypes // variance encoded in front of name: +/-/=
+ POLYtype Length result_Type NamesTypes // variance encoded in front of name: +/-/(nothing)
METHODtype Length result_Type NamesTypes // needed for refinements
PARAMtype Length binder_ASTref paramNum_Nat // needed for refinements
SHARED type_ASTRef
@@ -546,8 +546,4 @@ object TastyFormat {
case POLYtype | METHODtype => -1
case _ => 0
}
-
- /** Map between variances and name prefixes */
- val varianceToPrefix = Map(-1 -> '-', 0 -> '=', 1 -> '+')
- val prefixToVariance = Map('-' -> -1, '=' -> 0, '+' -> 1)
}
diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala b/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala
index 80270aa25..871f39838 100644
--- a/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala
+++ b/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala
@@ -255,9 +255,7 @@ class TreePickler(pickler: TastyPickler) {
pickleType(tpe.underlying)
case tpe: PolyType =>
writeByte(POLYtype)
- val paramNames = tpe.typeParams.map(tparam =>
- varianceToPrefix(tparam.paramVariance) +: tparam.paramName)
- pickleMethodic(tpe.resultType, paramNames, tpe.paramBounds)
+ pickleMethodic(tpe.resultType, tpe.paramNames, tpe.paramBounds)
case tpe: MethodType if richTypes =>
writeByte(METHODtype)
pickleMethodic(tpe.resultType, tpe.paramNames, tpe.paramTypes)
diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
index 88b6eef7a..6c6ebc0a3 100644
--- a/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
+++ b/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
@@ -268,10 +268,8 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table, posUnpickle
registerSym(start, sym)
TypeRef.withFixedSym(NoPrefix, sym.name, sym)
case POLYtype =>
- val (rawNames, paramReader) = readNamesSkipParams
- val (variances, paramNames) = rawNames
- .map(name => (prefixToVariance(name.head), name.tail.toTypeName)).unzip
- val result = PolyType(paramNames, variances)(
+ val (paramNames, paramReader) = readNamesSkipParams
+ val result = PolyType(paramNames.map(_.toTypeName))(
pt => registeringType(pt, paramReader.readParamTypes[TypeBounds](end)),
pt => readType())
goto(end)