aa
com.cliffc.aa.HM.HM6.T2 Class Reference
Collaboration diagram for com.cliffc.aa.HM.HM6.T2:
[legend]

Public Member Functions

String p ()
 
String toString ()
 

Package Functions

boolean _cycle_equals (T2 t)
 
VBitSet _get_dups (VBitSet visit, VBitSet dups)
 
boolean _nongen_in (VStack nongen)
 
boolean _occurs_in (Syntax syn)
 
boolean _occurs_in_type (T2 x)
 
void add_deps_work (Worklist work)
 
T2 args (int i)
 
T2 copy ()
 
boolean cycle_equals (T2 t)
 
T2 find ()
 
boolean fresh_unify (T2 that, VStack nongen, Worklist work)
 
VBitSet get_dups (VBitSet dups)
 
boolean is_base ()
 
boolean is_fun ()
 
boolean is_leaf ()
 
boolean isa (String name)
 
boolean no_uf ()
 
boolean nongen_in (VStack syn)
 
boolean occurs_in (Syntax syn)
 
boolean occurs_in_type (T2 x)
 
String p (VBitSet dups)
 
boolean push_update (Ident a)
 
SB str (SB sb, VBitSet visit, VBitSet dups)
 
boolean unify (T2 that, Worklist work)
 
boolean union (T2 that, Worklist work)
 

Static Package Functions

static T2 make_base (Type con)
 
static T2 make_fun (T2... args)
 
static T2 make_leaf ()
 
static T2 prim (String name, T2... args)
 
static void reset ()
 

Package Attributes

T2[] _args
 
Type _con
 
Ary< Ident_deps
 
final String _name
 
final int _uid
 

Static Package Attributes

static final VBitSet UPDATE_VISIT = new VBitSet()
 

Private Member Functions

 T2 (@NotNull String name, Type con, T2 @NotNull ... args)
 
T2 _fresh (VStack nongen)
 
boolean _fresh_unify (T2 that, VStack nongen, Worklist work)
 
SB _p (SB sb, VBitSet visit, VBitSet dups)
 
boolean _unify (T2 that, Worklist work)
 
void add_deps_work_impl (Worklist work)
 
long dbl_uid (T2 t)
 
boolean fresh_base (T2 that, Worklist work)
 
void push_update_impl (Ident a)
 
boolean unify_base (T2 that, Worklist work)
 
boolean vput (T2 that, boolean progress)
 

Static Private Member Functions

static SB str (SB sb, VBitSet visit, T2 t, VBitSet dups)
 

Static Private Attributes

static final HashMap< T2, T2CDUPS = new HashMap<>()
 
static int CNT =0
 
static final HashMap< Long, T2DUPS = new HashMap<>()
 
static final VBitSet ODUPS = new VBitSet()
 
static final HashMap< T2, T2VARS = new HashMap<>()
 

Detailed Description

Definition at line 503 of file HM6.java.

Constructor & Destructor Documentation

◆ T2()

com.cliffc.aa.HM.HM6.T2.T2 ( @NotNull String  name,
Type  con,
T2 @NotNull ...  args 
)
private

Definition at line 528 of file HM6.java.

528  {
529  _uid = CNT++;
530  _name= name;
531  _con = con;
532  _args= args;
533  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._con, com.cliffc.aa.HM.HM6.T2._name, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.args(), and com.cliffc.aa.HM.HM6.T2.CNT.

Referenced by com.cliffc.aa.HM.HM6.T2.copy(), com.cliffc.aa.HM.HM6.T2.make_base(), com.cliffc.aa.HM.HM6.T2.make_fun(), com.cliffc.aa.HM.HM6.T2.make_leaf(), and com.cliffc.aa.HM.HM6.T2.prim().

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

Member Function Documentation

◆ _cycle_equals()

boolean com.cliffc.aa.HM.HM6.T2._cycle_equals ( T2  t)
package

Definition at line 770 of file HM6.java.

770  {
771  assert no_uf() && t.no_uf();
772  if( this==t ) return true;
773  if( is_base() && t.is_base() )
774  return _con==t._con; // Base-cases have to be completely identical
775  if( !Util.eq(_name,t._name) || // Wrong type-var names
776  _args.length != t._args.length ) // Mismatched sizes
777  return false;
778  if( _args==t._args ) return true;
779  // Cycles stall the equal/unequal decision until we see a difference.
780  T2 tc = CDUPS.get(this);
781  if( tc!=null )
782  return tc==t; // Cycle check; true if both cycling the same
783  CDUPS.put(this,t);
784  for( int i=0; i<_args.length; i++ )
785  if( !args(i)._cycle_equals(t.args(i)) )
786  return false;
787  return true;
788  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._con, com.cliffc.aa.HM.HM6.T2._name, com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.CDUPS, com.cliffc.aa.util.Util.eq(), com.cliffc.aa.HM.HM6.T2.is_base(), and com.cliffc.aa.HM.HM6.T2.no_uf().

Referenced by com.cliffc.aa.HM.HM6.T2.cycle_equals().

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

◆ _fresh()

T2 com.cliffc.aa.HM.HM6.T2._fresh ( VStack  nongen)
private

Definition at line 697 of file HM6.java.

697  {
698  assert no_uf();
699  T2 rez = VARS.get(this);
700  if( rez!=null ) return rez; // Been there, done that
701 
702  if( is_leaf() ) {
703  // If occurs_in lexical scope, keep same variable, else make a new leaf
704  T2 t = nongen_in(nongen) ? this : T2.make_leaf();
705  VARS.put(this,t);
706  return t;
707  } else { // Structure is deep-replicated
708  T2 t = copy();
709  VARS.put(this,t); // Stop cyclic structure looping
710  for( int i=0; i<_args.length; i++ )
711  t._args[i] = args(i)._fresh(nongen);
712  return t;
713  }
714  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._fresh(), com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.copy(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.HM.HM6.T2.make_leaf(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.HM.HM6.T2.nongen_in(), and com.cliffc.aa.HM.HM6.T2.VARS.

Referenced by com.cliffc.aa.HM.HM6.T2._fresh(), and com.cliffc.aa.HM.HM6.T2._fresh_unify().

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

◆ _fresh_unify()

boolean com.cliffc.aa.HM.HM6.T2._fresh_unify ( T2  that,
VStack  nongen,
Worklist  work 
)
private

Definition at line 663 of file HM6.java.

663  {
664  assert no_uf() && that.no_uf();
665  T2 prior = VARS.get(this);
666  if( prior!=null ) // Been there, done that
667  return prior.find()._unify(that,work); // Also 'prior' needs unification with 'that'
668  if( cycle_equals(that) ) return vput(that,false);
669 
670  // Attempting to pre-compute occurs_in, by computing 'is_fresh' in the
671  // Ident.hm() call does NOT work. The 'is_fresh' is for the top-layer
672  // only, not the internal layers. As soon as we structural recurse down
673  // a layer, 'is_fresh' does not correlate with an occurs_in check.
674  if( nongen_in(nongen) ) return vput(that,_unify(that,work)); // Famous 'occurs-check', switch to normal unify
675  if( this.is_leaf() ) return vput(that,false); // Lazy map LHS tvar to RHS
676  if( that.is_leaf() ) // RHS is a tvar; union with a deep copy of LHS
677  return work==null || vput(that,that.union(_fresh(nongen),work));
678  // Bases MEET cons in RHS
679  if( is_base() && that.is_base() ) return vput(that,fresh_base(that,work));
680 
681  if( !Util.eq(_name,that._name) ||
682  _args.length != that._args.length )
683  throw new RuntimeException("Cannot unify "+this+" and "+that);
684 
685  // Structural recursion unification, lazy on LHS
686  boolean progress = vput(that,false); // Early set, to stop cycles
687  for( int i=0; i<_args.length; i++ ) {
688  progress |= args(i)._fresh_unify(that.args(i),nongen,work);
689  if( progress && work==null ) return true;
690  }
691  return progress;
692  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._fresh(), com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2._name, com.cliffc.aa.HM.HM6.T2._unify(), com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.cycle_equals(), com.cliffc.aa.util.Util.eq(), com.cliffc.aa.HM.HM6.T2.find(), com.cliffc.aa.HM.HM6.T2.fresh_base(), com.cliffc.aa.HM.HM6.T2.is_base(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.HM.HM6.T2.nongen_in(), com.cliffc.aa.HM.HM6.T2.union(), com.cliffc.aa.HM.HM6.T2.VARS, and com.cliffc.aa.HM.HM6.T2.vput().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify(), and com.cliffc.aa.HM.HM6.T2.fresh_unify().

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

◆ _get_dups()

VBitSet com.cliffc.aa.HM.HM6.T2._get_dups ( VBitSet  visit,
VBitSet  dups 
)
package

Definition at line 824 of file HM6.java.

824  {
825  if( visit.tset(_uid) && no_uf() ) dups.set(_uid);
826  else
827  for( T2 t : _args )
828  if( t!=null )
829  t._get_dups(visit,dups);
830  return dups;
831  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.no_uf(), and com.cliffc.aa.util.VBitSet.tset().

Referenced by com.cliffc.aa.HM.HM6.T2.get_dups().

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

◆ _nongen_in()

boolean com.cliffc.aa.HM.HM6.T2._nongen_in ( VStack  nongen)
package

Definition at line 755 of file HM6.java.

755  {
756  for( T2 t2 : nongen )
757  if( _occurs_in_type(t2.find()) )
758  return true;
759  return false;
760  }

References com.cliffc.aa.HM.HM6.T2._occurs_in_type().

Referenced by com.cliffc.aa.HM.HM6.T2.nongen_in().

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

◆ _occurs_in()

boolean com.cliffc.aa.HM.HM6.T2._occurs_in ( Syntax  syn)
package

Definition at line 730 of file HM6.java.

730  {
731  for( ; syn!=null; syn=syn._par )
732  if( _occurs_in_type(syn.find()) )
733  return true;
734  return false;
735  }

References com.cliffc.aa.HM.HM6.T2._occurs_in_type(), com.cliffc.aa.HM.HM6.Syntax._par, and com.cliffc.aa.HM.HM6.Syntax.find().

Referenced by com.cliffc.aa.HM.HM6.T2.occurs_in().

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

◆ _occurs_in_type()

boolean com.cliffc.aa.HM.HM6.T2._occurs_in_type ( T2  x)
package

Definition at line 737 of file HM6.java.

737  {
738  assert no_uf() && x.no_uf();
739  if( x==this ) return true;
740  if( ODUPS.tset(x._uid) ) return false; // Been there, done that
741  if( !x.is_leaf() )
742  for( int i=0; i<x._args.length; i++ )
743  if( _occurs_in_type(x.args(i)) )
744  return true;
745  return false;
746  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.HM.HM6.T2.ODUPS, and com.cliffc.aa.util.VBitSet.tset().

Referenced by com.cliffc.aa.HM.HM6.T2._nongen_in(), com.cliffc.aa.HM.HM6.T2._occurs_in(), and com.cliffc.aa.HM.HM6.T2.occurs_in_type().

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

◆ _p()

SB com.cliffc.aa.HM.HM6.T2._p ( SB  sb,
VBitSet  visit,
VBitSet  dups 
)
private

Definition at line 862 of file HM6.java.

862  {
863  assert no_uf();
864  if( is_base() ) return sb.p(_con instanceof TypeMemPtr ? "str" : _con.toString() );
865  if( is_leaf() ) return sb.p(_name);
866  boolean dup = dups.get(_uid);
867  if( dup ) sb.p('$').p(_uid);
868  if( visit.tset(_uid) && dup ) return sb;
869  if( dup ) sb.p(':');
870  if( is_fun() ) {
871  sb.p("{ ");
872  for( int i=0; i<_args.length-1; i++ )
873  args(i)._p(sb,visit,dups).p(" ");
874  return args(_args.length-1)._p(sb.p("-> "),visit,dups).p(" }");
875  }
876  // Generic structural T2
877  sb.p("(").p(_name).p(" ");
878  for( int i=0; i<_args.length; i++ ) args(i)._p(sb,visit,dups).p(" ");
879  return sb.unchar().p(")");
880  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._con, com.cliffc.aa.HM.HM6.T2._name, com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.is_base(), com.cliffc.aa.HM.HM6.T2.is_fun(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.util.SB.p(), com.cliffc.aa.type.Type< T extends Type< T >.toString(), com.cliffc.aa.util.VBitSet.tset(), and com.cliffc.aa.util.SB.unchar().

Referenced by com.cliffc.aa.HM.HM6.T2._p(), and com.cliffc.aa.HM.HM6.T2.p().

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

◆ _unify()

boolean com.cliffc.aa.HM.HM6.T2._unify ( T2  that,
Worklist  work 
)
private

Definition at line 597 of file HM6.java.

597  {
598  assert no_uf() && that.no_uf();
599  if( this==that ) return false;
600 
601  // two leafs union in either order, so keep lower uid
602  if( is_leaf() && that.is_leaf() && _uid<that._uid ) return that.union(this,work);
603  if( is_leaf() ) return union(that,work);
604  if( that.is_leaf() ) return that.union(this,work);
605  if( is_base() && that.is_base() ) return unify_base(that,work);
606 
607  if( !Util.eq(_name,that._name) )
608  throw new RuntimeException("Cannot unify "+this+" and "+that);
609  assert _args!=that._args; // Not expecting to share _args and not 'this'
610  if( _args.length != that._args.length )
611  throw new RuntimeException("Cannot unify "+this+" and "+that);
612 
613  // Cycle check
614  long luid = dbl_uid(that);
615  T2 rez = DUPS.get(luid);
616  assert rez==null || rez==that;
617  if( rez!=null ) return false; // Been there, done that
618  DUPS.put(luid,that); // Close cycles
619 
620  // Structural recursion unification.
621  boolean progress=false;
622  for( int i=0; i<_args.length; i++ ) {
623  progress |= args(i)._unify(that.args(i),work);
624  if( progress && work!=null ) return true;
625  }
626  return progress;
627  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._name, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2._unify(), com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.dbl_uid(), com.cliffc.aa.HM.HM6.T2.DUPS, com.cliffc.aa.util.Util.eq(), com.cliffc.aa.HM.HM6.T2.is_base(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.HM.HM6.T2.unify_base(), and com.cliffc.aa.HM.HM6.T2.union().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2._unify(), and com.cliffc.aa.HM.HM6.T2.unify().

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

◆ add_deps_work()

void com.cliffc.aa.HM.HM6.T2.add_deps_work ( Worklist  work)
package

Definition at line 808 of file HM6.java.

808 { assert UPDATE_VISIT.isEmpty(); add_deps_work_impl(work); UPDATE_VISIT.clear(); }

References com.cliffc.aa.HM.HM6.T2.add_deps_work_impl(), and com.cliffc.aa.HM.HM6.T2.UPDATE_VISIT.

Referenced by com.cliffc.aa.HM.HM6.Ident.add_occurs().

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

◆ add_deps_work_impl()

void com.cliffc.aa.HM.HM6.T2.add_deps_work_impl ( Worklist  work)
private

Definition at line 809 of file HM6.java.

809  {
810  if( is_leaf() || _args.length==0 ) {
811  work.addAll(_deps);
812  } else {
813  if( UPDATE_VISIT.tset(_uid) ) return;
814  for( int i=0; i<_args.length; i++ )
815  args(i).add_deps_work_impl(work);
816  }
817  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._deps, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.add_deps_work_impl(), com.cliffc.aa.HM.HM6.Worklist.addAll(), com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.util.VBitSet.tset(), and com.cliffc.aa.HM.HM6.T2.UPDATE_VISIT.

Referenced by com.cliffc.aa.HM.HM6.T2.add_deps_work(), and com.cliffc.aa.HM.HM6.T2.add_deps_work_impl().

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

◆ args()

T2 com.cliffc.aa.HM.HM6.T2.args ( int  i)
package

Definition at line 555 of file HM6.java.

555  {
556  T2 u = _args[i];
557  T2 uu = u.find();
558  return u==uu ? uu : (_args[i]=uu);
559  }

References com.cliffc.aa.HM.HM6.T2._args, and com.cliffc.aa.HM.HM6.T2.find().

Referenced by com.cliffc.aa.HM.HM6.T2._cycle_equals(), com.cliffc.aa.HM.HM6.T2._fresh(), com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2._occurs_in_type(), com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.T2._unify(), com.cliffc.aa.HM.HM6.T2.add_deps_work_impl(), com.cliffc.aa.HM.HM6.Lambda.hm(), com.cliffc.aa.HM.HM6.Lambda2.hm(), com.cliffc.aa.HM.HM6.Apply.hm(), com.cliffc.aa.HM.HM6.T2.make_fun(), com.cliffc.aa.HM.HM6.T2.prim(), com.cliffc.aa.HM.HM6.T2.push_update_impl(), and com.cliffc.aa.HM.HM6.T2.T2().

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

◆ copy()

T2 com.cliffc.aa.HM.HM6.T2.copy ( )
package

Definition at line 526 of file HM6.java.

526 { return new T2(_name,_con,new T2[_args.length]); }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._con, com.cliffc.aa.HM.HM6.T2._name, and com.cliffc.aa.HM.HM6.T2.T2().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh().

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

◆ cycle_equals()

boolean com.cliffc.aa.HM.HM6.T2.cycle_equals ( T2  t)
package

Definition at line 764 of file HM6.java.

764  {
765  assert CDUPS.isEmpty();
766  boolean rez = _cycle_equals(t);
767  CDUPS.clear();
768  return rez;
769  }

References com.cliffc.aa.HM.HM6.T2._cycle_equals(), and com.cliffc.aa.HM.HM6.T2.CDUPS.

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify().

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

◆ dbl_uid()

long com.cliffc.aa.HM.HM6.T2.dbl_uid ( T2  t)
private

Definition at line 629 of file HM6.java.

629 { return ((long)_uid<<32)|t._uid; }

References com.cliffc.aa.HM.HM6.T2._uid.

Referenced by com.cliffc.aa.HM.HM6.T2._unify().

Here is the caller graph for this function:

◆ find()

T2 com.cliffc.aa.HM.HM6.T2.find ( )
package

Definition at line 543 of file HM6.java.

543  {
544  if( !is_leaf() ) return this; // Shortcut
545  T2 u = _args[0];
546  if( u==null ) return this; // Shortcut
547  if( u.no_uf() ) return u; // Shortcut
548  // U-F fixup
549  while( u.is_leaf() && u._args[0]!=null ) u = u._args[0];
550  T2 v = this, v2;
551  while( !v.is_leaf() && (v2=v._args[0])!=u ) { v._args[0]=u; v = v2; }
552  return u;
553  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2.is_leaf(), and com.cliffc.aa.HM.HM6.T2.no_uf().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.Syntax.debug_find(), com.cliffc.aa.HM.HM6.Syntax.find(), com.cliffc.aa.HM.HM6.hm(), com.cliffc.aa.HM.HM6.T2.p(), com.cliffc.aa.HM.HM6.Lambda.targ(), com.cliffc.aa.HM.HM6.Let.targ(), com.cliffc.aa.HM.HM6.Lambda2.targ0(), and com.cliffc.aa.HM.HM6.Lambda2.targ1().

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

◆ fresh_base()

boolean com.cliffc.aa.HM.HM6.T2.fresh_base ( T2  that,
Worklist  work 
)
private

Definition at line 638 of file HM6.java.

638  {
639  Type con = _con.meet(that._con);
640  if( con==that._con ) return false; // No progress
641  if( work!=null ) that._con = con; // Yes progress, but no update if null work
642  return true;
643  }

References com.cliffc.aa.HM.HM6.T2._con, and com.cliffc.aa.type.Type< T extends Type< T >.meet().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify(), and com.cliffc.aa.HM.HM6.T2.unify_base().

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

◆ fresh_unify()

boolean com.cliffc.aa.HM.HM6.T2.fresh_unify ( T2  that,
VStack  nongen,
Worklist  work 
)
package

Definition at line 652 of file HM6.java.

652  {
653  assert VARS.isEmpty() && DUPS.isEmpty();
654  int old = CNT;
655  boolean progress = _fresh_unify(that,nongen,work);
656  VARS.clear(); DUPS.clear();
657  if( work==null && old!=CNT && DEBUG_LEAKS )
658  throw unimpl("busted, made T2s but just testing");
659  return progress;
660  }

References com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2.CNT, com.cliffc.aa.HM.HM6.DEBUG_LEAKS, com.cliffc.aa.HM.HM6.T2.DUPS, and com.cliffc.aa.HM.HM6.T2.VARS.

Referenced by com.cliffc.aa.HM.HM6.Ident.hm().

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

◆ get_dups()

VBitSet com.cliffc.aa.HM.HM6.T2.get_dups ( VBitSet  dups)
package

Definition at line 823 of file HM6.java.

823 { return _get_dups(new VBitSet(),dups); }

References com.cliffc.aa.HM.HM6.T2._get_dups().

Referenced by com.cliffc.aa.HM.HM6.T2.p(), com.cliffc.aa.HM.HM6.Syntax.p0(), and com.cliffc.aa.HM.HM6.T2.toString().

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

◆ is_base()

boolean com.cliffc.aa.HM.HM6.T2.is_base ( )
package

Definition at line 539 of file HM6.java.

539 { return isa("Base") && _con!=null; }

References com.cliffc.aa.HM.HM6.T2._con, and com.cliffc.aa.HM.HM6.T2.isa().

Referenced by com.cliffc.aa.HM.HM6.T2._cycle_equals(), com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.T2._unify(), and com.cliffc.aa.HM.HM6.T2.str().

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

◆ is_fun()

boolean com.cliffc.aa.HM.HM6.T2.is_fun ( )
package

Definition at line 540 of file HM6.java.

540 { return isa("->"); }

References com.cliffc.aa.HM.HM6.T2.isa().

Referenced by com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.Lambda.hm(), com.cliffc.aa.HM.HM6.Lambda2.hm(), com.cliffc.aa.HM.HM6.Apply.hm(), and com.cliffc.aa.HM.HM6.T2.str().

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

◆ is_leaf()

boolean com.cliffc.aa.HM.HM6.T2.is_leaf ( )
package

Definition at line 536 of file HM6.java.

536 { return _name.charAt(0)=='V' || (isa("Base") && _con==null); }

References com.cliffc.aa.HM.HM6.T2._con, com.cliffc.aa.HM.HM6.T2._name, and com.cliffc.aa.HM.HM6.T2.isa().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh(), com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2._occurs_in_type(), com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.T2._unify(), com.cliffc.aa.HM.HM6.T2.add_deps_work_impl(), com.cliffc.aa.HM.HM6.T2.find(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.HM.HM6.T2.push_update_impl(), com.cliffc.aa.HM.HM6.T2.str(), and com.cliffc.aa.HM.HM6.T2.union().

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

◆ isa()

boolean com.cliffc.aa.HM.HM6.T2.isa ( String  name)
package

Definition at line 538 of file HM6.java.

538 { return Util.eq(_name,name); }

References com.cliffc.aa.HM.HM6.T2._name, and com.cliffc.aa.util.Util.eq().

Referenced by com.cliffc.aa.HM.HM6.Con.hm(), com.cliffc.aa.HM.HM6.T2.is_base(), com.cliffc.aa.HM.HM6.T2.is_fun(), and com.cliffc.aa.HM.HM6.T2.is_leaf().

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

◆ make_base()

static T2 com.cliffc.aa.HM.HM6.T2.make_base ( Type  con)
staticpackage

Definition at line 524 of file HM6.java.

524 { return new T2("Base",con); }

References com.cliffc.aa.HM.HM6.T2.T2().

Referenced by com.cliffc.aa.HM.HM6.hm(), and com.cliffc.aa.HM.HM6.Con.prep_tree().

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

◆ make_fun()

static T2 com.cliffc.aa.HM.HM6.T2.make_fun ( T2...  args)
staticpackage

Definition at line 522 of file HM6.java.

522 { return new T2("->",null,args); }

References com.cliffc.aa.HM.HM6.T2.args(), and com.cliffc.aa.HM.HM6.T2.T2().

Referenced by com.cliffc.aa.HM.HM6.hm(), com.cliffc.aa.HM.HM6.Lambda.hm(), com.cliffc.aa.HM.HM6.Lambda2.hm(), and com.cliffc.aa.HM.HM6.Apply.hm().

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

◆ make_leaf()

static T2 com.cliffc.aa.HM.HM6.T2.make_leaf ( )
staticpackage

Definition at line 523 of file HM6.java.

523 { return new T2("V"+CNT,null,new T2[1]); }

References com.cliffc.aa.HM.HM6.T2.CNT, and com.cliffc.aa.HM.HM6.T2.T2().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh(), com.cliffc.aa.HM.HM6.hm(), com.cliffc.aa.HM.HM6.Lambda.Lambda(), com.cliffc.aa.HM.HM6.Lambda2.Lambda2(), com.cliffc.aa.HM.HM6.Let.Let(), com.cliffc.aa.HM.HM6.Ident.prep_tree(), com.cliffc.aa.HM.HM6.Lambda.prep_tree(), com.cliffc.aa.HM.HM6.Lambda2.prep_tree(), and com.cliffc.aa.HM.HM6.Apply.prep_tree().

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

◆ no_uf()

boolean com.cliffc.aa.HM.HM6.T2.no_uf ( )
package

Definition at line 537 of file HM6.java.

537 { return !is_leaf() || _args[0]==null; }

References com.cliffc.aa.HM.HM6.T2._args, and com.cliffc.aa.HM.HM6.T2.is_leaf().

Referenced by com.cliffc.aa.HM.HM6.T2._cycle_equals(), com.cliffc.aa.HM.HM6.T2._fresh(), com.cliffc.aa.HM.HM6.T2._fresh_unify(), com.cliffc.aa.HM.HM6.T2._get_dups(), com.cliffc.aa.HM.HM6.T2._occurs_in_type(), com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.T2._unify(), com.cliffc.aa.HM.HM6.T2.find(), com.cliffc.aa.HM.HM6.T2.push_update_impl(), and com.cliffc.aa.HM.HM6.T2.union().

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

◆ nongen_in()

boolean com.cliffc.aa.HM.HM6.T2.nongen_in ( VStack  syn)
package

Definition at line 748 of file HM6.java.

748  {
749  if( syn==null ) return false;
750  assert ODUPS.isEmpty();
751  boolean found = _nongen_in(syn);
752  ODUPS.clear();
753  return found;
754  }

References com.cliffc.aa.HM.HM6.T2._nongen_in(), and com.cliffc.aa.HM.HM6.T2.ODUPS.

Referenced by com.cliffc.aa.HM.HM6.T2._fresh(), and com.cliffc.aa.HM.HM6.T2._fresh_unify().

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

◆ occurs_in()

boolean com.cliffc.aa.HM.HM6.T2.occurs_in ( Syntax  syn)
package

Definition at line 717 of file HM6.java.

717  {
718  if( syn==null ) return false;
719  assert ODUPS.isEmpty();
720  boolean found = _occurs_in(syn);
721  ODUPS.clear();
722  return found;
723  }

References com.cliffc.aa.HM.HM6.T2._occurs_in(), and com.cliffc.aa.HM.HM6.T2.ODUPS.

Referenced by com.cliffc.aa.HM.HM6.Ident.add_occurs().

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

◆ occurs_in_type()

boolean com.cliffc.aa.HM.HM6.T2.occurs_in_type ( T2  x)
package

Definition at line 724 of file HM6.java.

724  {
725  assert ODUPS.isEmpty();
726  boolean found = _occurs_in_type(x);
727  ODUPS.clear();
728  return found;
729  }

References com.cliffc.aa.HM.HM6.T2._occurs_in_type(), and com.cliffc.aa.HM.HM6.T2.ODUPS.

Here is the call graph for this function:

◆ p() [1/2]

String com.cliffc.aa.HM.HM6.T2.p ( )

Definition at line 860 of file HM6.java.

860 { return p(get_dups(new VBitSet())); }

References com.cliffc.aa.HM.HM6.T2.get_dups(), and com.cliffc.aa.HM.HM6.T2.p().

Referenced by com.cliffc.aa.HM.HM6.T2.p().

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

◆ p() [2/2]

String com.cliffc.aa.HM.HM6.T2.p ( VBitSet  dups)
package

Definition at line 861 of file HM6.java.

861 { return find()._p(new SB(), new VBitSet(), dups).toString(); }

References com.cliffc.aa.HM.HM6.T2._p(), com.cliffc.aa.HM.HM6.T2.find(), and com.cliffc.aa.util.SB.toString().

Here is the call graph for this function:

◆ prim()

static T2 com.cliffc.aa.HM.HM6.T2.prim ( String  name,
T2...  args 
)
staticpackage

Definition at line 525 of file HM6.java.

525 { return new T2(name,null,args); }

References com.cliffc.aa.HM.HM6.T2.args(), and com.cliffc.aa.HM.HM6.T2.T2().

Referenced by com.cliffc.aa.HM.HM6.hm().

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

◆ push_update()

boolean com.cliffc.aa.HM.HM6.T2.push_update ( Ident  a)
package

Definition at line 795 of file HM6.java.

795 { assert UPDATE_VISIT.isEmpty(); push_update_impl(a); UPDATE_VISIT.clear(); return true; }

References com.cliffc.aa.HM.HM6.T2.push_update_impl(), and com.cliffc.aa.HM.HM6.T2.UPDATE_VISIT.

Referenced by com.cliffc.aa.HM.HM6.Lambda.prep_lookup_deps(), com.cliffc.aa.HM.HM6.Lambda2.prep_lookup_deps(), and com.cliffc.aa.HM.HM6.Let.prep_lookup_deps().

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

◆ push_update_impl()

void com.cliffc.aa.HM.HM6.T2.push_update_impl ( Ident  a)
private

Definition at line 796 of file HM6.java.

796  {
797  assert no_uf();
798  if( is_leaf() || _args.length==0 ) {
799  if( _deps==null ) _deps = new Ary<>(Ident.class);
800  if( _deps.find(a)==-1 ) _deps.push(a);
801  } else {
802  if( UPDATE_VISIT.tset(_uid) ) return;
803  for( int i=0; i<_args.length; i++ )
804  args(i).push_update_impl(a);
805  }
806  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._deps, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.HM.HM6.T2.no_uf(), com.cliffc.aa.HM.HM6.T2.push_update_impl(), com.cliffc.aa.util.VBitSet.tset(), and com.cliffc.aa.HM.HM6.T2.UPDATE_VISIT.

Referenced by com.cliffc.aa.HM.HM6.T2.push_update(), and com.cliffc.aa.HM.HM6.T2.push_update_impl().

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

◆ reset()

static void com.cliffc.aa.HM.HM6.T2.reset ( )
staticpackage

Definition at line 882 of file HM6.java.

882 { CNT=0; DUPS.clear(); VARS.clear(); ODUPS.clear(); CDUPS.clear(); UPDATE_VISIT.clear(); }

References com.cliffc.aa.HM.HM6.T2.CDUPS, com.cliffc.aa.HM.HM6.T2.CNT, com.cliffc.aa.HM.HM6.T2.DUPS, com.cliffc.aa.HM.HM6.T2.ODUPS, com.cliffc.aa.HM.HM6.T2.UPDATE_VISIT, and com.cliffc.aa.HM.HM6.T2.VARS.

Referenced by com.cliffc.aa.HM.HM6.reset().

Here is the caller graph for this function:

◆ str() [1/2]

static SB com.cliffc.aa.HM.HM6.T2.str ( SB  sb,
VBitSet  visit,
T2  t,
VBitSet  dups 
)
staticprivate

Definition at line 857 of file HM6.java.

857 { return t==null ? sb.p("_") : t.str(sb,visit,dups); }

References com.cliffc.aa.util.SB.p(), and com.cliffc.aa.HM.HM6.T2.str().

Here is the call graph for this function:

◆ str() [2/2]

SB com.cliffc.aa.HM.HM6.T2.str ( SB  sb,
VBitSet  visit,
VBitSet  dups 
)
package

Definition at line 836 of file HM6.java.

836  {
837  if( is_leaf() || is_base() ) {
838  if( is_base() ) sb.p(_con instanceof TypeMemPtr ? "str" : _con.toString()); else sb.p(_name);
839  return _args.length==0 || _args[0]==null ? sb : _args[0].str(sb.p(">>"), visit, dups);
840  }
841  boolean dup = dups.get(_uid);
842  if( dup ) sb.p('$').p(_uid);
843  if( visit.tset(_uid) && dup ) return sb;
844  if( dup ) sb.p(':');
845 
846  if( is_fun() ) {
847  sb.p("{ ");
848  for( int i=0; i<_args.length-1; i++ )
849  str(sb,visit,_args[i],dups).p(" ");
850  return str(sb.p("-> "),visit,_args[_args.length-1],dups).p(" }");
851  }
852  // Generic structural T2
853  sb.p("(").p(_name).p(" ");
854  for( T2 t : _args ) str(sb,visit,t,dups).p(" ");
855  return sb.unchar().p(")");
856  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._con, com.cliffc.aa.HM.HM6.T2._name, com.cliffc.aa.HM.HM6.T2._uid, com.cliffc.aa.HM.HM6.T2.is_base(), com.cliffc.aa.HM.HM6.T2.is_fun(), com.cliffc.aa.HM.HM6.T2.is_leaf(), com.cliffc.aa.util.SB.p(), com.cliffc.aa.HM.HM6.T2.str(), com.cliffc.aa.type.Type< T extends Type< T >.toString(), com.cliffc.aa.util.VBitSet.tset(), and com.cliffc.aa.util.SB.unchar().

Referenced by com.cliffc.aa.HM.HM6.Syntax.p0(), com.cliffc.aa.HM.HM6.VStack.str(), com.cliffc.aa.HM.HM6.T2.str(), and com.cliffc.aa.HM.HM6.T2.toString().

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

◆ toString()

String com.cliffc.aa.HM.HM6.T2.toString ( )

Definition at line 835 of file HM6.java.

835 { return str(new SB(), new VBitSet(), get_dups(new VBitSet()) ).toString(); }

References com.cliffc.aa.HM.HM6.T2.get_dups(), com.cliffc.aa.HM.HM6.T2.str(), and com.cliffc.aa.util.SB.toString().

Here is the call graph for this function:

◆ unify()

boolean com.cliffc.aa.HM.HM6.T2.unify ( T2  that,
Worklist  work 
)
package

Definition at line 586 of file HM6.java.

586  {
587  if( this==that ) return false;
588  assert DUPS.isEmpty();
589  boolean progress = _unify(that,work);
590  DUPS.clear();
591  return progress;
592  }

References com.cliffc.aa.HM.HM6.T2._unify(), and com.cliffc.aa.HM.HM6.T2.DUPS.

Referenced by com.cliffc.aa.HM.HM6.hm(), com.cliffc.aa.HM.HM6.Lambda.hm(), com.cliffc.aa.HM.HM6.Lambda2.hm(), com.cliffc.aa.HM.HM6.Let.hm(), and com.cliffc.aa.HM.HM6.Apply.hm().

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

◆ unify_base()

boolean com.cliffc.aa.HM.HM6.T2.unify_base ( T2  that,
Worklist  work 
)
private

Definition at line 631 of file HM6.java.

631  {
632  fresh_base(that,work);
633  if( work==null ) return true;
634  _args = new T2[1]; // Room for a forwarding pointer
635  _con=null; // Flip from 'Base' to 'Leaf'
636  return union(that,work);
637  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._con, and com.cliffc.aa.HM.HM6.T2.fresh_base().

Referenced by com.cliffc.aa.HM.HM6.T2._unify().

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

◆ union()

boolean com.cliffc.aa.HM.HM6.T2.union ( T2  that,
Worklist  work 
)
package

Definition at line 563 of file HM6.java.

563  {
564  assert is_leaf() && no_uf(); // Cannot union twice
565  if( this==that ) return false;
566  if( work==null ) return true; // Report progress without changing
567  // Worklist: put updates on the worklist for revisiting
568  if( _deps != null ) {
569  work.addAll(_deps); // Re-Apply
570  // Merge update lists, for future unions
571  if( that._deps==null && that.is_leaf() ) that._deps = _deps;
572  else
573  for( Ident dep : _deps ) that.push_update(dep);
574  _deps = null;
575  }
576  _args[0] = that; // U-F update
577  return true;
578  }

References com.cliffc.aa.HM.HM6.T2._args, com.cliffc.aa.HM.HM6.T2._deps, com.cliffc.aa.HM.HM6.T2.is_leaf(), and com.cliffc.aa.HM.HM6.T2.no_uf().

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify(), and com.cliffc.aa.HM.HM6.T2._unify().

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

◆ vput()

boolean com.cliffc.aa.HM.HM6.T2.vput ( T2  that,
boolean  progress 
)
private

Definition at line 694 of file HM6.java.

694 { VARS.put(this,that); return progress; }

References com.cliffc.aa.HM.HM6.T2.VARS.

Referenced by com.cliffc.aa.HM.HM6.T2._fresh_unify().

Here is the caller graph for this function:

Member Data Documentation

◆ _args

◆ _con

◆ _deps

◆ _name

◆ _uid

◆ CDUPS

final HashMap<T2,T2> com.cliffc.aa.HM.HM6.T2.CDUPS = new HashMap<>()
staticprivate

◆ CNT

◆ DUPS

final HashMap<Long,T2> com.cliffc.aa.HM.HM6.T2.DUPS = new HashMap<>()
staticprivate

◆ ODUPS

◆ UPDATE_VISIT

◆ VARS

final HashMap<T2,T2> com.cliffc.aa.HM.HM6.T2.VARS = new HashMap<>()
staticprivate

The documentation for this class was generated from the following file:
com.cliffc.aa.HM.HM6.T2._p
SB _p(SB sb, VBitSet visit, VBitSet dups)
Definition: HM6.java:862
com.cliffc.aa.HM.HM6.DEBUG_LEAKS
static boolean DEBUG_LEAKS
Definition: HM6.java:25
com.cliffc.aa.HM.HM6.T2.is_base
boolean is_base()
Definition: HM6.java:539
com.cliffc.aa.HM.HM6.T2.T2
T2(@NotNull String name, Type con, T2 @NotNull ... args)
Definition: HM6.java:528
com.cliffc.aa.HM.HM6.T2.UPDATE_VISIT
static final VBitSet UPDATE_VISIT
Definition: HM6.java:794
com.cliffc.aa.HM.HM6.T2._fresh_unify
boolean _fresh_unify(T2 that, VStack nongen, Worklist work)
Definition: HM6.java:663
com.cliffc.aa.HM.HM6.T2.str
SB str(SB sb, VBitSet visit, VBitSet dups)
Definition: HM6.java:836
com.cliffc.aa.util.Util.eq
static boolean eq(String s0, String s1)
Definition: Util.java:16
com.cliffc.aa.HM.HM6.T2.CDUPS
static final HashMap< T2, T2 > CDUPS
Definition: HM6.java:763
com.cliffc.aa.HM.HM6.T2.p
String p()
Definition: HM6.java:860
com.cliffc.aa.type.Type.toString
final String toString()
Definition: Type.java:127
com.cliffc.aa.HM.HM6.T2._con
Type _con
Definition: HM6.java:516
com.cliffc.aa.HM.HM6.T2.get_dups
VBitSet get_dups(VBitSet dups)
Definition: HM6.java:823
com.cliffc.aa.HM.HM6.T2.ODUPS
static final VBitSet ODUPS
Definition: HM6.java:716
com.cliffc.aa.HM.HM6.T2.is_leaf
boolean is_leaf()
Definition: HM6.java:536
com.cliffc.aa.HM.HM6.T2.CNT
static int CNT
Definition: HM6.java:504
com.cliffc.aa.HM.HM6.T2.DUPS
static final HashMap< Long, T2 > DUPS
Definition: HM6.java:585
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.util.Ary
Definition: Ary.java:11
com.cliffc.aa.HM.HM6.T2.nongen_in
boolean nongen_in(VStack syn)
Definition: HM6.java:748
com.cliffc.aa.HM.HM6.T2._occurs_in
boolean _occurs_in(Syntax syn)
Definition: HM6.java:730
com.cliffc.aa.HM.HM6.T2.unify_base
boolean unify_base(T2 that, Worklist work)
Definition: HM6.java:631
com.cliffc.aa.HM.HM6.T2.add_deps_work_impl
void add_deps_work_impl(Worklist work)
Definition: HM6.java:809
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.HM.HM6.T2._deps
Ary< Ident > _deps
Definition: HM6.java:519
com.cliffc.aa.util.SB.unchar
SB unchar()
Definition: SB.java:58
com.cliffc.aa.util.VBitSet.tset
boolean tset(int idx)
Definition: VBitSet.java:7
com.cliffc.aa.HM.HM6.T2.is_fun
boolean is_fun()
Definition: HM6.java:540
com.cliffc.aa.HM.HM6.T2.find
T2 find()
Definition: HM6.java:543
com.cliffc.aa.util.Util
Definition: Util.java:5
com.cliffc.aa.HM.HM6.T2._occurs_in_type
boolean _occurs_in_type(T2 x)
Definition: HM6.java:737
com.cliffc.aa.HM.HM6.T2.copy
T2 copy()
Definition: HM6.java:526
com.cliffc.aa.HM.HM6.T2.cycle_equals
boolean cycle_equals(T2 t)
Definition: HM6.java:764
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
com.cliffc.aa.HM.HM6.T2._nongen_in
boolean _nongen_in(VStack nongen)
Definition: HM6.java:755
com.cliffc.aa.HM.HM6.T2._fresh
T2 _fresh(VStack nongen)
Definition: HM6.java:697
com.cliffc.aa.util.SB
Tight/tiny StringBuilder wrapper.
Definition: SB.java:8
com.cliffc.aa.HM.HM6.T2.push_update_impl
void push_update_impl(Ident a)
Definition: HM6.java:796
com.cliffc.aa.HM.HM6.T2.VARS
static final HashMap< T2, T2 > VARS
Definition: HM6.java:651
com.cliffc.aa.HM.HM6.T2.isa
boolean isa(String name)
Definition: HM6.java:538
com.cliffc.aa.HM.HM6.T2.fresh_base
boolean fresh_base(T2 that, Worklist work)
Definition: HM6.java:638
com.cliffc.aa.util.SB.p
SB p(String s)
Definition: SB.java:13
com.cliffc.aa.HM.HM6.T2._args
T2[] _args
Definition: HM6.java:513
com.cliffc.aa.HM.HM6.T2._cycle_equals
boolean _cycle_equals(T2 t)
Definition: HM6.java:770
com.cliffc.aa.HM.HM6.T2._uid
final int _uid
Definition: HM6.java:505
com.cliffc.aa.HM.HM6.T2.no_uf
boolean no_uf()
Definition: HM6.java:537
com.cliffc.aa.HM.HM6.T2.vput
boolean vput(T2 that, boolean progress)
Definition: HM6.java:694
com.cliffc.aa.HM.HM6.T2._unify
boolean _unify(T2 that, Worklist work)
Definition: HM6.java:597
com.cliffc.aa.HM.HM6.T2._get_dups
VBitSet _get_dups(VBitSet visit, VBitSet dups)
Definition: HM6.java:824
com.cliffc.aa.HM.HM6.T2._name
final String _name
Definition: HM6.java:510
com.cliffc.aa.util.SB.toString
String toString()
Definition: SB.java:62
com.cliffc.aa.type.TypeMemPtr
Definition: TypeMemPtr.java:14
com.cliffc.aa.HM.HM6.T2.dbl_uid
long dbl_uid(T2 t)
Definition: HM6.java:629
com.cliffc.aa.HM.HM6.T2.args
T2 args(int i)
Definition: HM6.java:555