[code-reflection] RFR: Update the model of pattern matching when pattern variable identifier is underscore [v2]

Paul Sandoz psandoz at openjdk.org
Wed Sep 11 15:14:19 UTC 2024


On Wed, 11 Sep 2024 03:19:06 GMT, Mourad Abbay <mabbay at openjdk.org> wrote:

>> Right, they are interconnected. I proposed to Mourad we should use `null` to signal no binding/name. The corresponding Var modeling the pattern variable can have `null` for its name, which we can do generally for variables with no name.
>> 
>> For example for:
>> 
>> `boolean x = o instanceof String s`
>> 
>> the model is:
>> 
>> 
>>     %4 : java.lang.String = constant @null;
>>     %5 : Var<java.lang.String> = var %4 @"s";
>>     %6 : boolean = pattern.match %3
>>         ()java.lang.reflect.code.ExtendedOp$Pattern$Binding<java.lang.String> -> {
>>             %7 : java.lang.reflect.code.ExtendedOp$Pattern$Binding<java.lang.String> = pattern.binding @"s";
>>             yield %7;
>>         }
>>         (%8 : java.lang.String)void -> {
>>             var.store %5 %8;
>>             yield;
>>         };
>>     %9 : Var<boolean> = var %6 @"x";
>> 
>> 
>> For:
>> 
>> `boolean _ = o instanceof String _`
>> 
>> we could generate:
>> 
>> 
>>     %4 : java.lang.String = constant @null;
>>     %5 : Var<java.lang.String> = var %4;
>>     %6 : boolean = pattern.match %3
>>         ()java.lang.reflect.code.ExtendedOp$Pattern$Binding<java.lang.String> -> {
>>             %7 : java.lang.reflect.code.ExtendedOp$Pattern$Binding<java.lang.String> = pattern.binding;
>>             yield %7;
>>         }
>>         (%8 : java.lang.String)void -> {
>>             var.store %5 %8;
>>             yield;
>>         };
>>     %9 : Var<boolean> = var %6;
>> 
>> 
>> When lowering it might be possible to remove unnamed variables, they are never loaded.
>
> I suggest to not have Var that correspond to unnamed pattern variable

That's another option, but a likely a more complicated change. Perhaps consider that when you get to support record patterns like `R(_)` as there may be stronger motivation to do so?

-------------

PR Review Comment: https://git.openjdk.org/babylon/pull/227#discussion_r1754900428


More information about the babylon-dev mailing list