Skip to content

Commit 9c05b26

Browse files
Backport "Retain default parameters with export" to LTS (#21064)
Backports #20167 to the LTS branch. PR submitted by the release tooling. [skip ci]
2 parents b664d2c + c875732 commit 9c05b26

File tree

6 files changed

+31
-1
lines changed

6 files changed

+31
-1
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,9 @@ object Flags {
535535
/** Flags retained in term export forwarders */
536536
val RetainedExportTermFlags = Infix | Given | Implicit | Inline | Transparent | Erased | HasDefaultParams | NoDefaultParams | ExtensionMethod
537537

538+
/** Flags retained in parameters of term export forwarders */
539+
val RetainedExportTermParamFlags = Given | Implicit | Erased | HasDefault | Inline
540+
538541
val MandatoryExportTermFlags = Exported | Method | Final
539542

540543
/** Flags retained in type export forwarders */

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -1291,14 +1291,16 @@ class Namer { typer: Typer =>
12911291
getter => addForwarder(
12921292
getter.name.asTermName, getter.asSeenFrom(path.tpe), span))
12931293

1294-
// adding annotations at the parameter level
1294+
// adding annotations and flags at the parameter level
12951295
// TODO: This probably needs to be filtered to avoid adding some annotation
12961296
// such as MacroAnnotations
12971297
if sym.is(Method) then
12981298
for (orig, forwarded) <- sym.paramSymss.lazyZip(forwarder.paramSymss)
12991299
(origParameter, exportedParameter) <- orig.lazyZip(forwarded)
13001300
do
13011301
exportedParameter.addAnnotations(origParameter.annotations)
1302+
if exportedParameter.isTerm then
1303+
exportedParameter.setFlag(origParameter.flags & RetainedExportTermParamFlags)
13021304
end addForwarder
13031305

13041306
def addForwardersNamed(name: TermName, alias: TermName, span: Span): Unit =
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
object A:
2+
def defaultParam(x: Int = 1) = x
3+
4+
object Exported:
5+
export A.*
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
object B:
2+
val x = Exported.defaultParam()
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[[syntax trees at end of typer]] // tests/printing/export-param-flags.scala
2+
package <empty> {
3+
final lazy module val A: A = new A()
4+
final module class A() extends Object() { this: A.type =>
5+
inline def inlinedParam(inline x: Int): Int = x.+(x):Int
6+
}
7+
final lazy module val Exported: Exported = new Exported()
8+
final module class Exported() extends Object() { this: Exported.type =>
9+
export A.*
10+
final inline def inlinedParam(inline x: Int): Int = A.inlinedParam(x)
11+
}
12+
}
13+
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
object A:
2+
inline def inlinedParam(inline x: Int): Int = x + x
3+
4+
object Exported:
5+
export A.*

0 commit comments

Comments
 (0)