----- Mail original ----- > De: "Brian Goetz" <brian.go...@oracle.com> > À: "Tagir Valeev" <amae...@gmail.com>, "amber-spec-experts" > <amber-spec-experts@openjdk.java.net> > Envoyé: Jeudi 5 Avril 2018 21:44:30 > Objet: Re: Compile-time type hierarchy information in pattern switch
>> Is it too harsh to reject the whole class if the assumptions on class >> hierarchy which were necessary to compile the switch statements used >> in the class are not valid at runtime? > > That is one of the questions! And the other question is: is this too > expensive to do this check at runtime, given that it will fail so > infrequently. > > If we can detect it cheaply enough, though, we can also repair the > situation and fall back to linear testing of patterns. This seems > better (we can execute the statement the user wrote) than failing. My > real question is can I punt on trying to detect it, and still optimize > the common cases down to O(1) dispatch.... the way to detect it is to use the DAG of the supertypes (lazily constructed*), from the last to the first case, the idea is to propagate the index of down to the super types, if during the propagation, you find a supertype which is also a case and with an index lower that the currently propagated, then it's a failure. Rémi * you do not have to actually create the DAG, just be able to traverse it from the subtype to the supertypes.