File tree Expand file tree Collapse file tree 3 files changed +63
-1
lines changed
compiler/src/dotty/tools/dotc/transform
tests/pos/macro-with-array Expand file tree Collapse file tree 3 files changed +63
-1
lines changed Original file line number Diff line number Diff line change @@ -173,7 +173,24 @@ object Splicer {
173173 sym.signature.paramsSig.map { param =>
174174 defn.valueTypeNameToJavaType(param) match {
175175 case Some (clazz) => clazz
176- case None => classLoader.loadClass(param.toString)
176+ case None =>
177+ def javaArraySig (name : String ): String = {
178+ if (name.endsWith(" []" )) " [" + javaArraySig(name.dropRight(2 ))
179+ else name match {
180+ case " scala.Boolean" => " Z"
181+ case " scala.Byte" => " B"
182+ case " scala.Short" => " S"
183+ case " scala.Int" => " I"
184+ case " scala.Long" => " J"
185+ case " scala.Float" => " F"
186+ case " scala.Double" => " D"
187+ case " scala.Char" => " C"
188+ case paramName => " L" + paramName + " ;"
189+ }
190+ }
191+ def javaSig (name : String ): String =
192+ if (name.endsWith(" []" )) javaArraySig(name) else name
193+ java.lang.Class .forName(javaSig(param.toString), false , classLoader)
177194 }
178195 }
179196 }
Original file line number Diff line number Diff line change 1+
2+ object Macro {
3+
4+ inline def foo1 (arr : Array [Boolean ]): Unit = ~ { '() }
5+ inline def foo2 (arr : Array [Byte ]): Unit = ~ { '() }
6+ inline def foo3 (arr : Array [Short ]): Unit = ~ { '() }
7+ inline def foo4 (arr : Array [Int ]): Unit = ~ { '() }
8+ inline def foo5 (arr : Array [Long ]): Unit = ~ { '() }
9+ inline def foo6 (arr : Array [Float ]): Unit = ~ { '() }
10+ inline def foo7 (arr : Array [Double ]): Unit = ~ { '() }
11+ inline def foo8 (arr : Array [Char ]): Unit = ~ { '() }
12+ inline def foo9 (arr : Array [Object ]): Unit = ~ { '() }
13+ inline def foo10 (arr : Array [String ]): Unit = ~ { '() }
14+ inline def foo11 [T ](arr : Array [T ]): Unit = ~ { '() }
15+ inline def foo12 (arr : Array [Array [Int ]]): Unit = ~ { '() }
16+ inline def foo13 (arr : Array [Array [String ]]): Unit = ~ { '() }
17+ inline def foo14 (arr : Array [Array [Array [Int ]]]): Unit = ~ { '() }
18+ inline def foo15 (arr : Array [Any ]): Unit = ~ { '() }
19+ inline def foo16 (arr : Array [AnyVal ]): Unit = ~ { '() }
20+ inline def foo17 (arr : Array [AnyRef ]): Unit = ~ { '() }
21+ inline def foo18 (arr : Array [Foo ]): Unit = ~ { '() }
22+
23+ }
24+
25+ class Foo
Original file line number Diff line number Diff line change 1+ object PowerInlined1 {
2+ Macro .foo1(Array .empty)
3+ Macro .foo2(Array .empty)
4+ Macro .foo3(Array .empty)
5+ Macro .foo4(Array .empty)
6+ Macro .foo5(Array .empty)
7+ Macro .foo6(Array .empty)
8+ Macro .foo7(Array .empty)
9+ Macro .foo8(Array .empty)
10+ Macro .foo9(Array .empty)
11+ Macro .foo10(Array .empty)
12+ Macro .foo11[String ](Array .empty)
13+ Macro .foo12(Array .empty)
14+ Macro .foo13(Array .empty)
15+ Macro .foo14(Array .empty)
16+ Macro .foo15(Array .empty)
17+ Macro .foo16(Array .empty)
18+ Macro .foo17(Array .empty)
19+ Macro .foo18(Array .empty)
20+ }
You can’t perform that action at this time.
0 commit comments