Skip to content

Commit 707f9cb

Browse files
Merge pull request #14841 from dotty-staging/implement-new-main
Implement new main annotation
2 parents 3ddb21c + 8386911 commit 707f9cb

File tree

75 files changed

+2119
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+2119
-0
lines changed

library/src/scala/annotation/newMain.scala

Lines changed: 388 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
object myProgram:
2+
3+
/** Adds two numbers */
4+
@main def add(num: Int, inc: => Int): Unit = // error
5+
println(s"$num + $inc = ${num + inc}")
6+
7+
end myProgram
8+
9+
object Test:
10+
def callMain(args: Array[String]): Unit =
11+
val clazz = Class.forName("add")
12+
val method = clazz.getMethod("main", classOf[Array[String]])
13+
method.invoke(null, args)
14+
15+
def main(args: Array[String]): Unit =
16+
callMain(Array("2", "3"))
17+
end Test
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import scala.annotation.newMain
2+
3+
object myProgram:
4+
5+
@newMain def add(num: Int)(inc: Int): Unit = // error
6+
println(s"$num + $inc = ${num + inc}")
7+
8+
end myProgram
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import scala.annotation.newMain
2+
3+
object myProgram:
4+
5+
@newMain def nop[T](t: T): T = // error
6+
t
7+
8+
end myProgram
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import scala.annotation.newMain
2+
3+
object myProgram:
4+
implicit val x: Int = 2
5+
given Int = 3
6+
7+
@newMain def showImplicit(implicit num: Int): Unit = // error
8+
println(num)
9+
10+
@newMain def showUsing(using num: Int): Unit = // error
11+
println(num)
12+
13+
end myProgram
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import scala.annotation.newMain
2+
3+
object myProgram:
4+
5+
@newMain @newMain def add1(num: Int, inc: Int): Unit = // error
6+
println(s"$num + $inc = ${num + inc}")
7+
8+
end myProgram
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import scala.annotation.newMain
2+
3+
object myProgram:
4+
5+
@newMain val n = 2 // error
6+
7+
@newMain class A // error
8+
9+
@newMain val f = ((s: String) => println(s)) // error
10+
11+
end myProgram
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import scala.annotation.newMain
2+
3+
class A:
4+
@newMain def foo(bar: Int) = () // error
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import scala.annotation.newMain
2+
3+
class MyNumber(val value: Int) {
4+
def +(other: MyNumber): MyNumber = MyNumber(value + other.value)
5+
}
6+
7+
object myProgram:
8+
9+
@newMain def add(num: MyNumber, inc: MyNumber): Unit = // error
10+
println(s"$num + $inc = ${num + inc}")
11+
12+
end myProgram
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import scala.annotation.newMain
2+
import scala.util.CommandLineParser.FromString
3+
4+
object myProgram:
5+
6+
@newMain def add(num: Test.MyNumber, inc: Test.MyNumber): Unit = // error
7+
val numV = Test.value(num)
8+
val incV = Test.value(inc)
9+
println(s"$numV + $incV = ${numV + incV}")
10+
11+
end myProgram
12+
13+
14+
object Test:
15+
opaque type MyNumber = Int
16+
17+
def create(n: Int): MyNumber = n
18+
def value(n: MyNumber): Int = n
19+
20+
def callMain(args: Array[String]): Unit =
21+
val clazz = Class.forName("add")
22+
val method = clazz.getMethod("main", classOf[Array[String]])
23+
method.invoke(null, args)
24+
25+
def main(args: Array[String]): Unit =
26+
callMain(Array("2", "3"))
27+
end Test

0 commit comments

Comments
 (0)