permit with a class which is not a subtype is allowed

Brian Goetz brian.goetz at
Tue Sep 3 16:13:58 UTC 2019

> And you have the second effect which is, if the permit clause raise a warning when the class doesn't exist, it logically also means that the case clause of a switch on type also raises a warning when the class doesn't exist.

This is true, but remember such things can happen in different files.  
The real question is whether the naming of a type in a permits clause is 
a _use_ of that type.  (Clearly, naming a type in a case clause is a 
use.)  So while it would be impossible for a switch to proceed without 
being able to find all the types it names, the same is not necessarily 
true for the declaration.

I get what you're saying: "this will catch more errors, and I don't see 
the downside, so its good".  And that may in the end be how we want to 
do it.

The reality is that the compiler doesn't _need_ to go and find all the 
named classes when we compile the declaration.  And to the extent that 
this might make life more difficult for users that have weird build 
procedures, where the subtype can't be found at compile time, doing so 
_just for the purpose of error checking_ is a cost, which needs to be 
set off against the benefit.

As I said, my current inclination is to warn here, but I could imagine 
backing off in either direction.

More information about the amber-spec-observers mailing list