1 import java.lang.runtime.CodeReflection;
 2 
 3 /*
 4  * @test
 5  * @build PatternTest2
 6  * @build CodeReflectionTester
 7  * @run main CodeReflectionTester PatternTest2
 8  */
 9 public class PatternTest2 {
10     record R<T extends Number> (T n) {}
11 
12     @IR("""
13             func @"f" (%0 : java.lang.Object)boolean -> {
14                 %1 : Var<java.lang.Object> = var %0 @"o";
15                 %2 : java.lang.Object = var.load %1;
16                 %3 : java.lang.Integer = constant @null;
17                 %4 : Var<java.lang.Integer> = var %3 @"i";
18                 %5 : boolean = pattern.match %2
19                     ()java.lang.reflect.code.ExtendedOp$Pattern$Record<PatternTest2$R<#PatternTest2$R::T<java.lang.Number>>> -> {
20                         %6 : java.lang.reflect.code.ExtendedOp$Pattern$Type<java.lang.Integer> = pattern.type @"i";
21                         %7 : java.lang.reflect.code.ExtendedOp$Pattern$Record<PatternTest2$R<#PatternTest2$R::T<java.lang.Number>>> = pattern.record %6 @"(#PatternTest2$R::T<java.lang.Number> n)PatternTest2$R<#PatternTest2$R::T<java.lang.Number>>";
22                         yield %7;
23                     }
24                     (%8 : java.lang.Integer)void -> {
25                         var.store %4 %8;
26                         yield;
27                     };
28                 return %5;
29             };
30             """)
31     @CodeReflection
32     static boolean f(Object o) {
33         return o instanceof R(Integer i);
34     }
35 }