This is something i think we have no discussed, with a record pattern, the
switch has to call the record accessors, and those can do side effects,
revealing the order of the calls to the accessors.
So by example, with a code like this
record Foo(Object o1, Object o2) {
public Object o2() {
throw new AssertionError();
}
}
void int m(Foo foo) {
return switch(foo) {
case Foo(String s, Object o2) -> 1
case Foo foo -> 2
};
}
m(new Foo(3, 4)); // throw AssertionError ?
Do the call throw an AssertionError ?
I believe the answer is no, because 3 is not a String, so Foo::o2() is not
called.
Rémi