[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