| 966 | |
| 967 | // Make an array type of t |
| 968 | private TypeMemPtr typeAry( Type t, boolean efinal ) { |
| 969 | if( t instanceof TypeMemPtr tmp && tmp.notNull() ) |
| 970 | throw error("Arrays of reference types must always be nullable"); |
| 971 | String tname = "[]"+t.str(); |
| 972 | TypeMemPtr ta = (TypeMemPtr)TYPES.get(tname); |
| 973 | if( ta==null ) |
| 974 | // Remember final version |
| 975 | TYPES.put(tname, ta = TypeMemPtr.make( TypeStruct.makeAry(tname,TypeInteger.U32,_code.getALIAS(),t,_code.getALIAS(),true) )); |
| 976 | Field elem = ta._obj.field("[]"); |
| 977 | if( elem._final == efinal ) |
| 978 | return ta; |
| 979 | return TypeMemPtr.make( ta._obj.replace(elem.makeFrom(efinal))); |
| 980 | } |
| 981 | |
| 982 | // A function type is `{ type... -> type }` or `{ type }`. |
| 983 | private Type typeFunPtr() { |