aa
com.cliffc.aa.type.TypeAry Class Reference
Inheritance diagram for com.cliffc.aa.type.TypeAry:
[legend]
Collaboration diagram for com.cliffc.aa.type.TypeAry:
[legend]

Public Member Functions

boolean above_center ()
 
TypeAry crush ()
 
boolean cycle_equals (Type o)
 
boolean equals (Object o)
 
boolean is_con ()
 
Type ld (TypeInt idx)
 
boolean may_be_con ()
 
boolean may_nil ()
 
boolean must_nil ()
 
SB str (SB sb, VBitSet dups, TypeMem mem, boolean debug)
 
TypeObj update (Access fin, String fld, Type val)
 
TypeObj update (TypeInt idx, Type val)
 
void walk (Predicate< Type > p)
 
TypeObj widen ()
 

Static Public Member Functions

static TypeAry make (String name, boolean any, TypeInt sz, Type elem, TypeObj stor)
 
static TypeAry make (TypeInt sz, Type elem, TypeObj stor)
 

Public Attributes

TypeInt _size
 

Static Public Attributes

static final TypeAry ARY = make("",false,TypeInt.INT64 ,Type.SCALAR ,TypeObj.OBJ )
 
static final TypeAry ARY0 = make("",false,TypeInt.INT64 ,Type.XNIL ,TypeObj.OBJ )
 
static final TypeAry BYTES = make("",false,TypeInt.con(3),TypeInt.INT8,TypeObj.OBJ )
 
static final TypeObj ISUSED
 
static final TypeObj OBJ
 
static final TypeObj UNUSED
 
static final TypeObj XOBJ
 

Protected Member Functions

init (byte type, String name, boolean any, boolean use)
 
TypeAry xdual ()
 
Type xmeet (Type t)
 

Package Functions

int compute_hash ()
 
TypeObj flatten_fields ()
 
boolean is_display ()
 
TypeAry rdual ()
 
TypeAry remove_other_flds (String fld, Type live)
 

Static Package Functions

 [static initializer]
 

Package Attributes

boolean _any
 
boolean _use
 

Static Package Attributes

static final TypeAry[] TYPES = new TypeAry[]{ARY,ARY0,BYTES}
 

Private Member Functions

TypeAry init (String name, boolean any, TypeInt sz, Type elem, TypeObj stor)
 

Private Attributes

Type _elem
 
TypeObj _stor
 

Detailed Description

Definition at line 7 of file TypeAry.java.

Member Function Documentation

◆ [static initializer]()

com.cliffc.aa.type.TypeAry.[static initializer]
staticpackage

◆ above_center()

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.above_center
inherited

Definition at line 77 of file TypeObj.java.

77 { return _any; }

◆ compute_hash()

int com.cliffc.aa.type.TypeAry.compute_hash ( )
package

Definition at line 19 of file TypeAry.java.

19 { return super.compute_hash() + _size._hash + _elem._hash + _stor._hash; }

References com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.Type< T extends Type< T >._hash, com.cliffc.aa.type.TypeAry._size, and com.cliffc.aa.type.TypeAry._stor.

Referenced by com.cliffc.aa.type.TypeAry.rdual().

Here is the caller graph for this function:

◆ crush()

TypeAry com.cliffc.aa.type.TypeAry.crush ( )

Definition at line 85 of file TypeAry.java.

85  {
86  if( _any ) return this; // No crush on high arrays
87  return make(_size,Type.SCALAR,_stor);
88  }

References com.cliffc.aa.type.TypeObj< TypeAry >._any, com.cliffc.aa.type.TypeAry._size, com.cliffc.aa.type.TypeAry._stor, com.cliffc.aa.type.TypeAry.make(), and com.cliffc.aa.type.Type< T extends Type< T >.SCALAR.

Here is the call graph for this function:

◆ cycle_equals()

boolean com.cliffc.aa.type.TypeAry.cycle_equals ( Type  o)

Definition at line 26 of file TypeAry.java.

26 { return equals(o); }

References com.cliffc.aa.type.TypeAry.equals().

Here is the call graph for this function:

◆ equals()

boolean com.cliffc.aa.type.TypeAry.equals ( Object  o)

Definition at line 20 of file TypeAry.java.

20  {
21  if( this==o ) return true;
22  if( !(o instanceof TypeAry) || !super.equals(o) ) return false;
23  TypeAry ta = (TypeAry)o;
24  return _size == ta._size && _elem == ta._elem && _stor == ta._stor;
25  }

References com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.TypeAry._size, and com.cliffc.aa.type.TypeAry._stor.

Referenced by com.cliffc.aa.type.TypeAry.cycle_equals().

Here is the caller graph for this function:

◆ flatten_fields()

TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.flatten_fields
packageinherited

Definition at line 74 of file TypeObj.java.

74 { return this; }

◆ init() [1/2]

O com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.init ( byte  type,
String  name,
boolean  any,
boolean  use 
)
protectedinherited

Definition at line 19 of file TypeObj.java.

19  {
20  super.init(type,name);
21  _any=any;
22  _use=use;
23  return (O)this;
24  }

◆ init() [2/2]

TypeAry com.cliffc.aa.type.TypeAry.init ( String  name,
boolean  any,
TypeInt  sz,
Type  elem,
TypeObj  stor 
)
private

Definition at line 12 of file TypeAry.java.

12  {
13  super.init(TARY,name,any,any);
14  _size = sz;
15  _elem = elem;
16  _stor = stor;
17  return this;
18  }

References com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.TypeAry._size, com.cliffc.aa.type.TypeAry._stor, and com.cliffc.aa.type.TypeAry.init().

Referenced by com.cliffc.aa.type.TypeAry.init(), com.cliffc.aa.type.TypeAry.make(), and com.cliffc.aa.type.TypeAry.xdual().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_con()

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.is_con
inherited

Definition at line 79 of file TypeObj.java.

79 { return false; }

◆ is_display()

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.is_display
packageinherited

Definition at line 50 of file TypeObj.java.

50 { return false; }

◆ ld()

Type com.cliffc.aa.type.TypeAry.ld ( TypeInt  idx)

Definition at line 90 of file TypeAry.java.

90  {
91  return _elem;
92  }

References com.cliffc.aa.type.TypeAry._elem.

Referenced by com.cliffc.aa.node.MemPrimNode.LValueRead.value().

Here is the caller graph for this function:

◆ make() [1/2]

static TypeAry com.cliffc.aa.type.TypeAry.make ( String  name,
boolean  any,
TypeInt  sz,
Type  elem,
TypeObj  stor 
)
static

Definition at line 38 of file TypeAry.java.

38  {
39  TypeAry t1 = POOLS[TARY].malloc();
40  return t1.init(name,any,sz,elem,stor).hashcons_free();
41  }

References com.cliffc.aa.type.TypeAry.init().

Referenced by com.cliffc.aa.type.TypeAry.crush(), com.cliffc.aa.TestParse.testParse14(), com.cliffc.aa.Parse.type0(), com.cliffc.aa.type.TypeAry.update(), com.cliffc.aa.node.NewAryNode.NewAry.valueobj(), and com.cliffc.aa.type.TypeAry.xmeet().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make() [2/2]

static TypeAry com.cliffc.aa.type.TypeAry.make ( TypeInt  sz,
Type  elem,
TypeObj  stor 
)
static

Definition at line 43 of file TypeAry.java.

43 { return make("",false,sz,elem,stor); }

References com.cliffc.aa.type.TypeAry.make().

Referenced by com.cliffc.aa.type.TypeAry.make().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ may_be_con()

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.may_be_con
inherited

Definition at line 78 of file TypeObj.java.

78 { return _any; }

◆ may_nil()

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.may_nil
inherited

Definition at line 81 of file TypeObj.java.

81 { return false; }

◆ must_nil()

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.must_nil
inherited

Definition at line 80 of file TypeObj.java.

80 { return false; }

◆ rdual()

TypeAry com.cliffc.aa.type.TypeAry.rdual ( )
package

Definition at line 51 of file TypeAry.java.

51  {
52  if( _dual != null ) return _dual;
53  TypeAry dual = _dual = xdual();
54  dual._dual = this;
55  dual._hash = dual.compute_hash();
56  return dual;
57  }

References com.cliffc.aa.type.TypeAry.compute_hash(), and com.cliffc.aa.type.TypeAry.xdual().

Here is the call graph for this function:

◆ remove_other_flds()

TypeAry com.cliffc.aa.type.TypeAry.remove_other_flds ( String  fld,
Type  live 
)
package

Definition at line 102 of file TypeAry.java.

102  {
103  return ARY;
104  }

References com.cliffc.aa.type.TypeAry.ARY.

◆ str()

SB com.cliffc.aa.type.TypeAry.str ( SB  sb,
VBitSet  dups,
TypeMem  mem,
boolean  debug 
)

Definition at line 27 of file TypeAry.java.

27  {
28  if( _any ) sb.p('~');
29  sb.p('[');
30  if( _size!=null && _size != TypeInt.INT64 ) sb.p(_size);
31  sb.p(']');
32  if( _elem !=null ) sb.p(_elem);
33  if( _elem != _stor && _stor!=null ) sb.p('/').p(_stor);
34  return sb;
35  }

References com.cliffc.aa.type.TypeObj< TypeAry >._any, com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.TypeAry._size, com.cliffc.aa.type.TypeAry._stor, com.cliffc.aa.type.TypeInt.INT64, and com.cliffc.aa.util.SB.p().

Here is the call graph for this function:

◆ update() [1/2]

TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.update ( Access  fin,
String  fld,
Type  val 
)
inherited

Definition at line 67 of file TypeObj.java.

67 { return this; }

◆ update() [2/2]

TypeObj com.cliffc.aa.type.TypeAry.update ( TypeInt  idx,
Type  val 
)

Definition at line 93 of file TypeAry.java.

93  {
94  if( idx.above_center() ) return this; // Nothing updates
95  if( val.isa(_elem) ) return this; // No change
96  Type elem = _elem.meet(val); // Worse-case
97  TypeInt size = _size; // TypeInt size = (TypeInt)_size.meet(idx); // CNC - Not inferring array size yet
98  return make(size,elem,TypeObj.OBJ);
99  }

References com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.TypeAry._size, com.cliffc.aa.type.TypeInt.above_center(), com.cliffc.aa.type.Type< T extends Type< T >.isa(), com.cliffc.aa.type.TypeAry.make(), com.cliffc.aa.type.Type< T extends Type< T >.meet(), and com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.OBJ.

Referenced by com.cliffc.aa.type.TypeObj< TypeStruct >.update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ walk()

void com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.walk ( Predicate< Type p)
inherited

Definition at line 82 of file TypeObj.java.

82 { p.test(this); }

◆ widen()

TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.widen
inherited

Definition at line 76 of file TypeObj.java.

76 { return ISUSED; }

◆ xdual()

TypeAry com.cliffc.aa.type.TypeAry.xdual ( )
protected

Definition at line 49 of file TypeAry.java.

49 { return new TypeAry().init(_name, !_any,_size.dual(),_elem.dual(),(TypeObj)_stor.dual()); }

References com.cliffc.aa.type.TypeObj< TypeAry >._any, com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.TypeAry._size, com.cliffc.aa.type.TypeAry._stor, com.cliffc.aa.type.Type< T extends Type< T >.dual(), and com.cliffc.aa.type.TypeAry.init().

Referenced by com.cliffc.aa.type.TypeAry.rdual().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xmeet()

Type com.cliffc.aa.type.TypeAry.xmeet ( Type  t)
protected

Definition at line 58 of file TypeAry.java.

58  {
59  switch( t._type ) {
60  case TARY: break;
61  case TSTR:
62  case TLIVE:
63  case TSTRUCT:return OBJ;
64  case TOBJ: return t.xmeet(this);
65  case TFUNSIG:
66  case TTUPLE:
67  case TFUNPTR:
68  case TMEMPTR:
69  case TFLT:
70  case TINT:
71  case TRPC:
72  case TMEM: return ALL;
73  default: throw typerr(t);
74  }
75  TypeAry ta = (TypeAry)t;
76  boolean any = _any&ta._any;
77  TypeInt size = (TypeInt)_size.meet(ta._size);
78  Type elem = _elem.meet(ta._elem);
79  TypeObj stor = (TypeObj)_stor.meet(ta._stor);
80  return make("",any,size,elem,stor);
81  }

References com.cliffc.aa.type.TypeObj< TypeAry >._any, com.cliffc.aa.type.TypeObj< O extends TypeObj< O >._any, com.cliffc.aa.type.TypeAry._elem, com.cliffc.aa.type.TypeAry._size, com.cliffc.aa.type.TypeAry._stor, com.cliffc.aa.type.Type< T extends Type< T >._type, com.cliffc.aa.type.TypeAry.make(), com.cliffc.aa.type.Type< T extends Type< T >.meet(), com.cliffc.aa.type.TypeObj< TypeAry >.OBJ, and com.cliffc.aa.type.Type< T extends Type< T >.xmeet().

Here is the call graph for this function:

Member Data Documentation

◆ _any

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >._any
packageinherited

Definition at line 16 of file TypeObj.java.

◆ _elem

◆ _size

◆ _stor

◆ _use

boolean com.cliffc.aa.type.TypeObj< O extends TypeObj< O >._use
packageinherited

Definition at line 17 of file TypeObj.java.

◆ ARY

◆ ARY0

final TypeAry com.cliffc.aa.type.TypeAry.ARY0 = make("",false,TypeInt.INT64 ,Type.XNIL ,TypeObj.OBJ )
static

Definition at line 45 of file TypeAry.java.

Referenced by com.cliffc.aa.node.NewAryNode.add_libs().

◆ BYTES

final TypeAry com.cliffc.aa.type.TypeAry.BYTES = make("",false,TypeInt.con(3),TypeInt.INT8,TypeObj.OBJ )
static

Definition at line 46 of file TypeAry.java.

◆ ISUSED

final TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.ISUSED
staticinherited

Definition at line 45 of file TypeObj.java.

◆ OBJ

final TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.OBJ
staticinherited

Definition at line 44 of file TypeObj.java.

◆ TYPES

final TypeAry [] com.cliffc.aa.type.TypeAry.TYPES = new TypeAry[]{ARY,ARY0,BYTES}
staticpackage

Definition at line 47 of file TypeAry.java.

◆ UNUSED

final TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.UNUSED
staticinherited

Definition at line 46 of file TypeObj.java.

◆ XOBJ

final TypeObj com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.XOBJ
staticinherited

Definition at line 47 of file TypeObj.java.


The documentation for this class was generated from the following file:
com.cliffc.aa.type.TypeObj< TypeAry >::_any
boolean _any
Definition: TypeObj.java:16
com.cliffc.aa.type.Type.SCALAR
static final Type SCALAR
Definition: Type.java:328
com.cliffc.aa.type.Type._hash
int _hash
Definition: Type.java:97
com.cliffc.aa.type.TypeAry._elem
Type _elem
Definition: TypeAry.java:9
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.type.TypeInt.INT64
static final TypeInt INT64
Definition: TypeInt.java:39
com.cliffc.aa.type.TypeObj< TypeAry >::OBJ
static final TypeObj OBJ
Definition: TypeObj.java:44
com.cliffc.aa.type.TypeAry.ARY
static final TypeAry ARY
Definition: TypeAry.java:44
com.cliffc.aa.type.TypeAry._size
TypeInt _size
Definition: TypeAry.java:8
com.cliffc.aa.type.TypeAry._stor
TypeObj _stor
Definition: TypeAry.java:10
com.cliffc.aa.type.TypeAry.make
static TypeAry make(String name, boolean any, TypeInt sz, Type elem, TypeObj stor)
Definition: TypeAry.java:38
com.cliffc.aa.type.TypeAry.equals
boolean equals(Object o)
Definition: TypeAry.java:20
com.cliffc.aa.type.TypeObj< TypeAry >::ISUSED
static final TypeObj ISUSED
Definition: TypeObj.java:45
com.cliffc.aa.type.TypeAry.xdual
TypeAry xdual()
Definition: TypeAry.java:49
com.cliffc.aa.type.Type.dual
final T dual()
Definition: Type.java:361
com.cliffc.aa.type.TypeObj< TypeAry >::_use
boolean _use
Definition: TypeObj.java:17
com.cliffc.aa.type.TypeObj.xmeet
Type xmeet(Type t)
Definition: TypeObj.java:53