> On Aug 5, 2020, at 2:11 AM, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> 
> On 8/5/20 10:05 AM, Peter Levart wrote:
>> Javac could emit a check before accessing a field from code where embedded 
>> check is not performed (where instance is not "this") and before invoking 
>> default interface method (as determined by static type)
> 
> ...hm, javac could not do that, right? It does not know if the instance is of 
> inline class at that time and of which inline class. This is only possible 
> during runtime...
> 
> But at least for field accesses this could work.

Correct. In theory, for method invocations, javac could do something reflective 
for *every* invocation involving Object or an interface. Something like:

Runnable obj = ...;
if (obj.getClass().isInline() && obj.getClass().defaultValue() == obj)
    throw new InvalidDefaultInstanceException();
obj.run();

But of course that's a huge burden on every Java program in the world, without 
regard to whether they expect to encounter Bucket #3 inline classes.

It's a similar story for Option H—compiler checks on array reads from Object[], 
Runnable[], etc.

Reply via email to