This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
dev:crosscompiler:type_checking [2015/04/06 09:19] – ursgraf | dev:crosscompiler:type_checking [2019/07/12 15:44] – ursgraf | ||
---|---|---|---|
Line 14: | Line 14: | ||
==== Special Case ' | ==== Special Case ' | ||
- | When you check against //Object//, the result must be '' | + | When you check against //Object//, the result must be '' |
A check against an array of //Object// leads to two cases: | A check against an array of //Object// leads to two cases: | ||
- The reference points to an array of regular classes: the check returns '' | - The reference points to an array of regular classes: the check returns '' | ||
Line 71: | Line 71: | ||
For this reason the type descriptor has a table with all interfaces that this class implements. The compiler will determine at compile time for which interfaces there is ever a type check. Only these will be inserted into the table. \\ | For this reason the type descriptor has a table with all interfaces that this class implements. The compiler will determine at compile time for which interfaces there is ever a type check. Only these will be inserted into the table. \\ | ||
[{{ .: | [{{ .: | ||
- | All the affected interfaces get numbered (//chkId//) and will be inserted into the table starting with the highest number. The checking can now run as follows: the compiler knows the //chkId// of the interface to check against. It will search //chkId// in the table. If found the check returns '' | + | All the affected interfaces get numbered (//chkId//) and will be inserted into the table starting with the highest number. The checking can now run as follows: the compiler knows the //chkId// of the interface to check against. It will search //chkId// in the table. If found, the check returns '' |
- | Here again, // | + | Here again, // |
==== Complex Use Case ==== | ==== Complex Use Case ==== | ||
The following code | The following code | ||
<code java> | <code java> | ||
- | Object[][][] | + | Object[][][] |
A[] x = new AA[5]; | A[] x = new AA[5]; | ||
a1[0][0] = x; | a1[0][0] = x; |