Skip to content

Commit d4b2222

Browse files
committed
sourcepath: handle user-written package objects
Turns out we never handled this properly before.
1 parent d94b08a commit d4b2222

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,26 @@ object desugar {
804804
flatTree(cdef1 :: companions ::: implicitWrappers)
805805
}.reporting(i"desugared: $result", Printers.desugar)
806806

807+
/** Expand
808+
*
809+
* package object name { body }
810+
*
811+
* to:
812+
*
813+
* package name {
814+
* object `package` { body }
815+
* }
816+
*/
817+
def packageModuleDef(mdef: ModuleDef)(implicit ctx: Context): Tree =
818+
val impl = mdef.impl
819+
val mods = mdef.mods
820+
val moduleName = normalizeName(mdef, impl).asTermName
821+
if (mods.is(Package))
822+
PackageDef(Ident(moduleName),
823+
cpy.ModuleDef(mdef)(nme.PACKAGE, impl).withMods(mods &~ Package) :: Nil)
824+
else
825+
mdef
826+
807827
/** Expand
808828
*
809829
* object name extends parents { self => body }
@@ -854,7 +874,7 @@ object desugar {
854874
ctx.warning(em"${hl("final")} modifier is redundant for objects", flagSourcePos(Final))
855875

856876
if (mods.is(Package))
857-
PackageDef(Ident(moduleName), cpy.ModuleDef(mdef)(nme.PACKAGE, impl).withMods(mods &~ Package) :: Nil)
877+
packageModuleDef(mdef)
858878
else if (isEnumCase) {
859879
typeParamIsReferenced(enumClass.typeParams, Nil, Nil, impl.parents)
860880
// used to check there are no illegal references to enum's type parameters in parents

compiler/src/dotty/tools/dotc/core/SymbolLoaders.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ object SymbolLoaders {
139139
def simpleDesugar(tree: Tree): Tree = tree match
140140
case tree: PackageDef =>
141141
desugar.packageDef(tree)
142+
case tree: ModuleDef =>
143+
desugar.packageModuleDef(tree)
142144
case _ =>
143145
tree
144146

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package outer
2+
3+
package object nested2 {
4+
val x: Int = 1
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package outer
2+
3+
object pkg {
4+
val y: Int = nested2.x
5+
}

0 commit comments

Comments
 (0)