File tree 3 files changed +63
-1
lines changed
compiler/src/dotty/tools/dotc/transform
tests/pos/macro-with-array
3 files changed +63
-1
lines changed Original file line number Diff line number Diff line change @@ -173,7 +173,24 @@ object Splicer {
173
173
sym.signature.paramsSig.map { param =>
174
174
defn.valueTypeNameToJavaType(param) match {
175
175
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)
177
194
}
178
195
}
179
196
}
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