From 5d09a0cea088a193f7e917cbc03187d5b6b7a795 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 24 Feb 2015 16:55:37 +0100 Subject: Have pkg intsead of static external references Static does not tell us whether to start the search it in empty package or in root package. --- src/dotty/tools/dotc/core/pickling/PickleFormat.scala | 12 ++++++------ src/dotty/tools/dotc/core/pickling/TastyPrinter.scala | 2 +- src/dotty/tools/dotc/core/pickling/TreePickler.scala | 4 ++-- .../tools/dotc/core/pickling/TreesUnpickler.scala | 18 ++++++++++++++---- 4 files changed, 23 insertions(+), 13 deletions(-) (limited to 'src/dotty/tools/dotc') diff --git a/src/dotty/tools/dotc/core/pickling/PickleFormat.scala b/src/dotty/tools/dotc/core/pickling/PickleFormat.scala index 9de471204..aebd53f9a 100644 --- a/src/dotty/tools/dotc/core/pickling/PickleFormat.scala +++ b/src/dotty/tools/dotc/core/pickling/PickleFormat.scala @@ -97,7 +97,7 @@ Standard-Section: "ASTs" TopLevelStat* Path = Constant TERMREFdirect sym_ASTRef TERMREFsymbol sym_ASTRef qual_Type - TERMREFstatic fullyQualified_NameRef + TERMREFpkg fullyQualified_NameRef TERMREF possiblySigned_NameRef qual_Type THIS Length clsRef_Type SKOLEMtype refinedType_ASTref @@ -122,7 +122,7 @@ Standard-Section: "ASTs" TopLevelStat* Type = Path TYPEREFdirect sym_ASTRef TYPEREFsymbol sym_ASTRef qual_Type - TYPEREFstatic fullyQualified_NameRef + TYPEREFpkg fullyQualified_NameRef TYPEREF possiblySigned_NameRef qual_Type SUPERtype Length this_Type underlying_Type REFINEDtype Length underlying_Type refinement_NameRef info_Type @@ -246,8 +246,8 @@ object PickleFormat { final val SHARED = 64 final val TERMREFdirect = 65 final val TYPEREFdirect = 66 - final val TERMREFstatic = 67 - final val TYPEREFstatic = 68 + final val TERMREFpkg = 67 + final val TYPEREFpkg = 68 final val SKOLEMtype = 69 final val BYTEconst = 70 final val SHORTconst = 71 @@ -379,8 +379,8 @@ object PickleFormat { case SHARED => "SHARED" case TERMREFdirect => "TERMREFdirect" case TYPEREFdirect => "TYPEREFdirect" - case TERMREFstatic => "TERMREFstatic" - case TYPEREFstatic => "TYPEREFstatic" + case TERMREFpkg => "TERMREFpkg" + case TYPEREFpkg => "TYPEREFpkg" case SKOLEMtype => "SKOLEMtype" case BYTEconst => "BYTEconst" case SHORTconst => "SHORTconst" diff --git a/src/dotty/tools/dotc/core/pickling/TastyPrinter.scala b/src/dotty/tools/dotc/core/pickling/TastyPrinter.scala index cf531ecac..94d57e081 100644 --- a/src/dotty/tools/dotc/core/pickling/TastyPrinter.scala +++ b/src/dotty/tools/dotc/core/pickling/TastyPrinter.scala @@ -89,7 +89,7 @@ class TastyPrinter(bytes: Array[Byte])(implicit ctx: Context) { } else if (tag >= firstNatTreeTag) tag match { - case TERMREFstatic | TYPEREFstatic | STRINGconst => printName() + case TERMREFpkg | TYPEREFpkg | STRINGconst => printName() case _ => printNat() } indent -= 2 diff --git a/src/dotty/tools/dotc/core/pickling/TreePickler.scala b/src/dotty/tools/dotc/core/pickling/TreePickler.scala index 60b7a55b0..0365c0d7f 100644 --- a/src/dotty/tools/dotc/core/pickling/TreePickler.scala +++ b/src/dotty/tools/dotc/core/pickling/TreePickler.scala @@ -133,8 +133,8 @@ class TreePickler(pickler: TastyPickler) { pickleConstant(value) case tpe: WithFixedSym => val sym = tpe.symbol - if (sym.isStatic && sym.isType || sym.is(Flags.Module)) { - writeByte(if (tpe.isType) TYPEREFstatic else TERMREFstatic) + if (sym.is(Flags.Package)) { + writeByte(if (tpe.isType) TYPEREFpkg else TERMREFpkg) pickleName(qualifiedName(sym)) } else if (tpe.prefix == NoPrefix) { diff --git a/src/dotty/tools/dotc/core/pickling/TreesUnpickler.scala b/src/dotty/tools/dotc/core/pickling/TreesUnpickler.scala index 4bc79964a..c652e1b90 100644 --- a/src/dotty/tools/dotc/core/pickling/TreesUnpickler.scala +++ b/src/dotty/tools/dotc/core/pickling/TreesUnpickler.scala @@ -179,10 +179,20 @@ class TreesUnpickler(reader: TastyReader, tastyName: TastyName.Table, case TYPEREFsymbol | TERMREFsymbol => val sym = readSymRef() NamedType.withFixedSym(readType(), sym) - case TYPEREFstatic => - ctx.requiredClass(readName().toTypeName).typeRef - case TERMREFstatic => - ctx.requiredModule(readName()).termRef + case TYPEREFpkg => + val name = readName() + val pkg = + if (name == nme.ROOT) defn.RootClass + else if (name == nme.EMPTY_PACKAGE) defn.EmptyPackageClass + else ctx.requiredPackage(name).moduleClass + pkg.typeRef + case TERMREFpkg => + val name = readName() + val pkg = + if (name == nme.ROOT) defn.RootPackage + else if (name == nme.EMPTY_PACKAGE) defn.EmptyPackageVal + else ctx.requiredPackage(name) + pkg.termRef case TYPEREF => val name = readName().toTypeName TypeRef(readType(), name) -- cgit v1.2.3