Skip to content

Commit d15206b

Browse files
committed
Simplify & clarify TASTy isVersionCompatible
1 parent 38b983c commit d15206b

File tree

1 file changed

+8
-34
lines changed

1 file changed

+8
-34
lines changed

tasty/src/dotty/tools/tasty/TastyFormat.scala

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -327,29 +327,12 @@ object TastyFormat {
327327
* with an unstable TASTy version.
328328
*
329329
* We follow the given algorithm:
330+
*
330331
* ```
331-
* if file.major != compiler.major then
332-
* return incompatible
333-
* if compiler.experimental == 0 then
334-
* if file.experimental != 0 then
335-
* return incompatible
336-
* if file.minor > compiler.minor then
337-
* return incompatible
338-
* else
339-
* return compatible
340-
* else invariant[compiler.experimental != 0]
341-
* if file.experimental == compiler.experimental then
342-
* if file.minor == compiler.minor then
343-
* return compatible (all fields equal)
344-
* else
345-
* return incompatible
346-
* else if file.experimental == 0,
347-
* if file.minor < compiler.minor then
348-
* return compatible (an experimental version can read a previous released version)
349-
* else
350-
* return incompatible (an experimental version cannot read its own minor version or any later version)
351-
* else invariant[file.experimental is non-0 and different than compiler.experimental]
352-
* return incompatible
332+
* (fileMajor, fileMinor, fileExperimental) match
333+
* case (`compilerMajor`, `compilerMinor`, `compilerExperimental`) => true // full equality
334+
* case (`compilerMajor`, minor, 0) if minor < compilerMinor => true // stable backwards compatibility
335+
* case _ => false
353336
* ```
354337
* @syntax markdown
355338
*/
@@ -361,18 +344,9 @@ object TastyFormat {
361344
compilerMinor: Int,
362345
compilerExperimental: Int
363346
): Boolean = (
364-
fileMajor == compilerMajor && (
365-
if (fileExperimental == compilerExperimental) {
366-
if (compilerExperimental == 0) {
367-
fileMinor <= compilerMinor
368-
}
369-
else {
370-
fileMinor == compilerMinor
371-
}
372-
}
373-
else {
374-
fileExperimental == 0 && fileMinor < compilerMinor
375-
}
347+
fileMajor == compilerMajor &&
348+
( fileMinor == compilerMinor && fileExperimental == compilerExperimental // full equality
349+
|| fileMinor < compilerMinor && fileExperimental == 0 // stable backwards compatibility
376350
)
377351
)
378352

0 commit comments

Comments
 (0)