aa
BitsAlias.java
Go to the documentation of this file.
1 package com.cliffc.aa.type;
2 
3 import java.util.HashMap;
4 
5 // Alias Bits supporting a lattice; immutable; hash-cons'd.
6 //
7 // Alias Bits map 1-to-1 with allocation sites (NewNode)
8 public class BitsAlias extends Bits<BitsAlias> {
9  // Intern: lookup and return an existing Bits or install in hashmap and
10  // return a new Bits. Overridden in subclasses to make type-specific Bits.
11  private static final HashMap<BitsAlias,BitsAlias> INTERN = new HashMap<>();
12  private static BitsAlias FREE=null;
13  @Override BitsAlias make_impl(int con, long[] bits ) {
14  BitsAlias b1 = FREE;
15  if( b1 == null ) b1 = new BitsAlias();
16  else FREE = null;
17  b1.init(con,bits);
18  BitsAlias b2 = INTERN.get(b1);
19  if( b2 != null ) { FREE = b1; return b2; }
20  else { INTERN.put(b1,b1); return b1; }
21  }
22 
23  static final Bits.Tree<BitsAlias> TREE = new Bits.Tree<>();
24  @Override public Tree<BitsAlias> tree() { return TREE; }
25  public static final int ALL, ARY, STR, REC, ABC, AARY;
28 
29  static {
30  // The All-Memory alias class
31  ALL = TREE.split(0); // Split from 0
32  NZERO = new BitsAlias().make_impl(ALL,null);
33  FULL = NZERO.meet_nil(); // All aliases, with a low nil
34  ANY = FULL.dual(); // Precompute dual
35  NIL = make0(0); // Ugly but NIL has a dual, and this is "low" NIL
36  XNIL = NIL.dual(); //
37  EMPTY = NZERO.make(); // No bits; its its own dual
38  // Split All-Memory into Records/Tuples/Structs and Arrays (including Strings).
39  // Everything falls into one of these two camps.
42 
43  // Arrays
44  ARY = type_alias(ALL);
45  // Split Arrays into Strings (vs other arrays)
48  ABC = type_alias(STR);
49 
50  AARY = type_alias(ARY);
51  ARYBITS = make0(AARY);
53  }
54  // True if kid is a child or equal to parent
55  public static boolean is_parent( int par, int kid ) { return TREE.is_parent(par,kid); }
56  // True if this alias has been split thus has children
57  public static boolean is_parent( int idx ) { return TREE.is_parent(idx); }
58  // Return parent alias from child alias.
59  public static int parent( int kid ) { return TREE.parent(kid); }
60  // Return two child aliases from the one parent at ary[1] and ary[2]
61  public static int[] get_kids( int par ) { return TREE.get_kids(par); }
62  // Fast reset of parser state between calls to Exec
63  public static void init0() { TREE.init0(); }
64  public static void reset_to_init0() { TREE.reset_to_init0(); }
65  // Iterate over children
66  public static int next_kid( int alias, int kid ) { return TREE.next_kid(alias,kid); }
67 
68  @Override public BitsAlias ALL() { return FULL; }
69  @Override public BitsAlias ANY() { return ANY ; }
70  @Override public BitsAlias EMPTY() { return EMPTY ; }
71 
72  public static BitsAlias make0( int bit ) { return NZERO.make(bit); }
73  public BitsAlias or( int bit ) { return set(bit); }
74 
75  public static int new_alias(int par) { return set_alias(par); }
76  public static int type_alias(int par) { return set_alias(par); }
77  private static int set_alias(int par) { return TREE.split(par); }
78 }
com.cliffc.aa.type.Bits< BitsAlias >::bits
static long[] bits(int b)
Definition: Bits.java:283
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.BitsAlias.RECORD_BITS0
static BitsAlias RECORD_BITS0
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.ANY
BitsAlias ANY()
Definition: BitsAlias.java:69
com.cliffc.aa.type.BitsAlias.set_alias
static int set_alias(int par)
Definition: BitsAlias.java:77
com.cliffc.aa.type.BitsAlias.AARY
static final int AARY
Definition: BitsAlias.java:25
com.cliffc.aa.type.BitsAlias.ARY
static final int ARY
Definition: BitsAlias.java:25
com.cliffc.aa.type.Bits.make
B make(boolean any, long[] bits)
Definition: Bits.java:154
com.cliffc.aa.type.BitsAlias.type_alias
static int type_alias(int par)
Definition: BitsAlias.java:76
com.cliffc.aa.type.BitsAlias.is_parent
static boolean is_parent(int idx)
Definition: BitsAlias.java:57
com.cliffc.aa.type.BitsAlias.INTERN
static final HashMap< BitsAlias, BitsAlias > INTERN
Definition: BitsAlias.java:11
com.cliffc.aa.type.BitsAlias.ANY
static BitsAlias ANY
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.type.BitsAlias.make_impl
BitsAlias make_impl(int con, long[] bits)
Definition: BitsAlias.java:13
com.cliffc.aa.type.BitsAlias.TREE
static final Bits.Tree< BitsAlias > TREE
Definition: BitsAlias.java:23
com.cliffc.aa.type.BitsAlias.new_alias
static int new_alias(int par)
Definition: BitsAlias.java:75
com.cliffc.aa.type.Bits.Tree
Definition: Bits.java:402
com.cliffc.aa.type.BitsAlias.REC
static final int REC
Definition: BitsAlias.java:25
com.cliffc.aa.type.BitsAlias.next_kid
static int next_kid(int alias, int kid)
Definition: BitsAlias.java:66
com.cliffc.aa.type.BitsAlias.XNIL
static BitsAlias XNIL
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.or
BitsAlias or(int bit)
Definition: BitsAlias.java:73
com.cliffc.aa.type.BitsAlias.NIL
static BitsAlias NIL
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.RECORD_BITS
static BitsAlias RECORD_BITS
Definition: BitsAlias.java:26
com.cliffc.aa.type.BitsAlias.STRBITS0
static BitsAlias STRBITS0
Definition: BitsAlias.java:26
com.cliffc.aa.type.Bits.init
void init(int con, long[] bits)
Definition: Bits.java:80
com.cliffc.aa.type.BitsAlias.tree
Tree< BitsAlias > tree()
Definition: BitsAlias.java:24
com.cliffc.aa.type.BitsAlias.ALL
static final int ALL
Definition: BitsAlias.java:25
com.cliffc.aa.type.BitsAlias.ARYBITS0
static BitsAlias ARYBITS0
Definition: BitsAlias.java:26
com.cliffc.aa.type.Bits< BitsAlias >::idx
static int idx(long i)
Definition: Bits.java:199
com.cliffc.aa.type.Bits.meet_nil
B meet_nil()
Definition: Bits.java:212
com.cliffc.aa.type.BitsAlias.ABC
static final int ABC
Definition: BitsAlias.java:25
com.cliffc.aa.type.Bits
Definition: Bits.java:61
com.cliffc.aa.type.BitsAlias.parent
static int parent(int kid)
Definition: BitsAlias.java:59
com.cliffc.aa.type.BitsAlias.EMPTY
static BitsAlias EMPTY
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.FREE
static BitsAlias FREE
Definition: BitsAlias.java:12
com.cliffc.aa.type.BitsAlias.init0
static void init0()
Definition: BitsAlias.java:63
com.cliffc.aa.type.BitsAlias.ALL
BitsAlias ALL()
Definition: BitsAlias.java:68
com.cliffc.aa.type.BitsAlias.make0
static BitsAlias make0(int bit)
Definition: BitsAlias.java:72
com.cliffc.aa.type.BitsAlias.STRBITS
static BitsAlias STRBITS
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.ARYBITS
static BitsAlias ARYBITS
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.get_kids
static int[] get_kids(int par)
Definition: BitsAlias.java:61
com.cliffc.aa.type.BitsAlias.NZERO
static BitsAlias NZERO
Definition: BitsAlias.java:27
com.cliffc.aa.type.BitsAlias.EMPTY
BitsAlias EMPTY()
Definition: BitsAlias.java:70
com.cliffc.aa.type.BitsAlias.STR
static final int STR
Definition: BitsAlias.java:25
com.cliffc.aa.type.BitsAlias.reset_to_init0
static void reset_to_init0()
Definition: BitsAlias.java:64
com.cliffc.aa.type.BitsAlias.is_parent
static boolean is_parent(int par, int kid)
Definition: BitsAlias.java:55