Skip to content

Commit 223cf85

Browse files
committed
allow infix extension methods
1 parent 535368f commit 223cf85

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,9 @@ object Checking {
555555
fail(CannotHaveSameNameAs(sym, cls, CannotHaveSameNameAs.CannotBeOverridden))
556556
sym.setFlag(Private) // break the overriding relationship by making sym Private
557557
}
558-
if sym.isWrappedToplevelDef && !sym.isType && sym.flags.is(Infix) then fail(ToplevelDefCantBeInfix(sym))
558+
559+
if sym.isWrappedToplevelDef && !sym.isType && sym.flags.is(Infix, butNot = Extension) then
560+
fail(ToplevelDefCantBeInfix(sym))
559561
checkApplicable(Erased,
560562
!sym.isOneOf(MutableOrLazy, butNot = Given) && !sym.isType || sym.isClass)
561563
checkCombination(Final, Open)

tests/neg/i17738-toplevel-infix.check

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:10:10 ----------------------------------------------------
2-
10 |infix val toplevelVal = ??? // error
1+
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:13:10 ----------------------------------------------------
2+
13 |infix val toplevelVal = ??? // error
33
| ^
44
| a toplevel val cannot be infix
5-
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:11:10 ----------------------------------------------------
6-
11 |infix var toplevelVar = ??? // error
5+
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:14:10 ----------------------------------------------------
6+
14 |infix var toplevelVar = ??? // error
77
| ^
88
| a toplevel var cannot be infix
9-
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:12:10 ----------------------------------------------------
10-
12 |infix def toplevelDef = ??? // error
9+
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:15:10 ----------------------------------------------------
10+
15 |infix def toplevelDef = ??? // error
1111
| ^
1212
| a toplevel def cannot be infix
13-
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:13:12 ----------------------------------------------------
14-
13 |infix given toplevelGiven: Int = ??? // error
13+
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:16:12 ----------------------------------------------------
14+
16 |infix given toplevelGiven: Int = ??? // error
1515
| ^
1616
| a toplevel given cannot be infix
17-
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:14:19 ----------------------------------------------------
18-
14 |infix implicit val topevelImplicit: Int = ??? // error
17+
-- [E183] Syntax Error: tests/neg/i17738-toplevel-infix.scala:17:19 ----------------------------------------------------
18+
17 |infix implicit val topevelImplicit: Int = ??? // error
1919
| ^
2020
| a toplevel val cannot be infix

tests/neg/i17738-toplevel-infix.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ infix type B[b, a] = b match {
77
infix class C[A, B]
88
infix trait D[A, B]
99

10+
extension (x: Boolean)
11+
infix def or (y: => Boolean) = x || y
12+
1013
infix val toplevelVal = ??? // error
1114
infix var toplevelVar = ??? // error
1215
infix def toplevelDef = ??? // error

0 commit comments

Comments
 (0)