Skip to content

Commit 5b1d7f2

Browse files
committed
Merge branch 'idempotency-on-boot' of https://github.com/dotty-staging/dotty into idempotency-on-boot
2 parents 711e6f7 + b1487a2 commit 5b1d7f2

File tree

14 files changed

+92
-21
lines changed

14 files changed

+92
-21
lines changed

.drone.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# After updating this file, you need to re-sign it:
22
#
33
# - Install [drone-cli](http://readme.drone.io/usage/getting-started-cli/)
4-
# - Copy your token from http://dotty-ci.epfl.ch/account (Click SHOW TOKEN)
5-
# - (export DRONE_TOKEN=your-token; export DRONE_SERVER=http://dotty-ci.epfl.ch; drone sign lampepfl/dotty)
4+
# - Copy your token from http://dotty-ci.epfl.ch/account (Click SHOW TOKEN)
5+
# - DRONE_TOKEN=your-token DRONE_SERVER=http://dotty-ci.epfl.ch drone sign lampepfl/dotty
66
#
77
# Please note that the signing can only be done by collaborators.
88

@@ -76,3 +76,5 @@ matrix:
7676
CI_PUBLISH: false
7777
- CI_TEST: dotty-bootstrapped/test
7878
CI_PUBLISH: false
79+
- CI_TEST: ;set bootstrapOptimised in ThisBuild := true ;dotty-bootstrapped/test
80+
CI_PUBLISH: false

.drone.yml.sig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eyJhbGciOiJIUzI1NiJ9.IyBBZnRlciB1cGRhdGluZyB0aGlzIGZpbGUsIHlvdSBuZWVkIHRvIHJlLXNpZ24gaXQ6CiMKIyAtIEluc3RhbGwgW2Ryb25lLWNsaV0oaHR0cDovL3JlYWRtZS5kcm9uZS5pby91c2FnZS9nZXR0aW5nLXN0YXJ0ZWQtY2xpLykKIyAtIENvcHkgeW91ciB0b2tlbiBmcm9tICBodHRwOi8vZG90dHktY2kuZXBmbC5jaC9hY2NvdW50IChDbGljayBTSE9XIFRPS0VOKQojIC0gKGV4cG9ydCBEUk9ORV9UT0tFTj15b3VyLXRva2VuOyBleHBvcnQgRFJPTkVfU0VSVkVSPWh0dHA6Ly9kb3R0eS1jaS5lcGZsLmNoOyBkcm9uZSBzaWduIGxhbXBlcGZsL2RvdHR5KQojCiMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgc2lnbmluZyBjYW4gb25seSBiZSBkb25lIGJ5IGNvbGxhYm9yYXRvcnMuCgpwaXBlbGluZToKICB0ZXN0OgogICAgaW1hZ2U6IGxhbXBlcGZsL2RvdHR5OjA3LTA2LTIwMTcKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIC4vcHJvamVjdC9zY3JpcHRzL3NidCAiJHtDSV9URVNUfSIKICAgIHdoZW46CiAgICAgIGJyYW5jaDoKICAgICAgICBleGNsdWRlOiBnaC1wYWdlcwoKICBwdWJsaXNoX25pZ2h0bHk6CiAgICBpbWFnZTogbGFtcGVwZmwvZG90dHk6MDctMDYtMjAxNwogICAgcHVsbDogdHJ1ZQogICAgY29tbWFuZHM6CiAgICAgIC0gLi9wcm9qZWN0L3NjcmlwdHMvc2J0ICI7Y2xlYW4gO3B1Ymxpc2hMb2NhbCIgIiR7Q0lfUFVCTElTSH0iCiAgICAgIC0gLi9wcm9qZWN0L3NjcmlwdHMvc2J0ICJzYnQtZG90dHkvc2NyaXB0ZWQgc291cmNlLWRlcGVuZGVuY2llcy8qIiAiJHtDSV9QVUJMSVNIfSIKICAgICAgLSBOSUdIVExZQlVJTEQ9InllcyIgLi9wcm9qZWN0L3NjcmlwdHMvc2J0UHVibGlzaCAke0NJX1BVQkxJU0h9ICRTT05BVFlQRV9VU0VSICRTT05BVFlQRV9QVyAkUEdQX1BXICI7ZG90dHktYm9vdHN0cmFwcGVkL3B1Ymxpc2hTaWduZWQgO3NvbmF0eXBlUmVsZWFzZSIKICAgIHZvbHVtZXM6CiAgICAgIC0gL2hvbWUvZHJvbmUva2V5czova2V5cwogICAgd2hlbjoKICAgICAgZXZlbnQ6IGRlcGxveW1lbnQKICAgICAgZW52aXJvbm1lbnQ6IG5pZ2h0bHkKCiAgcHVibGlzaF9yZWxlYXNlOgogICAgaW1hZ2U6IGxhbXBlcGZsL2RvdHR5OjA3LTA2LTIwMTcKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIFJFTEVBU0VCVUlMRD0ieWVzIiAuL3Byb2plY3Qvc2NyaXB0cy9zYnRQdWJsaXNoICR7Q0lfUFVCTElTSH0gJFNPTkFUWVBFX1VTRVIgJFNPTkFUWVBFX1BXICRQR1BfUFcgIjtkb3R0eS1ib290c3RyYXBwZWQvcHVibGlzaFNpZ25lZCA7c29uYXR5cGVSZWxlYXNlIgogICAgdm9sdW1lczoKICAgICAgLSAvaG9tZS9kcm9uZS9rZXlzOi9rZXlzCiAgICB3aGVuOgogICAgICBldmVudDogZGVwbG95bWVudAogICAgICBlbnZpcm9ubWVudDogcmVsZWFzZQoKICBwdWJsaXNoX3NidF9yZWxlYXNlOgogICAgaW1hZ2U6IGxhbXBlcGZsL2RvdHR5OjA3LTA2LTIwMTcKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIFJFTEVBU0VCVUlMRD0ieWVzIiAuL3Byb2plY3Qvc2NyaXB0cy9zYnRQdWJsaXNoICR7Q0lfUFVCTElTSH0gJFNPTkFUWVBFX1VTRVIgJFNPTkFUWVBFX1BXICRQR1BfUFcgIjtzYnQtZG90dHkvcHVibGlzaFNpZ25lZCA7c29uYXR5cGVSZWxlYXNlIgogICAgdm9sdW1lczoKICAgICAgLSAvaG9tZS9kcm9uZS9rZXlzOi9rZXlzCiAgICB3aGVuOgogICAgICBldmVudDogZGVwbG95bWVudAogICAgICBlbnZpcm9ubWVudDogc2J0X3JlbGVhc2UKCiAgZG9jdW1lbnRhdGlvbjoKICAgIGltYWdlOiBsYW1wZXBmbC9kb3R0eTowNy0wNi0yMDE3CiAgICBwdWxsOiB0cnVlCiAgICBjb21tYW5kczoKICAgICAgLSAuL3Byb2plY3Qvc2NyaXB0cy9nZW5Eb2NzICIke0NJX1BVQkxJU0h9IiAkQk9UX1BBU1MKICAgIHdoZW46CiAgICAgIGJyYW5jaDogbWFzdGVyCgogIHNsYWNrOgogICAgaW1hZ2U6IHBsdWdpbnMvc2xhY2sKICAgIGNoYW5uZWw6IGRvdHR5CiAgICB3aGVuOgogICAgICBicmFuY2g6IG1hc3RlcgogICAgICBzdGF0dXM6IGNoYW5nZWQKCm1hdHJpeDoKICBpbmNsdWRlOgogICAgLSBDSV9URVNUOiBkb3R0eS1iaW4tdGVzdHMvdGVzdAogICAgICBDSV9QVUJMSVNIOiB0cnVlCiAgICAtIENJX1RFU1Q6IGxlZ2FjeVRlc3RzCiAgICAgIENJX1BVQkxJU0g6IGZhbHNlCiAgICAtIENJX1RFU1Q6IDt0ZXN0O3NidC1kb3R0eS9zY3JpcHRlZCBjb21waWxlclJlcG9ydGVyLyo7c2J0LWRvdHR5L3NjcmlwdGVkIGRpc2NvdmVyeS8qO3NidC1kb3R0eS9zY3JpcHRlZCBzYnQtZG90dHkvKgogICAgICBDSV9QVUJMSVNIOiBmYWxzZQogICAgLSBDSV9URVNUOiBkb3R0eS1ib290c3RyYXBwZWQvdGVzdAogICAgICBDSV9QVUJMSVNIOiBmYWxzZQo.REtW8iikLellOXP5ex7tY4WJFc4aIFHXTFsbPi0qkiA
1+
eyJhbGciOiJIUzI1NiJ9.IyBBZnRlciB1cGRhdGluZyB0aGlzIGZpbGUsIHlvdSBuZWVkIHRvIHJlLXNpZ24gaXQ6CiMKIyAtIEluc3RhbGwgW2Ryb25lLWNsaV0oaHR0cDovL3JlYWRtZS5kcm9uZS5pby91c2FnZS9nZXR0aW5nLXN0YXJ0ZWQtY2xpLykKIyAtIENvcHkgeW91ciB0b2tlbiBmcm9tIGh0dHA6Ly9kb3R0eS1jaS5lcGZsLmNoL2FjY291bnQgKENsaWNrIFNIT1cgVE9LRU4pCiMgLSBEUk9ORV9UT0tFTj15b3VyLXRva2VuIERST05FX1NFUlZFUj1odHRwOi8vZG90dHktY2kuZXBmbC5jaCBkcm9uZSBzaWduIGxhbXBlcGZsL2RvdHR5CiMKIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBzaWduaW5nIGNhbiBvbmx5IGJlIGRvbmUgYnkgY29sbGFib3JhdG9ycy4KCnBpcGVsaW5lOgogIHRlc3Q6CiAgICBpbWFnZTogbGFtcGVwZmwvZG90dHk6MDctMDYtMjAxNwogICAgcHVsbDogdHJ1ZQogICAgY29tbWFuZHM6CiAgICAgIC0gLi9wcm9qZWN0L3NjcmlwdHMvc2J0ICIke0NJX1RFU1R9IgogICAgd2hlbjoKICAgICAgYnJhbmNoOgogICAgICAgIGV4Y2x1ZGU6IGdoLXBhZ2VzCgogIHB1Ymxpc2hfbmlnaHRseToKICAgIGltYWdlOiBsYW1wZXBmbC9kb3R0eTowNy0wNi0yMDE3CiAgICBwdWxsOiB0cnVlCiAgICBjb21tYW5kczoKICAgICAgLSAuL3Byb2plY3Qvc2NyaXB0cy9zYnQgIjtjbGVhbiA7cHVibGlzaExvY2FsIiAiJHtDSV9QVUJMSVNIfSIKICAgICAgLSAuL3Byb2plY3Qvc2NyaXB0cy9zYnQgInNidC1kb3R0eS9zY3JpcHRlZCBzb3VyY2UtZGVwZW5kZW5jaWVzLyoiICIke0NJX1BVQkxJU0h9IgogICAgICAtIE5JR0hUTFlCVUlMRD0ieWVzIiAuL3Byb2plY3Qvc2NyaXB0cy9zYnRQdWJsaXNoICR7Q0lfUFVCTElTSH0gJFNPTkFUWVBFX1VTRVIgJFNPTkFUWVBFX1BXICRQR1BfUFcgIjtkb3R0eS1ib290c3RyYXBwZWQvcHVibGlzaFNpZ25lZCA7c29uYXR5cGVSZWxlYXNlIgogICAgdm9sdW1lczoKICAgICAgLSAvaG9tZS9kcm9uZS9rZXlzOi9rZXlzCiAgICB3aGVuOgogICAgICBldmVudDogZGVwbG95bWVudAogICAgICBlbnZpcm9ubWVudDogbmlnaHRseQoKICBwdWJsaXNoX3JlbGVhc2U6CiAgICBpbWFnZTogbGFtcGVwZmwvZG90dHk6MDctMDYtMjAxNwogICAgcHVsbDogdHJ1ZQogICAgY29tbWFuZHM6CiAgICAgIC0gUkVMRUFTRUJVSUxEPSJ5ZXMiIC4vcHJvamVjdC9zY3JpcHRzL3NidFB1Ymxpc2ggJHtDSV9QVUJMSVNIfSAkU09OQVRZUEVfVVNFUiAkU09OQVRZUEVfUFcgJFBHUF9QVyAiO2RvdHR5LWJvb3RzdHJhcHBlZC9wdWJsaXNoU2lnbmVkIDtzb25hdHlwZVJlbGVhc2UiCiAgICB2b2x1bWVzOgogICAgICAtIC9ob21lL2Ryb25lL2tleXM6L2tleXMKICAgIHdoZW46CiAgICAgIGV2ZW50OiBkZXBsb3ltZW50CiAgICAgIGVudmlyb25tZW50OiByZWxlYXNlCgogIHB1Ymxpc2hfc2J0X3JlbGVhc2U6CiAgICBpbWFnZTogbGFtcGVwZmwvZG90dHk6MDctMDYtMjAxNwogICAgcHVsbDogdHJ1ZQogICAgY29tbWFuZHM6CiAgICAgIC0gUkVMRUFTRUJVSUxEPSJ5ZXMiIC4vcHJvamVjdC9zY3JpcHRzL3NidFB1Ymxpc2ggJHtDSV9QVUJMSVNIfSAkU09OQVRZUEVfVVNFUiAkU09OQVRZUEVfUFcgJFBHUF9QVyAiO3NidC1kb3R0eS9wdWJsaXNoU2lnbmVkIDtzb25hdHlwZVJlbGVhc2UiCiAgICB2b2x1bWVzOgogICAgICAtIC9ob21lL2Ryb25lL2tleXM6L2tleXMKICAgIHdoZW46CiAgICAgIGV2ZW50OiBkZXBsb3ltZW50CiAgICAgIGVudmlyb25tZW50OiBzYnRfcmVsZWFzZQoKICBkb2N1bWVudGF0aW9uOgogICAgaW1hZ2U6IGxhbXBlcGZsL2RvdHR5OjA3LTA2LTIwMTcKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIC4vcHJvamVjdC9zY3JpcHRzL2dlbkRvY3MgIiR7Q0lfUFVCTElTSH0iICRCT1RfUEFTUwogICAgd2hlbjoKICAgICAgYnJhbmNoOiBtYXN0ZXIKCiAgc2xhY2s6CiAgICBpbWFnZTogcGx1Z2lucy9zbGFjawogICAgY2hhbm5lbDogZG90dHkKICAgIHdoZW46CiAgICAgIGJyYW5jaDogbWFzdGVyCiAgICAgIHN0YXR1czogY2hhbmdlZAoKbWF0cml4OgogIGluY2x1ZGU6CiAgICAtIENJX1RFU1Q6IGRvdHR5LWJpbi10ZXN0cy90ZXN0CiAgICAgIENJX1BVQkxJU0g6IHRydWUKICAgIC0gQ0lfVEVTVDogbGVnYWN5VGVzdHMKICAgICAgQ0lfUFVCTElTSDogZmFsc2UKICAgIC0gQ0lfVEVTVDogO3Rlc3Q7c2J0LWRvdHR5L3NjcmlwdGVkIGNvbXBpbGVyUmVwb3J0ZXIvKjtzYnQtZG90dHkvc2NyaXB0ZWQgZGlzY292ZXJ5Lyo7c2J0LWRvdHR5L3NjcmlwdGVkIHNidC1kb3R0eS8qCiAgICAgIENJX1BVQkxJU0g6IGZhbHNlCiAgICAtIENJX1RFU1Q6IGRvdHR5LWJvb3RzdHJhcHBlZC90ZXN0CiAgICAgIENJX1BVQkxJU0g6IGZhbHNlCiAgICAtIENJX1RFU1Q6IDtzZXQgYm9vdHN0cmFwT3B0aW1pc2VkIGluIFRoaXNCdWlsZCA6PSB0cnVlIDtkb3R0eS1ib290c3RyYXBwZWQvdGVzdAogICAgICBDSV9QVUJMSVNIOiBmYWxzZQo.0COKo7FjFKxUxTYAwxWvpOHgRClgdi9A4M4Kb91h6HQ

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ Try it out
1414
==========
1515
To try it in your project see also the [Getting Started User Guide](http://dotty.epfl.ch/#getting-started).
1616

17+
Code of Conduct
18+
===============
19+
Dotty uses the [Scala Code of Conduct](https://www.scala-lang.org/conduct.html)
20+
for all communication and discussion. This includes both GitHub, Gitter chat and
21+
other more direct lines of communication such as email.
22+
1723
How to Contribute
1824
=================
1925
* [Getting Started as Contributor](http://dotty.epfl.ch/docs/contributing/getting-started.html)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,9 +556,10 @@ object Symbols {
556556
type ThisName = TypeName
557557

558558
/** If this is a top-level class, and if `-Yretain-trees` is set, return the TypeDef tree
559-
* for this class, otherwise EmptyTree.
559+
* for this class, otherwise EmptyTree. This will force the info of the class.
560560
*/
561561
def tree(implicit ctx: Context): tpd.Tree /* tpd.TypeDef | tpd.EmptyTree */ = {
562+
denot.info
562563
// TODO: Consider storing this tree like we store lazy trees for inline functions
563564
if (unpickler != null && !denot.isAbsent) {
564565
assert(myTree.isEmpty)

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ object Types {
125125
def isRef(sym: Symbol)(implicit ctx: Context): Boolean = stripAnnots.stripTypeVar match {
126126
case this1: TypeRef =>
127127
this1.info match { // see comment in Namer#typeDefSig
128-
case TypeAlias(tp) => tp.isRef(sym)
128+
case TypeAlias(tp) =>
129+
assert((tp ne this) && (tp ne this1), s"$tp / $this")
130+
tp.isRef(sym)
129131
case _ => this1.symbol eq sym
130132
}
131133
case this1: RefinedOrRecType => this1.parent.isRef(sym)

compiler/src/dotty/tools/dotc/interactive/InteractiveDriver.scala

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,13 @@ class InteractiveDriver(settings: List[String]) extends Driver {
4444

4545
def currentCtx: Context = myCtx
4646

47-
private val myOpenedFiles = new mutable.LinkedHashMap[URI, SourceFile]
48-
private val myOpenedTrees = new mutable.LinkedHashMap[URI, List[SourceTree]]
47+
private val myOpenedFiles = new mutable.LinkedHashMap[URI, SourceFile] {
48+
override def default(key: URI) = NoSource
49+
}
50+
51+
private val myOpenedTrees = new mutable.LinkedHashMap[URI, List[SourceTree]] {
52+
override def default(key: URI) = Nil
53+
}
4954

5055
def openedFiles: Map[URI, SourceFile] = myOpenedFiles
5156
def openedTrees: Map[URI, List[SourceTree]] = myOpenedTrees
@@ -69,6 +74,10 @@ class InteractiveDriver(settings: List[String]) extends Driver {
6974
}
7075
}
7176

77+
// Presence of a file with one of these suffixes indicates that the
78+
// corresponding class has been pickled with TASTY.
79+
private val tastySuffixes = List(".hasTasty", ".tasty")
80+
7281
private def classNames(cp: ClassPath, packageName: String): List[String] = {
7382
def className(classSegments: List[String]) =
7483
classSegments.mkString(".").stripSuffix(".class")
@@ -85,9 +94,6 @@ class InteractiveDriver(settings: List[String]) extends Driver {
8594
binFile.name.stripSuffix(".class")
8695
else
8796
null
88-
// Presence of a file with one of these suffixes indicates that the
89-
// corresponding class has been pickled with TASTY.
90-
val tastySuffixes = List(".hasTasty", ".tasty")
9197
prefix != null && {
9298
binFile match {
9399
case pf: PlainFile =>
@@ -123,8 +129,12 @@ class InteractiveDriver(settings: List[String]) extends Driver {
123129
.stream
124130
.toArray(new IntFunction[Array[ZipEntry]] { def apply(size: Int) = new Array(size) })
125131
.toSeq
126-
entries.filter(_.getName.endsWith(".tasty"))
127-
.map(_.getName.replace("/", ".").stripSuffix(".tasty"))
132+
for {
133+
entry <- entries
134+
name = entry.getName
135+
tastySuffix <- tastySuffixes
136+
if name.endsWith(tastySuffix)
137+
} yield name.replace("/", ".").stripSuffix(tastySuffix)
128138
}
129139

130140
// FIXME: classfiles in directories may change at any point, so we retraverse
@@ -136,8 +146,14 @@ class InteractiveDriver(settings: List[String]) extends Driver {
136146
val root = dirCp.dir.toPath
137147
Files.walkFileTree(root, new SimpleFileVisitor[Path] {
138148
override def visitFile(path: Path, attrs: BasicFileAttributes) = {
139-
if (!attrs.isDirectory && path.getFileName.toString.endsWith(".tasty")) {
140-
names += root.relativize(path).toString.replace("/", ".").stripSuffix(".tasty")
149+
if (!attrs.isDirectory) {
150+
val name = path.getFileName.toString
151+
for {
152+
tastySuffix <- tastySuffixes
153+
if name.endsWith(tastySuffix)
154+
} {
155+
names += root.relativize(path).toString.replace("/", ".").stripSuffix(tastySuffix)
156+
}
141157
}
142158
FileVisitResult.CONTINUE
143159
}

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1681,7 +1681,7 @@ object Parsers {
16811681

16821682
def addFlag(mods: Modifiers, flag: FlagSet): Modifiers = {
16831683
def incompatible(kind: String) = {
1684-
syntaxError(s"modifier(s) `${mods.flags}' not allowed for $kind")
1684+
syntaxError(ModifiersNotAllowed(mods.flags, kind))
16851685
Modifiers(flag)
16861686
}
16871687
if (compatible(mods.flags, flag)) mods | flag

compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ public enum ErrorMessageID {
8989
OnlyCaseClassOrCaseObjectAllowedID,
9090
ExpectedClassOrObjectDefID,
9191
AnonymousFunctionMissingParamTypeID,
92-
SuperCallsNotAllowedInlineID
92+
SuperCallsNotAllowedInlineID,
93+
ModifiersNotAllowedID,
9394
;
9495

9596
public int errorNumber() {

compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import printing.Formatting
2020
import ErrorMessageID._
2121
import Denotations.SingleDenotation
2222
import dotty.tools.dotc.ast.Trees
23+
import dotty.tools.dotc.ast.untpd.Modifiers
2324
import dotty.tools.dotc.core.Flags.{FlagSet, Mutable}
2425
import dotty.tools.dotc.core.SymDenotations.SymDenotation
2526

@@ -1614,4 +1615,20 @@ object messages {
16141615
val msg = s"super call not allowed in inline $symbol"
16151616
val explanation = "Method inlining prohibits calling superclass methods, as it may lead to confusion about which super is being called."
16161617
}
1618+
1619+
case class ModifiersNotAllowed(flags: FlagSet, sort: String)(implicit ctx: Context)
1620+
extends Message(ModifiersNotAllowedID) {
1621+
val kind = "Syntax"
1622+
val msg = s"modifier(s) `$flags' not allowed for $sort"
1623+
val explanation = {
1624+
val code = "sealed def y: Int = 1"
1625+
hl"""You tried to use a modifier that is inapplicable for the type of item under modification
1626+
|
1627+
|
1628+
|Consider the following example:
1629+
|$code
1630+
|In this instance, the modifier 'sealed' is not applicable to the item type 'def' (method)
1631+
"""
1632+
}
1633+
}
16171634
}

compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,4 +839,14 @@ class ErrorMessagesTests extends ErrorMessagesTest {
839839
val SuperCallsNotAllowedInline(symbol) = err
840840
assertEquals("method bar", symbol.show)
841841
}
842+
843+
@Test def modifiersNotAllowed =
844+
checkMessagesAfter("refchecks")("""lazy trait T""")
845+
.expect { (ictx, messages) =>
846+
implicit val ctx: Context = ictx
847+
assertMessageCount(1, messages)
848+
val ModifiersNotAllowed(flags, sort) :: Nil = messages
849+
assertEquals("lazy", flags.toString)
850+
assertEquals("trait", sort)
851+
}
842852
}

doc-tool/resources/css/dottydoc.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ h1#doc-page-title {
172172
margin: 10px 0 40px 10px;
173173
font-family: "Source Sans Pro", sans-serif;
174174
font-weight: 400;
175+
display: -webkit-flex;
176+
display: flex;
177+
width: 550px;
175178
}
176179

177180
div#post-title > h2#sub-title {

language-server/src/dotty/tools/languageserver/DottyLanguageServer.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,12 @@ object DottyLanguageServer {
351351

352352
/** Convert an lsp4j.Position to a SourcePosition */
353353
def sourcePosition(driver: InteractiveDriver, uri: URI, pos: lsp4j.Position): SourcePosition = {
354-
val source = driver.openedFiles(uri) // might throw exception
355-
val p = Positions.Position(source.lineToOffset(pos.getLine) + pos.getCharacter)
356-
new SourcePosition(source, p)
354+
val source = driver.openedFiles(uri)
355+
if (source.exists) {
356+
val p = Positions.Position(source.lineToOffset(pos.getLine) + pos.getCharacter)
357+
new SourcePosition(source, p)
358+
}
359+
else NoSourcePosition
357360
}
358361

359362
/** Convert a SourcePosition to an lsp4j.Range */

project/Build.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._
2525
object ExposedValues extends AutoPlugin {
2626
object autoImport {
2727
val bootstrapFromPublishedJars = Build.bootstrapFromPublishedJars
28+
val bootstrapOptimised = Build.bootstrapOptimised
2829
}
2930
}
3031

@@ -52,6 +53,7 @@ object Build {
5253
val JENKINS_BUILD = "dotty.jenkins.build"
5354
val DRONE_MEM = "dotty.drone.mem"
5455

56+
5557
val agentOptions = List(
5658
// "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
5759
// "-agentpath:/home/dark/opt/yjp-2013-build-13072/bin/linux-x86-64/libyjpagent.so"
@@ -84,12 +86,14 @@ object Build {
8486
lazy val dottydoc = inputKey[Unit]("run dottydoc")
8587

8688
lazy val bootstrapFromPublishedJars = settingKey[Boolean]("If true, bootstrap dotty from published non-bootstrapped dotty")
89+
lazy val bootstrapOptimised = settingKey[Boolean]("Bootstrap with -optimise")
8790

8891
// Used in build.sbt
8992
lazy val thisBuildSettings = Def.settings(
9093
// Change this to true if you want to bootstrap using a published non-bootstrapped compiler
9194
bootstrapFromPublishedJars := false,
9295

96+
bootstrapOptimised := false,
9397

9498
// Override `runCode` from sbt-dotty to use the language-server and
9599
// vscode extension from the source repository of dotty instead of a
@@ -167,8 +171,6 @@ object Build {
167171
// otherwise sbt 0.13 incremental compilation breaks (https://github.com/sbt/sbt/issues/3142)
168172
scalacOptions ++= Seq("-bootclasspath", sys.props("sun.boot.class.path")),
169173

170-
scalacOptions += "-optimise",
171-
172174
// sbt gets very unhappy if two projects use the same target
173175
target := baseDirectory.value / ".." / "out" / "bootstrap" / name.value,
174176

@@ -177,6 +179,13 @@ object Build {
177179
// ...but scala-library is
178180
libraryDependencies += "org.scala-lang" % "scala-library" % scalacVersion,
179181

182+
scalacOptions ++= {
183+
if (bootstrapOptimised.value)
184+
Seq("-optimise")
185+
else
186+
Seq()
187+
},
188+
180189
ivyConfigurations ++= {
181190
if (bootstrapFromPublishedJars.value)
182191
Seq(Configurations.ScalaTool)

tests/idempotency/Checker.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
23
object Test {
34
def main(args: Array[String]): Unit =
45
IdempotencyCheck.checkIdempotency("../out/idempotency")

0 commit comments

Comments
 (0)