Skip to content

Commit 08ddbac

Browse files
committed
allow infix extension methods
1 parent 1dd1af8 commit 08ddbac

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
@@ -561,7 +561,9 @@ object Checking {
561561
fail(CannotHaveSameNameAs(sym, cls, CannotHaveSameNameAs.CannotBeOverridden))
562562
sym.setFlag(Private) // break the overriding relationship by making sym Private
563563
}
564-
if sym.isWrappedToplevelDef && !sym.isType && sym.flags.is(Infix) then fail(ToplevelDefCantBeInfix(sym))
564+
565+
if sym.isWrappedToplevelDef && !sym.isType && sym.flags.is(Infix, butNot = Extension) then
566+
fail(ToplevelDefCantBeInfix(sym))
565567
checkApplicable(Erased,
566568
!sym.isOneOf(MutableOrLazy, butNot = Given) && !sym.isType || sym.isClass)
567569
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)