aa
TypeMemPtr.java
Go to the documentation of this file.
1 package com.cliffc.aa.type;
2 
3 import com.cliffc.aa.util.Ary;
4 import com.cliffc.aa.util.SB;
5 import com.cliffc.aa.util.VBitSet;
6 
7 import java.util.HashMap;
8 import java.util.function.Predicate;
9 
10 import static com.cliffc.aa.type.TypeFld.Access;
11 
12 // Pointers-to-memory; these can be both the address and the value part of
13 // Loads and Stores. They carry a set of aliased TypeObjs.
14 public final class TypeMemPtr extends Type<TypeMemPtr> {
15  // List of known memory aliases. Zero is nil.
17 
18  // The _obj field is unused (trivially OBJ or XOBJ) for TMPs used as graph
19  // node results, because memory contents are modified in TypeMems and
20  // TypeObjs and NOT in pointers - hence this field "goes stale" rapidly as
21  // graph nodes manipulate the state of memory.
22  //
23  // The _obj field can be filled out accurately with a TypeMem.sharpen call,
24  // and is used to e.g. check pointer types at type assertions (including
25  // function call args).
26  public TypeObj _obj; // Meet/join of aliases. Unused in simple_ptrs in graph nodes.
27 
29  super.init(TMEMPTR,"");
30  _aliases = aliases;
31  _obj=obj;
32  return this;
33  }
34  @Override int compute_hash() {
35  assert _obj._hash != 0;
36  return (TMEMPTR + _aliases._hash + _obj._hash)|1;
37  }
38  @Override public boolean equals( Object o ) {
39  if( this==o ) return true;
40  if( !(o instanceof TypeMemPtr) ) return false;
41  TypeMemPtr tf = (TypeMemPtr)o;
42  return cycle_equals(tf);
43  }
44  @Override public boolean cycle_equals( Type o ) {
45  if( this==o ) return true;
46  if( !(o instanceof TypeMemPtr) ) return false;
47  TypeMemPtr t2 = (TypeMemPtr)o;
48  if( _aliases != t2._aliases ) return false;
49  return _obj == t2._obj || _obj.cycle_equals(t2._obj);
50  }
51 
52  @Override public SB str( SB sb, VBitSet dups, TypeMem mem, boolean debug ) {
53  //if( debug ) sb.p('_').p(_uid);
54  if( dups.tset(_uid) ) return sb.p('$'); // Break recursive printing cycle
55  //if( _aliases==BitsAlias.NIL || _aliases==BitsAlias.NIL.dual() ) return sb.p(debug ? " 0" : "0");
56  TypeObj to = (mem == null || _aliases==BitsAlias.RECORD_BITS) ? _obj : mem.ld(this);
57  if( to == TypeObj.XOBJ ) to = _obj;
58  sb.p('*');
59  if( debug ) _aliases.str(sb);
60  to.str(sb,dups,mem,debug);
61  if( _aliases.test(0) ) sb.p('?');
62  return sb;
63  }
64 
65  static { new Pool(TMEMPTR,new TypeMemPtr()); }
66  public static TypeMemPtr make(BitsAlias aliases, TypeObj obj ) {
67  TypeMemPtr t1 = POOLS[TMEMPTR].malloc();
68  return t1.init(aliases,obj).hashcons_free();
69  }
70 
71  public static TypeMemPtr make( int alias, TypeObj obj ) { return make(BitsAlias.make0(alias),obj); }
72  public static TypeMemPtr make_nil( int alias, TypeObj obj ) { return make(BitsAlias.make0(alias).meet_nil(),obj); }
73  public TypeMemPtr make_from( TypeObj obj ) { return make(_aliases,obj); }
74 
75  // The display is a self-recursive structure: slot 0 is a ptr to a Display.
76  // To break class-init cycle, this is made here, now.
77  public static final TypeFld DISP_FLD= TypeFld.malloc("^",Type.NIL,Access.Final,0);
78  public static final TypeStruct DISPLAY = TypeStruct.malloc("",false,TypeFlds.ts(DISP_FLD),true);
80  public static final Type NO_DISP= Type.ANY;
81  static {
83  DISPLAY._hash = DISPLAY.compute_hash();
84  DISPLAY_PTR._hash = DISPLAY_PTR.compute_hash(); // Filled in during DISPLAY.install_cyclic
85  assert DISPLAY.at(0) == Type.NIL;
88  assert DISPLAY.is_display();
89  }
90 
91  public static final TypeMemPtr ISUSED0= make(BitsAlias.FULL ,TypeObj.ISUSED); // Includes nil
92  public static final TypeMemPtr ISUSED = make(BitsAlias.NZERO ,TypeObj.ISUSED); // Excludes nil
93  public static final TypeMemPtr OOP0 = make(BitsAlias.FULL ,TypeObj.OBJ); // Includes nil
94  public static final TypeMemPtr OOP = make(BitsAlias.NZERO ,TypeObj.OBJ); // Excludes nil
95  public static final TypeMemPtr ARYPTR = make(BitsAlias.ARYBITS ,TypeAry.ARY);
96  public static final TypeMemPtr ARY0 = make(BitsAlias.ARYBITS0,TypeAry.ARY);
97  public static final TypeMemPtr STRPTR = make(BitsAlias.STRBITS ,TypeStr.STR);
98  public static final TypeMemPtr STR0 = make(BitsAlias.STRBITS0,TypeStr.STR);
99  public static final TypeMemPtr ABCPTR = make(BitsAlias.ABC ,TypeStr.ABC);
100  public static final TypeMemPtr ABC0 = make(ABCPTR._aliases.meet_nil(),TypeStr.ABC);
103  public static final TypeMemPtr NILPTR = make(BitsAlias.NIL,TypeObj.ISUSED);
105  public static final TypeMemPtr DISP_SIMPLE= make(BitsAlias.RECORD_BITS0,TypeObj.ISUSED); // closed display
107 
108  @Override public boolean is_display_ptr() {
110  if( x==BitsAlias.EMPTY ) return true; // Just a NIL
111  int alias1 = x.abit(); // Just a single alias
112  // The GENERIC function allows the generic record, otherwise must be on the display list
113  if( alias1 != -1 )
114  return Math.abs(alias1)==BitsAlias.REC || com.cliffc.aa.Env.ALL_DISPLAYS.test_recur(Math.abs(alias1));
115  // If closures are being used, can be multiple valid displays
116  for( int alias : _aliases )
117  if( alias != 0 && !com.cliffc.aa.Env.ALL_DISPLAYS.test_recur(alias) )
118  return false; // This alias is not on the DISPLAYS list
119  return true;
120  }
121 
122  @Override protected TypeMemPtr xdual() {
123  BitsAlias ad = _aliases.dual();
124  TypeObj od = (TypeObj)_obj.dual();
125  if( ad==_aliases && od==_obj )
126  return this; // Centerline TMP
127  return new TypeMemPtr().init(ad,od);
128  }
129  @Override TypeMemPtr rdual() {
130  if( _dual != null ) return _dual;
132  dual._dual = this;
133  if( _hash != 0 ) dual._hash = dual.compute_hash();
134  return dual;
135  }
136  @Override protected Type xmeet( Type t ) {
137  switch( t._type ) {
138  case TMEMPTR:break;
139  case TFLT:
140  case TINT:
141  case TFUNPTR:
142  case TRPC: return cross_nil(t);
143  case TFUNSIG:
144  case TARY:
145  case TLIVE:
146  case TOBJ:
147  case TSTR:
148  case TSTRUCT:
149  case TTUPLE:
150  case TMEM: return ALL;
151  default: throw typerr(t); // All else should not happen
152  }
153  // Meet of aliases
154  TypeMemPtr ptr = (TypeMemPtr)t;
156  TypeObj to = (TypeObj)_obj.meet(ptr._obj);
157  return make(aliases, to);
158  }
159  // Widens, not lowers.
160  @Override public Type simple_ptr() {
161  if( _obj==TypeObj.ISUSED || _obj==TypeObj.UNUSED ) return this;
163  }
164  @Override public boolean above_center() {
165  return _aliases.above_center();
166  }
167  @Override public Type oop_deep_impl(Type t) {
168  if( !(t instanceof TypeMemPtr) ) return oob();
169  TypeMemPtr tmp = (TypeMemPtr)t;
170  // Deep bounds; keep the in-bounds _aliases but bound the _obj.
171  if( tmp._aliases.dual().isa(_aliases) && _aliases.isa(tmp._aliases) )
172  return _obj.oop_deep_impl(tmp._obj);
173  // Aliases OOB
174  return oob();
175  }
176  // Aliases represent *classes* of pointers and are thus never constants.
177  // nil is a constant.
178  @Override public boolean may_be_con() { return may_nil(); }
179  @Override public boolean is_con() { return _aliases==BitsAlias.NIL || _aliases==BitsAlias.XNIL; } // only nil
180  @Override public boolean must_nil() { return _aliases.test(0) && !above_center(); }
181  @Override public boolean may_nil() { return _aliases.may_nil(); }
182  @Override Type not_nil() {
183  BitsAlias bits = _aliases.not_nil();
184  return bits==_aliases ? this : make(bits,_obj);
185  }
186  @Override public Type meet_nil(Type nil) {
187  assert nil==NIL || nil==XNIL;
188  // See testLattice15. The UNSIGNED NIL tests as a lattice:
189  // [~0]->~obj ==> NIL ==> [0]-> obj
190  // But loses the pointed-at type down to OBJ.
191  // So using SIGNED NIL, which also tests as a lattice:
192  // [~0]->~obj ==> XNIL ==> [0]->~obj
193  // [~0]-> obj ==> NIL ==> [0]-> obj
194 
195  if( _aliases.isa(BitsAlias.XNIL) ) {
196  if( _obj.above_center() && nil==XNIL ) return XNIL;
197  if( nil==NIL ) return NIL;
198  }
199  return make(_aliases.meet(BitsAlias.NIL),_obj);
200  }
201  // Used during approximations, with a not-interned 'this'.
202  // Updates-in-place.
203  public Type ax_meet_nil(Type nil) {
204  if( _aliases.isa(BitsAlias.XNIL) ) {
205  if( _obj.above_center() && nil==XNIL ) return XNIL;
206  if( nil==NIL ) return NIL;
207  }
209  return this;
210  }
211 
212  public BitsAlias aliases() { return _aliases; }
213 
214  // Only used for testing. Build a mapping from types to their depth in a
215  // shortest-path walk from the root. Only counts depth on TypeStructs with
216  // the matching alias.
217  HashMap<Type,Integer> depth() {
218  int alias = _aliases.getbit();
219  HashMap<Type,Integer> ds = new HashMap<>();
220  Ary<TypeStruct> t0 = new Ary<>(new TypeStruct[]{(TypeStruct)_obj});
221  Ary<TypeStruct> t1 = new Ary<>(new TypeStruct[1],0);
222  int d=0; // Current depth
223  while( !t0.isEmpty() ) {
224  while( !t0.isEmpty() ) {
225  TypeStruct ts = t0.pop();
226  if( ds.putIfAbsent(ts,d) == null )
227  for( TypeFld fld : ts.flds() ) {
228  if( ds.putIfAbsent(fld._t,d) == null && // Everything in flds is in the current depth
229  fld._t instanceof TypeMemPtr ) {
230  TypeMemPtr tmp = (TypeMemPtr)fld._t;
231  if( tmp._obj instanceof TypeStruct )
232  (tmp._aliases.test(alias) ? t1 : t0).push((TypeStruct)tmp._obj);
233  }
234  }
235  }
236  Ary<TypeStruct> tmp = t0; t0 = t1; t1 = tmp; // Swap t0,t1
237  d++; // Raise depth
238  }
239  return ds;
240  }
241 
242  // Only used for testing. Max depth of struct, with a matching alias TMP.
243  static int max(int alias, HashMap<Type,Integer> ds) {
244  int max = -1;
245  for( Type t : ds.keySet() )
246  if( (t instanceof TypeMemPtr) && ((TypeMemPtr)t)._aliases.test(alias) )
247  max = Math.max(max,ds.get(t));
248  return max+1; // Struct is 1 more depth than TMP
249  }
250 
251  // Lattice of conversions:
252  // -1 unknown; top; might fail, might be free (Scalar->Int); Scalar might lift
253  // to e.g. Float and require a user-provided rounding conversion from F64->Int.
254  // 0 requires no/free conversion (Int8->Int64, F32->F64)
255  // +1 requires a bit-changing conversion (Int->Flt)
256  // 99 Bottom; No free converts; e.g. Flt->Int requires explicit rounding
257  @Override public byte isBitShape(Type t) {
258  if( t == Type.SCALAR ) return 0; // Scalar function arg; generally dead or just passed along blindly.
259  return (byte)(t instanceof TypeMemPtr ? 0 : 99); // Mixing TMP and a non-ptr
260  }
261  @SuppressWarnings("unchecked")
262  @Override public void walk( Predicate<Type> p ) { if( p.test(this) ) _obj.walk(p); }
263  public int getbit() { return _aliases.getbit(); }
264  public int getbit0() { return _aliases.strip_nil().getbit(); }
265 
266  // Widen for primitive specialization and H-M unification. H-M distinguishes
267  // ptr-to-array (and string) from ptr-to-record. Must keep types at the same
268  // resolution as H-M, so pointers all permit nil (unless I track a H-M type
269  // which disallows nil).
270  @Override public TypeMemPtr widen() {
271  // Flatten to either all-structs or all-strings, unless both.
272  BitsAlias bs = null;
274  if( _aliases.isa(BitsAlias.STRBITS0) ) bs = bs==null ? BitsAlias.STRBITS0 : BitsAlias.FULL;
275  if( _aliases.isa(BitsAlias.ARYBITS0) ) bs = bs==null ? BitsAlias.ARYBITS0 : BitsAlias.FULL;
276  if( bs==null ) return this; // Already plenty wide
277  return make(bs,_obj.widen());
278  }
279 
280  // Make a Type, replacing all dull pointers from the matching types in mem.
281  @Override public Type make_from(Type head, TypeMem mem, VBitSet visit) {
282  if( this!=head ) {
283  TypeObj[] pubs = mem.alias2objs();
284  boolean mapped=true;
285  for( int alias : _aliases )
286  if( pubs[alias]==null )
287  { mapped=false; break; }
288  if( mapped ) {
289  TypeObj obj = mem.ld(this);
290  if( obj!=TypeObj.XOBJ )
291  return make_from(obj);
292  }
293  }
294  TypeObj obj = (TypeObj)_obj.make_from(head,mem,visit);
295  return obj == null ? this : make_from(obj);
296  }
297 
298  // Used for assertions
299  @Override boolean intern_check1() { return _obj.intern_lookup()!=null; }
300 
301 }
com.cliffc.aa.type.Bits.dual
B dual()
Definition: Bits.java:368
com.cliffc.aa.type.BitsAlias.FULL
static BitsAlias FULL
Definition: BitsAlias.java:27
com.cliffc.aa.type.TypeMemPtr.ABC0
static final TypeMemPtr ABC0
Definition: TypeMemPtr.java:100
com.cliffc.aa.type.TypeMemPtr.meet_nil
Type meet_nil(Type nil)
Definition: TypeMemPtr.java:186
com.cliffc.aa.type.TypeMemPtr.rdual
TypeMemPtr rdual()
Definition: TypeMemPtr.java:129
com.cliffc.aa.type.TypeMemPtr.TYPES
static final Type[] TYPES
Definition: TypeMemPtr.java:106
com.cliffc.aa.type.Type< TypeMemPtr >::TLIVE
static final byte TLIVE
Definition: Type.java:276
com.cliffc.aa.type.TypeFld.Access.Final
Final
Definition: TypeFld.java:112
com.cliffc.aa.type.TypeMemPtr.NO_DISP
static final Type NO_DISP
Definition: TypeMemPtr.java:80
com.cliffc.aa.type.BitsAlias.RECORD_BITS0
static BitsAlias RECORD_BITS0
Definition: BitsAlias.java:27
com.cliffc.aa.type.TypeObj.walk
void walk(Predicate< Type > p)
Definition: TypeObj.java:82
com.cliffc.aa.type.TypeMemPtr.aliases
BitsAlias aliases()
Definition: TypeMemPtr.java:212
com.cliffc.aa.type.Bits.str
SB str(SB sb)
Definition: Bits.java:134
com.cliffc.aa.type.Type< TypeMemPtr >::TMEMPTR
static final byte TMEMPTR
Definition: Type.java:273
com.cliffc.aa.type.TypeMemPtr.isBitShape
byte isBitShape(Type t)
Definition: TypeMemPtr.java:257
com.cliffc.aa.type.TypeObj.above_center
boolean above_center()
Definition: TypeObj.java:77
com.cliffc.aa.type.TypeMem.ld
TypeObj ld(TypeMemPtr ptr)
Definition: TypeMem.java:325
com.cliffc.aa.type.TypeMemPtr.compute_hash
int compute_hash()
Definition: TypeMemPtr.java:34
com.cliffc.aa.type.TypeMemPtr.STRUCT0
static final TypeMemPtr STRUCT0
Definition: TypeMemPtr.java:102
com.cliffc.aa.type.TypeMemPtr.DISPLAY_PTR
static final TypeMemPtr DISPLAY_PTR
Definition: TypeMemPtr.java:79
com.cliffc.aa.util.Ary.isEmpty
boolean isEmpty()
Definition: Ary.java:20
com.cliffc.aa.type.Type< TypeMemPtr >::typerr
RuntimeException typerr(Type t)
Definition: Type.java:947
com.cliffc.aa.type.TypeMemPtr.ABCPTR
static final TypeMemPtr ABCPTR
Definition: TypeMemPtr.java:99
com.cliffc.aa.type.TypeMem
Memory type; the state of all of memory; memory edges order memory ops.
Definition: TypeMem.java:53
com.cliffc.aa.type.TypeMemPtr.must_nil
boolean must_nil()
Definition: TypeMemPtr.java:180
com.cliffc.aa.type.TypeStruct.compute_hash
int compute_hash()
Definition: TypeStruct.java:66
com.cliffc.aa.type.TypeStruct.is_display
boolean is_display()
Definition: TypeStruct.java:220
com.cliffc.aa.type.TypeMemPtr.OOP
static final TypeMemPtr OOP
Definition: TypeMemPtr.java:94
com.cliffc.aa.type.Type.SCALAR
static final Type SCALAR
Definition: Type.java:328
com.cliffc
com.cliffc.aa.type.Type._hash
int _hash
Definition: Type.java:97
com.cliffc.aa.type.TypeMemPtr.DISP_FLD
static final TypeFld DISP_FLD
Definition: TypeMemPtr.java:77
com.cliffc.aa.type.TypeMemPtr.make_from
Type make_from(Type head, TypeMem mem, VBitSet visit)
Definition: TypeMemPtr.java:281
com.cliffc.aa.util.Ary.pop
E pop()
Definition: Ary.java:41
com.cliffc.aa.type.TypeMemPtr.str
SB str(SB sb, VBitSet dups, TypeMem mem, boolean debug)
Definition: TypeMemPtr.java:52
com.cliffc.aa.type.TypeFld
Definition: TypeFld.java:12
com.cliffc.aa.util
Definition: AbstractEntry.java:1
com.cliffc.aa.type.TypeMemPtr.may_be_con
boolean may_be_con()
Definition: TypeMemPtr.java:178
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.type.TypeStruct.ALLSTRUCT
static final TypeStruct ALLSTRUCT
Definition: TypeStruct.java:228
com.cliffc.aa.util.Ary
Definition: Ary.java:11
com.cliffc.aa.type.Type< TypeMemPtr >::TSTR
static final byte TSTR
Definition: Type.java:270
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.type.Type._type
byte _type
Definition: Type.java:98
com.cliffc.aa.type.TypeMemPtr.equals
boolean equals(Object o)
Definition: TypeMemPtr.java:38
com.cliffc.aa.type.TypeFlds
Definition: TypeFlds.java:8
com.cliffc.aa.type.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.type.TypeStruct.install_cyclic
TypeStruct install_cyclic(Ary< Type > reachs)
Definition: TypeStruct.java:422
com.cliffc.aa.type.TypeMemPtr.oop_deep_impl
Type oop_deep_impl(Type t)
Definition: TypeMemPtr.java:167
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.type.TypeAry
Definition: TypeAry.java:7
com.cliffc.aa.type.TypeStruct
A memory-based collection of optionally named fields.
Definition: TypeStruct.java:50
com.cliffc.aa.type.Bits.test
static boolean test(long[] bits, int i)
Definition: Bits.java:224
com.cliffc.aa.type.Type< TypeMemPtr >::TFUNPTR
static final byte TFUNPTR
Definition: Type.java:274
com.cliffc.aa.Env.ALL_DISPLAYS
static BitsAlias ALL_DISPLAYS
Definition: Env.java:28
com.cliffc.aa.type.Type< TypeMemPtr >::TINT
static final byte TINT
Definition: Type.java:263
com.cliffc.aa.type.TypeMemPtr._obj
TypeObj _obj
Definition: TypeMemPtr.java:26
com.cliffc.aa.type.TypeMemPtr.is_con
boolean is_con()
Definition: TypeMemPtr.java:179
com.cliffc.aa.type.Types
Definition: Types.java:9
com.cliffc.aa.type.TypeStruct.at
Type at(int idx)
Definition: TypeStruct.java:1013
com.cliffc.aa.type.TypeMemPtr.EMTPTR
static final TypeMemPtr EMTPTR
Definition: TypeMemPtr.java:104
com.cliffc.aa.type.Types.ts
static Type[] ts(Type t0)
Definition: Types.java:90
com.cliffc.aa.type.Type< TypeMemPtr >::ALL
static final Type ALL
Definition: Type.java:324
com.cliffc.aa.type.Type< TypeMemPtr >::TMEM
static final byte TMEM
Definition: Type.java:272
com.cliffc.aa.type.Bits.may_nil
boolean may_nil()
Definition: Bits.java:209
com.cliffc.aa.type.BitsAlias.REC
static final int REC
Definition: BitsAlias.java:25
com.cliffc.aa.util.VBitSet.tset
boolean tset(int idx)
Definition: VBitSet.java:7
com.cliffc.aa.type.Bits.above_center
boolean above_center()
Definition: Bits.java:204
com.cliffc.aa.type.Type< TypeMemPtr >::TTUPLE
static final byte TTUPLE
Definition: Type.java:266
com.cliffc.aa.type.Type.rdual
T rdual()
Definition: Type.java:366
com.cliffc.aa.type.TypeObj.OBJ
static final TypeObj OBJ
Definition: TypeObj.java:44
com.cliffc.aa.type.TypeMemPtr.DISP_SIMPLE
static final TypeMemPtr DISP_SIMPLE
Definition: TypeMemPtr.java:105
com.cliffc.aa.type.TypeObj
Definition: TypeObj.java:15
com.cliffc.aa.type.TypeFld.setX
TypeFld setX(Type t)
Definition: TypeFld.java:173
com.cliffc.aa.type.BitsAlias.XNIL
static BitsAlias XNIL
Definition: BitsAlias.java:27
com.cliffc.aa.type.TypeMemPtr.STR0
static final TypeMemPtr STR0
Definition: TypeMemPtr.java:98
com.cliffc.aa.type.TypeMemPtr.walk
void walk(Predicate< Type > p)
Definition: TypeMemPtr.java:262
com.cliffc.aa.type.TypeAry.ARY
static final TypeAry ARY
Definition: TypeAry.java:44
com.cliffc.aa.type.Type< TypeMemPtr >::_dual
T _dual
Definition: Type.java:100
com.cliffc.aa.type.Type< TypeMemPtr >::TSTRUCT
static final byte TSTRUCT
Definition: Type.java:268
com.cliffc.aa.type.BitsAlias.NIL
static BitsAlias NIL
Definition: BitsAlias.java:27
com.cliffc.aa.type.TypeMemPtr.DISPLAY
static final TypeStruct DISPLAY
Definition: TypeMemPtr.java:78
com.cliffc.aa.type.BitsAlias.RECORD_BITS
static BitsAlias RECORD_BITS
Definition: BitsAlias.java:26
com.cliffc.aa.type.TypeObj.XOBJ
static final TypeObj XOBJ
Definition: TypeObj.java:47
com.cliffc.aa.type.BitsAlias.STRBITS0
static BitsAlias STRBITS0
Definition: BitsAlias.java:26
com.cliffc.aa.type.TypeMemPtr.init
TypeMemPtr init(BitsAlias aliases, TypeObj obj)
Definition: TypeMemPtr.java:28
com.cliffc.aa.type.TypeStr.ABC
static final TypeStr ABC
Definition: TypeStr.java:47
com.cliffc.aa.type.Bits._hash
int _hash
Definition: Bits.java:70
com.cliffc.aa.type.Type< TypeMemPtr >::cross_nil
final Type cross_nil(Type t)
Definition: Type.java:865
com.cliffc.aa.type.TypeObj.UNUSED
static final TypeObj UNUSED
Definition: TypeObj.java:46
com.cliffc.aa.type.Type.make_from
Type make_from(Type head, TypeMem map, VBitSet visit)
Definition: Type.java:945
com.cliffc.aa.type.BitsAlias.ARYBITS0
static BitsAlias ARYBITS0
Definition: BitsAlias.java:26
com.cliffc.aa.type.TypeMemPtr.getbit
int getbit()
Definition: TypeMemPtr.java:263
com.cliffc.aa.type.TypeMemPtr.getbit0
int getbit0()
Definition: TypeMemPtr.java:264
com.cliffc.aa.type.TypeObj.ISUSED
static final TypeObj ISUSED
Definition: TypeObj.java:45
com.cliffc.aa.type.TypeMemPtr.intern_check1
boolean intern_check1()
Definition: TypeMemPtr.java:299
com.cliffc.aa.type.TypeMemPtr.xdual
TypeMemPtr xdual()
Definition: TypeMemPtr.java:122
com.cliffc.aa.type.TypeMemPtr.ARYPTR
static final TypeMemPtr ARYPTR
Definition: TypeMemPtr.java:95
com.cliffc.aa.type.Bits.meet_nil
B meet_nil()
Definition: Bits.java:212
com.cliffc.aa.type.TypeMemPtr.STRUCT
static final TypeMemPtr STRUCT
Definition: TypeMemPtr.java:101
com.cliffc.aa.type.BitsAlias.ABC
static final int ABC
Definition: BitsAlias.java:25
com.cliffc.aa.type.TypeStruct.flds
static TypeFld[] flds(Type t1)
Definition: TypeStruct.java:184
com.cliffc.aa.type.TypeStr
Definition: TypeStr.java:14
com.cliffc.aa.type.Bits.getbit
int getbit()
Definition: Bits.java:202
com.cliffc.aa.type.BitsAlias.EMPTY
static BitsAlias EMPTY
Definition: BitsAlias.java:27
com.cliffc.aa.type.Type< TypeMemPtr >::TRPC
static final byte TRPC
Definition: Type.java:265
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
com.cliffc.aa.type.TypeMemPtr.xmeet
Type xmeet(Type t)
Definition: TypeMemPtr.java:136
com.cliffc.aa.type.TypeObj.str
SB str(SB sb, VBitSet dups, TypeMem mem, boolean debug)
Definition: TypeObj.java:34
com.cliffc.aa.type.TypeMem.alias2objs
TypeObj[] alias2objs()
Definition: TypeMem.java:148
com.cliffc.aa.type.Type.hashcons_free
final T hashcons_free()
Definition: Type.java:153
com.cliffc.aa.util.SB
Tight/tiny StringBuilder wrapper.
Definition: SB.java:8
com.cliffc.aa.type.Type.NIL
static final Type NIL
Definition: Type.java:332
com.cliffc.aa.type.TypeObj.cycle_equals
boolean cycle_equals(Type o)
Definition: TypeObj.java:33
com.cliffc.aa.type.TypeFld.malloc
static TypeFld malloc(String fld, Type t, Access access, int order)
Definition: TypeFld.java:53
com.cliffc.aa.type.TypeMemPtr.simple_ptr
Type simple_ptr()
Definition: TypeMemPtr.java:160
com.cliffc.aa.type.TypeMemPtr.is_display_ptr
boolean is_display_ptr()
Definition: TypeMemPtr.java:108
com.cliffc.aa.type.Type.oop_deep_impl
Type oop_deep_impl(Type t)
Definition: Type.java:634
com.cliffc.aa.type.Bits.isa
boolean isa(B bs)
Definition: Bits.java:372
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.type.TypeMemPtr.cycle_equals
boolean cycle_equals(Type o)
Definition: TypeMemPtr.java:44
com.cliffc.aa.type.BitsAlias.make0
static BitsAlias make0(int bit)
Definition: BitsAlias.java:72
com.cliffc.aa.type.Type< TypeMemPtr >::_uid
int _uid
Definition: Type.java:96
com.cliffc.aa.type.BitsAlias.STRBITS
static BitsAlias STRBITS
Definition: BitsAlias.java:27
com.cliffc.aa.type.Bits.abit
int abit()
Definition: Bits.java:203
com.cliffc.aa.util.SB.p
SB p(String s)
Definition: SB.java:13
com.cliffc.aa.type.TypeMemPtr._aliases
BitsAlias _aliases
Definition: TypeMemPtr.java:16
com.cliffc.aa.type.Bits.strip_nil
B strip_nil()
Definition: Bits.java:273
com.cliffc.aa.type.TypeMemPtr.NILPTR
static final TypeMemPtr NILPTR
Definition: TypeMemPtr.java:103
com.cliffc.aa.type.TypeMemPtr.may_nil
boolean may_nil()
Definition: TypeMemPtr.java:181
com.cliffc.aa.type.Type.dual
final T dual()
Definition: Type.java:361
com.cliffc.aa.type.Type< TypeMemPtr >::oob
Type oob()
Definition: Type.java:635
com.cliffc.aa.type.BitsAlias.ARYBITS
static BitsAlias ARYBITS
Definition: BitsAlias.java:27
com.cliffc.aa.type.TypeMemPtr.ARY0
static final TypeMemPtr ARY0
Definition: TypeMemPtr.java:96
com.cliffc.aa.type.TypeMemPtr.ISUSED
static final TypeMemPtr ISUSED
Definition: TypeMemPtr.java:92
com.cliffc.aa.type.Type< TypeMemPtr >::XNIL
static final Type XNIL
Definition: Type.java:333
com.cliffc.aa.type.Type< TypeMemPtr >::POOLS
static final Pool[] POOLS
Definition: Type.java:281
com.cliffc.aa.type.TypeMemPtr.depth
HashMap< Type, Integer > depth()
Definition: TypeMemPtr.java:217
com.cliffc.aa.type.Type< TypeMemPtr >::TOBJ
static final byte TOBJ
Definition: Type.java:267
com.cliffc.aa.type.TypeStruct.malloc
static TypeStruct malloc(String name, boolean any, TypeFld[] flds, boolean open)
Definition: TypeStruct.java:175
com.cliffc.aa.type.TypeStr.STR
static final TypeStr STR
Definition: TypeStr.java:45
com.cliffc.aa.type.TypeFld.Access
Definition: TypeFld.java:109
com.cliffc.aa.type.Bits.not_nil
B not_nil()
Definition: Bits.java:246
com.cliffc.aa.type.TypeMemPtr.STRPTR
static final TypeMemPtr STRPTR
Definition: TypeMemPtr.java:97
com.cliffc.aa.type.Type.intern_lookup
Type intern_lookup()
Definition: Type.java:210
com.cliffc.aa.type.TypeMemPtr.OOP0
static final TypeMemPtr OOP0
Definition: TypeMemPtr.java:93
com.cliffc.aa.type.TypeMemPtr.ax_meet_nil
Type ax_meet_nil(Type nil)
Definition: TypeMemPtr.java:203
com.cliffc.aa.type.Bits.meet
B meet(final B bs)
Definition: Bits.java:298
com.cliffc.aa.type.TypeMemPtr.max
static int max(int alias, HashMap< Type, Integer > ds)
Definition: TypeMemPtr.java:243
com.cliffc.aa.type.BitsAlias.NZERO
static BitsAlias NZERO
Definition: BitsAlias.java:27
com.cliffc.aa.type.TypeMemPtr.make_nil
static TypeMemPtr make_nil(int alias, TypeObj obj)
Definition: TypeMemPtr.java:72
com.cliffc.aa.type.TypeMemPtr.not_nil
Type not_nil()
Definition: TypeMemPtr.java:182
com
com.cliffc.aa.type.TypeFlds.ts
static TypeFld[] ts(TypeFld t0)
Definition: TypeFlds.java:82
com.cliffc.aa.type.TypeMemPtr.widen
TypeMemPtr widen()
Definition: TypeMemPtr.java:270
com.cliffc.aa.type.TypeMemPtr.make
static TypeMemPtr make(int alias, TypeObj obj)
Definition: TypeMemPtr.java:71
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.type.TypeMemPtr.make_from
TypeMemPtr make_from(TypeObj obj)
Definition: TypeMemPtr.java:73
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.type.TypeMemPtr
Definition: TypeMemPtr.java:14
com.cliffc.aa.type.Type< TypeMemPtr >::TFUNSIG
static final byte TFUNSIG
Definition: Type.java:275
com.cliffc.aa.type.Type< TypeMemPtr >::TARY
static final byte TARY
Definition: Type.java:269
com.cliffc.aa.type.Type< TypeMemPtr >::TFLT
static final byte TFLT
Definition: Type.java:264
com.cliffc.aa.type.TypeMemPtr.above_center
boolean above_center()
Definition: TypeMemPtr.java:164
com.cliffc.aa.type.TypeFld.compute_hash
int compute_hash()
Definition: TypeFld.java:29
com.cliffc.aa.type.TypeMemPtr.make
static TypeMemPtr make(BitsAlias aliases, TypeObj obj)
Definition: TypeMemPtr.java:66
com.cliffc.aa.type.TypeMemPtr.ISUSED0
static final TypeMemPtr ISUSED0
Definition: TypeMemPtr.java:91
com.cliffc.aa.type.TypeObj.widen
TypeObj widen()
Definition: TypeObj.java:76