aa
TypeRPC.java
Go to the documentation of this file.
1 package com.cliffc.aa.type;
2 
3 import com.cliffc.aa.util.SB;
4 import com.cliffc.aa.util.VBitSet;
5 
6 // Return-Program-Counters, or Continuation constants
7 public class TypeRPC extends Type<TypeRPC> {
8  private BitsRPC _rpcs; //
9 
10  private TypeRPC init( BitsRPC rpcs ) { super.init(TRPC,""); _rpcs = rpcs; return this; }
11  @Override public int compute_hash( ) { return ((TRPC + _rpcs._hash)<<1)|1; }
12  @Override public boolean equals( Object o ) {
13  if( this==o ) return true;
14  if( !(o instanceof TypeRPC) ) return false;
15  TypeRPC tf = (TypeRPC)o;
16  return _rpcs==tf._rpcs;
17  }
18  // Never part of a cycle, so the normal check works
19  @Override public boolean cycle_equals( Type o ) { return equals(o); }
20  @Override public SB str( SB sb, VBitSet dups, TypeMem mem, boolean debug ) {
21  return _rpcs.str(sb.p("#"));
22  }
23 
24  static { new Pool(TRPC,new TypeRPC()); }
25  public static TypeRPC make( BitsRPC rpcs ) {
26  TypeRPC t1 = POOLS[TRPC].malloc();
27  return t1.init(rpcs).hashcons_free();
28  }
29 
30  public static TypeRPC make( int rpc ) { return make(BitsRPC.make0(rpc)); }
31  public static final TypeRPC ALL_CALL = make(BitsRPC.FULL);
32  private static final TypeRPC RPC1 = make(BitsRPC.new_rpc(BitsRPC.ALL));
33  static final TypeRPC[] TYPES = new TypeRPC[]{RPC1,ALL_CALL};
34 
35  @Override protected TypeRPC xdual() { return new TypeRPC().init(_rpcs.dual()); }
36  @Override protected Type xmeet( Type t ) {
37  switch( t._type ) {
38  case TRPC: break;
39  case TFUNPTR:
40  case TMEMPTR:
41  case TFLT:
42  case TINT: return cross_nil(t);
43  case TFUNSIG:
44  case TTUPLE:
45  case TARY:
46  case TLIVE:
47  case TOBJ:
48  case TSTR:
49  case TSTRUCT:
50  case TMEM: return ALL;
51  default: throw typerr(t); // All else should not happen
52  }
53  TypeRPC tf = (TypeRPC)t;
54  return make(_rpcs.meet( tf._rpcs ));
55  }
56 
57  public int rpc() { return _rpcs.getbit(); }
58  public boolean test(int rpc) { return _rpcs.test(rpc); }
59  @Override public Type widen() { return ALL_CALL; }
60  @Override public boolean above_center() { return _rpcs.above_center(); }
61  // RPCs represent *classes* of return pointers and are thus never constants.
62  // TODO: This is weak, since call-sites are only rarely cloned so typically a
63  // RPC refers to the single call-site - but we can only strengthen this is we
64  // declare a call-site to be uncloneable.
65  // nil is a constant.
66  @Override public boolean may_be_con() { return may_nil(); }
67  @Override public boolean is_con() { return _rpcs.abit()==0; } // only nil
68  @Override public boolean must_nil() { return _rpcs.test(0) && !above_center(); }
69  @Override public boolean may_nil() { return _rpcs.may_nil(); }
70  @Override Type not_nil() {
71  BitsRPC bits = _rpcs.not_nil();
72  return bits==_rpcs ? this : make(bits);
73  }
74  @Override public Type meet_nil(Type nil) {
75  // See testLattice15.
76  if( _rpcs.isa(BitsRPC.NIL.dual()) ) return nil;
77  return make(_rpcs.meet(BitsRPC.NIL));
78  }
79 }
com.cliffc.aa.type.Bits.dual
B dual()
Definition: Bits.java:368
com.cliffc.aa.type.Type< TypeRPC >::TLIVE
static final byte TLIVE
Definition: Type.java:276
com.cliffc.aa.type.BitsRPC.ALL
static final int ALL
Definition: BitsRPC.java:25
com.cliffc.aa.type.TypeRPC.make
static TypeRPC make(int rpc)
Definition: TypeRPC.java:30
com.cliffc.aa.type.TypeRPC._rpcs
BitsRPC _rpcs
Definition: TypeRPC.java:8
com.cliffc.aa.type.Bits.str
SB str(SB sb)
Definition: Bits.java:134
com.cliffc.aa.type.Type< TypeRPC >::TMEMPTR
static final byte TMEMPTR
Definition: Type.java:273
com.cliffc.aa.type.TypeRPC.make
static TypeRPC make(BitsRPC rpcs)
Definition: TypeRPC.java:25
com.cliffc.aa.type.Type< TypeRPC >::typerr
RuntimeException typerr(Type t)
Definition: Type.java:947
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.BitsRPC.make0
static BitsRPC make0(int bit)
Definition: BitsRPC.java:41
com.cliffc.aa.type.TypeRPC.RPC1
static final TypeRPC RPC1
Definition: TypeRPC.java:32
com.cliffc
com.cliffc.aa.type.TypeRPC.rpc
int rpc()
Definition: TypeRPC.java:57
com.cliffc.aa.type.TypeRPC.ALL_CALL
static final TypeRPC ALL_CALL
Definition: TypeRPC.java:31
com.cliffc.aa.util
Definition: AbstractEntry.java:1
com.cliffc.aa.type.TypeRPC.xdual
TypeRPC xdual()
Definition: TypeRPC.java:35
com.cliffc.aa.type.TypeRPC.is_con
boolean is_con()
Definition: TypeRPC.java:67
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.type.Type< TypeRPC >::TSTR
static final byte TSTR
Definition: Type.java:270
com.cliffc.aa.type.Type._type
byte _type
Definition: Type.java:98
com.cliffc.aa.type.TypeRPC.above_center
boolean above_center()
Definition: TypeRPC.java:60
com.cliffc.aa.type.TypeRPC.meet_nil
Type meet_nil(Type nil)
Definition: TypeRPC.java:74
com.cliffc.aa.type.TypeRPC.must_nil
boolean must_nil()
Definition: TypeRPC.java:68
com.cliffc.aa.type.TypeRPC.may_be_con
boolean may_be_con()
Definition: TypeRPC.java:66
com.cliffc.aa.type.Bits.test
static boolean test(long[] bits, int i)
Definition: Bits.java:224
com.cliffc.aa.type.Type< TypeRPC >::TFUNPTR
static final byte TFUNPTR
Definition: Type.java:274
com.cliffc.aa.type.Type< TypeRPC >::TINT
static final byte TINT
Definition: Type.java:263
com.cliffc.aa.type.TypeRPC.cycle_equals
boolean cycle_equals(Type o)
Definition: TypeRPC.java:19
com.cliffc.aa.type.BitsRPC.new_rpc
static int new_rpc(int par)
Definition: BitsRPC.java:26
com.cliffc.aa.type.Type< TypeRPC >::ALL
static final Type ALL
Definition: Type.java:324
com.cliffc.aa.type.Type< TypeRPC >::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.Bits.above_center
boolean above_center()
Definition: Bits.java:204
com.cliffc.aa.type.Type< TypeRPC >::TTUPLE
static final byte TTUPLE
Definition: Type.java:266
com.cliffc.aa.type.TypeRPC.test
boolean test(int rpc)
Definition: TypeRPC.java:58
com.cliffc.aa.type.Type< TypeRPC >::TSTRUCT
static final byte TSTRUCT
Definition: Type.java:268
com.cliffc.aa.type.BitsRPC
Definition: BitsRPC.java:8
com.cliffc.aa.type.Bits._hash
int _hash
Definition: Bits.java:70
com.cliffc.aa.type.Type< TypeRPC >::cross_nil
final Type cross_nil(Type t)
Definition: Type.java:865
com.cliffc.aa.type.TypeRPC.not_nil
Type not_nil()
Definition: TypeRPC.java:70
com.cliffc.aa.type.Bits.getbit
int getbit()
Definition: Bits.java:202
com.cliffc.aa.type.Type< TypeRPC >::TRPC
static final byte TRPC
Definition: Type.java:265
com.cliffc.aa.type.TypeRPC.TYPES
static final TypeRPC[] TYPES
Definition: TypeRPC.java:33
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
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.TypeRPC.str
SB str(SB sb, VBitSet dups, TypeMem mem, boolean debug)
Definition: TypeRPC.java:20
com.cliffc.aa.type.TypeRPC.compute_hash
int compute_hash()
Definition: TypeRPC.java:11
com.cliffc.aa.type.TypeRPC.init
TypeRPC init(BitsRPC rpcs)
Definition: TypeRPC.java:10
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.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.TypeRPC.xmeet
Type xmeet(Type t)
Definition: TypeRPC.java:36
com.cliffc.aa.type.TypeRPC
Definition: TypeRPC.java:7
com.cliffc.aa.type.BitsRPC.FULL
static final BitsRPC FULL
Definition: BitsRPC.java:33
com.cliffc.aa.type.TypeRPC.may_nil
boolean may_nil()
Definition: TypeRPC.java:69
com.cliffc.aa.type.Type< TypeRPC >::POOLS
static final Pool[] POOLS
Definition: Type.java:281
com.cliffc.aa.type.Type< TypeRPC >::TOBJ
static final byte TOBJ
Definition: Type.java:267
com.cliffc.aa.type.TypeRPC.equals
boolean equals(Object o)
Definition: TypeRPC.java:12
com.cliffc.aa.type.Bits.not_nil
B not_nil()
Definition: Bits.java:246
com.cliffc.aa.type.BitsRPC.NIL
static final BitsRPC NIL
Definition: BitsRPC.java:35
com.cliffc.aa.type.Bits.meet
B meet(final B bs)
Definition: Bits.java:298
com
com.cliffc.aa.type.TypeRPC.widen
Type widen()
Definition: TypeRPC.java:59
com.cliffc.aa.type.Type< TypeRPC >::TFUNSIG
static final byte TFUNSIG
Definition: Type.java:275
com.cliffc.aa.type.Type< TypeRPC >::TARY
static final byte TARY
Definition: Type.java:269
com.cliffc.aa.type.Type< TypeRPC >::TFLT
static final byte TFLT
Definition: Type.java:264