Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow toplevel definitions #5754

Merged
merged 48 commits into from
Feb 4, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
e17ded1
Use `given` for implicit parameters and arguments
odersky Jan 30, 2019
8201ae1
Disallow empty implicit parameter sections
odersky Jan 30, 2019
5dd0a11
Avoid spurious error spans
odersky Jan 30, 2019
2baba5b
Change syntax of implicit function types and closures
odersky Jan 30, 2019
f324ea5
Fix new tests after merge
odersky Jan 30, 2019
319d874
Fix new tests after changes
odersky Jan 30, 2019
1c90ec2
Syntax change: `inferred for` instead of `instance of`
odersky Jan 30, 2019
af796f7
Reorganize docs to consolidate all implicit changes
odersky Jan 30, 2019
1e47e5c
Rename "implicit function type" to "query type"
odersky Jan 31, 2019
e792c88
Cleanups
odersky Jan 31, 2019
3bc0547
Renaming "instance of" -> "implied for"
odersky Jan 31, 2019
e2f1299
Tweaks to wordings in docs
odersky Jan 31, 2019
53f00ae
Implied Conversion -> Implicit Conversion
odersky Feb 1, 2019
a1ffafc
Rename internals to new terminologu
odersky Feb 1, 2019
c04e041
Allow toplevel definitions in syntax and parsing
odersky Dec 5, 2018
031532d
Desugar toplevel definitions
odersky Jan 19, 2019
61564ba
Treat toplevel objects as package objects
odersky Jan 20, 2019
359b80f
Make toplevel wrappers unexpressible as normal objects
odersky Jan 20, 2019
5b90688
Docs
odersky Jan 20, 2019
b069f8d
Change scheme to name package object wrappers
odersky Jan 21, 2019
ab0ea23
Allow toplevel implicits
odersky Jan 23, 2019
a105398
Disallow toplevel statements other than definitions
odersky Jan 23, 2019
97f06e0
Refine condition for printing package objects
odersky Jan 23, 2019
160fe40
Detect and report double definitions between toplevel files
odersky Jan 23, 2019
0aab6e4
Test source compiled twice
odersky Jan 23, 2019
e3a24d3
Fix package object printing
odersky Jan 23, 2019
e9dd68e
Add test for ambiguous overloads
odersky Jan 24, 2019
a4950d0
Add illegal cyclic reference test
odersky Jan 24, 2019
be77747
Add legal cyclic reference test
odersky Jan 24, 2019
560d608
Fix illegal cyclic reference test
odersky Jan 24, 2019
f9aff3e
Allow toplevel opaque types
odersky Jan 24, 2019
280744e
Update docs
odersky Jan 24, 2019
444cffa
Be more careful where we fill in missing companion objects
odersky Jan 24, 2019
e946936
Generalize member computation for package members
odersky Jan 24, 2019
67bcab2
Try various combinations of toplevel definitions
odersky Jan 24, 2019
1cb7cb1
More implicit and overloading tests
odersky Jan 24, 2019
205972c
Update docs
odersky Jan 24, 2019
44877bd
Add spec and test for private toplevel definitions
odersky Jan 24, 2019
8278568
Make toplevel privates package private
odersky Jan 24, 2019
572471f
Change scheme to widen toplevel private
odersky Jan 24, 2019
a789cdd
Skip package objects in Typer#findRef
odersky Jan 25, 2019
e81f52d
Revert #3735: Allow accesses to private package members from nested
odersky Jan 25, 2019
7b018de
Fix test check file
odersky Jan 25, 2019
4ce52d0
Tweak to prefix printing
odersky Jan 25, 2019
d874964
Try with a final modifier
odersky Jan 25, 2019
ed5304e
Address review comments
odersky Feb 2, 2019
db36559
Avoid illegal characters in package objects
odersky Feb 2, 2019
537f80d
Add separate compilation test case for #3339
odersky Feb 2, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1013,11 +1013,20 @@ class TreeUnpickler(reader: TastyReader,
}
}

def completeSelect(name: Name, tpf: Type => NamedType): Select = {
def completeSelect(name: Name, sig: Signature): Select = {
val localCtx =
if (name == nme.CONSTRUCTOR) ctx.addMode(Mode.InSuperCall) else ctx
val qual = readTerm()(localCtx)
ConstFold(untpd.Select(qual, name).withType(tpf(qual.tpe.widenIfUnstable)))
var pre = qual.tpe.widenIfUnstable
val denot = accessibleDenot(pre, name, sig)
val owner = denot.symbol.maybeOwner
if (owner.isPackageObject && pre.termSymbol.is(Package))
pre = pre.select(owner.sourceModule)
odersky marked this conversation as resolved.
Show resolved Hide resolved
val tpe = name match {
case name: TypeName => TypeRef(pre, name, denot)
case name: TermName => TermRef(pre, name, denot)
}
ConstFold(untpd.Select(qual, name).withType(tpe))
}

def readQualId(): (untpd.Ident, TypeRef) = {
Expand All @@ -1039,15 +1048,13 @@ class TreeUnpickler(reader: TastyReader,
case IDENTtpt =>
untpd.Ident(readName().toTypeName).withType(readType())
case SELECT =>
def readRest(name: TermName, sig: Signature): Tree =
completeSelect(name, pre => TermRef(pre, name, accessibleDenot(pre, name, sig)))
readName() match {
case SignedName(name, sig) => readRest(name, sig)
case name => readRest(name, Signature.NotAMethod)
case SignedName(name, sig) => completeSelect(name, sig)
case name => completeSelect(name, Signature.NotAMethod)
}
case SELECTtpt =>
val name = readName().toTypeName
completeSelect(name, pre => TypeRef(pre, name, accessibleDenot(pre, name, Signature.NotAMethod)))
completeSelect(name, Signature.NotAMethod)
case QUALTHIS =>
val (qual, tref) = readQualId()
untpd.This(qual).withType(ThisType.raw(tref))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
if (isOmittable(tp.cls)) return ""
case tp @ TermRef(pre, _) =>
val sym = tp.symbol
if (sym.isPackageObject) return toTextPrefix(pre)
if (sym.isPackageObject && !homogenizedView) return toTextPrefix(pre)
if (isOmittable(sym)) return ""
case _ =>
}
Expand Down
3 changes: 3 additions & 0 deletions tests/pos/pickleAlias.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
object Test {
throw new scala.Error()
}