aa
com.cliffc.aa.HM.HM5.T2 Class Reference
Collaboration diagram for com.cliffc.aa.HM.HM5.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 412 of file HM5.java.

Constructor & Destructor Documentation

◆ T2()

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

Definition at line 437 of file HM5.java.

437  {
438  _uid = CNT++;
439  _name= name;
440  _con = con;
441  _args= args;
442  }

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

Referenced by com.cliffc.aa.HM.HM5.T2.copy(), com.cliffc.aa.HM.HM5.T2.make_base(), com.cliffc.aa.HM.HM5.T2.make_fun(), com.cliffc.aa.HM.HM5.T2.make_leaf(), and com.cliffc.aa.HM.HM5.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.HM5.T2._cycle_equals ( T2  t)
package

Definition at line 679 of file HM5.java.

679  {
680  assert no_uf() && t.no_uf();
681  if( this==t ) return true;
682  if( is_base() && t.is_base() )
683  return _con==t._con; // Base-cases have to be completely identical
684  if( !Util.eq(_name,t._name) || // Wrong type-var names
685  _args.length != t._args.length ) // Mismatched sizes
686  return false;
687  if( _args==t._args ) return true;
688  // Cycles stall the equal/unequal decision until we see a difference.
689  T2 tc = CDUPS.get(this);
690  if( tc!=null )
691  return tc==t; // Cycle check; true if both cycling the same
692  CDUPS.put(this,t);
693  for( int i=0; i<_args.length; i++ )
694  if( !args(i)._cycle_equals(t.args(i)) )
695  return false;
696  return true;
697  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2._fresh ( VStack  nongen)
private

Definition at line 606 of file HM5.java.

606  {
607  assert no_uf();
608  T2 rez = VARS.get(this);
609  if( rez!=null ) return rez; // Been there, done that
610 
611  if( is_leaf() ) {
612  // If occurs_in lexical scope, keep same variable, else make a new leaf
613  T2 t = nongen_in(nongen) ? this : T2.make_leaf();
614  VARS.put(this,t);
615  return t;
616  } else { // Structure is deep-replicated
617  T2 t = copy();
618  VARS.put(this,t); // Stop cyclic structure looping
619  for( int i=0; i<_args.length; i++ )
620  t._args[i] = args(i)._fresh(nongen);
621  return t;
622  }
623  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh(), and com.cliffc.aa.HM.HM5.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.HM5.T2._fresh_unify ( T2  that,
VStack  nongen,
Worklist  work 
)
private

Definition at line 572 of file HM5.java.

572  {
573  assert no_uf() && that.no_uf();
574  T2 prior = VARS.get(this);
575  if( prior!=null ) // Been there, done that
576  return prior.find()._unify(that,work); // Also 'prior' needs unification with 'that'
577  if( cycle_equals(that) ) return vput(that,false);
578 
579  // Attempting to pre-compute occurs_in, by computing 'is_fresh' in the
580  // Ident.hm() call does NOT work. The 'is_fresh' is for the top-layer
581  // only, not the internal layers. As soon as we structural recurse down
582  // a layer, 'is_fresh' does not correlate with an occurs_in check.
583  if( nongen_in(nongen) ) return vput(that,_unify(that,work)); // Famous 'occurs-check', switch to normal unify
584  if( this.is_leaf() ) return vput(that,false); // Lazy map LHS tvar to RHS
585  if( that.is_leaf() ) // RHS is a tvar; union with a deep copy of LHS
586  return work==null || vput(that,that.union(_fresh(nongen),work));
587  // Bases MEET cons in RHS
588  if( is_base() && that.is_base() ) return vput(that,fresh_base(that,work));
589 
590  if( !Util.eq(_name,that._name) ||
591  _args.length != that._args.length )
592  throw new RuntimeException("Cannot unify "+this+" and "+that);
593 
594  // Structural recursion unification, lazy on LHS
595  boolean progress = vput(that,false); // Early set, to stop cycles
596  for( int i=0; i<_args.length; i++ ) {
597  progress |= args(i)._fresh_unify(that.args(i),nongen,work);
598  if( progress && work==null ) return true;
599  }
600  return progress;
601  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh_unify(), and com.cliffc.aa.HM.HM5.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.HM5.T2._get_dups ( VBitSet  visit,
VBitSet  dups 
)
package

Definition at line 733 of file HM5.java.

733  {
734  if( visit.tset(_uid) && no_uf() ) dups.set(_uid);
735  else
736  for( T2 t : _args )
737  if( t!=null )
738  t._get_dups(visit,dups);
739  return dups;
740  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2._nongen_in ( VStack  nongen)
package

Definition at line 664 of file HM5.java.

664  {
665  for( T2 t2 : nongen )
666  if( _occurs_in_type(t2.find()) )
667  return true;
668  return false;
669  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2._occurs_in ( Syntax  syn)
package

Definition at line 639 of file HM5.java.

639  {
640  for( ; syn!=null; syn=syn._par )
641  if( _occurs_in_type(syn.find()) )
642  return true;
643  return false;
644  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2._occurs_in_type ( T2  x)
package

Definition at line 646 of file HM5.java.

646  {
647  assert no_uf() && x.no_uf();
648  if( x==this ) return true;
649  if( ODUPS.tset(x._uid) ) return false; // Been there, done that
650  if( !x.is_leaf() )
651  for( int i=0; i<x._args.length; i++ )
652  if( _occurs_in_type(x.args(i)) )
653  return true;
654  return false;
655  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._nongen_in(), com.cliffc.aa.HM.HM5.T2._occurs_in(), and com.cliffc.aa.HM.HM5.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.HM5.T2._p ( SB  sb,
VBitSet  visit,
VBitSet  dups 
)
private

Definition at line 771 of file HM5.java.

771  {
772  assert no_uf();
773  if( is_base() ) return sb.p(_con instanceof TypeMemPtr ? "str" : _con.toString() );
774  if( is_leaf() ) return sb.p(_name);
775  boolean dup = dups.get(_uid);
776  if( dup ) sb.p('$').p(_uid);
777  if( visit.tset(_uid) && dup ) return sb;
778  if( dup ) sb.p(':');
779  if( is_fun() ) {
780  sb.p("{ ");
781  for( int i=0; i<_args.length-1; i++ )
782  args(i)._p(sb,visit,dups).p(" ");
783  return args(_args.length-1)._p(sb.p("-> "),visit,dups).p(" }");
784  }
785  // Generic structural T2
786  sb.p("(").p(_name).p(" ");
787  for( int i=0; i<_args.length; i++ ) args(i)._p(sb,visit,dups).p(" ");
788  return sb.unchar().p(")");
789  }

References com.cliffc.aa.HM.HM5.T2._args, com.cliffc.aa.HM.HM5.T2._con, com.cliffc.aa.HM.HM5.T2._name, com.cliffc.aa.HM.HM5.T2._p(), com.cliffc.aa.HM.HM5.T2._uid, com.cliffc.aa.HM.HM5.T2.args(), com.cliffc.aa.HM.HM5.T2.is_base(), com.cliffc.aa.HM.HM5.T2.is_fun(), com.cliffc.aa.HM.HM5.T2.is_leaf(), com.cliffc.aa.HM.HM5.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.HM5.T2._p(), and com.cliffc.aa.HM.HM5.T2.p().

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

◆ _unify()

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

Definition at line 506 of file HM5.java.

506  {
507  assert no_uf() && that.no_uf();
508  if( this==that ) return false;
509 
510  // two leafs union in either order, so keep lower uid
511  if( is_leaf() && that.is_leaf() && _uid<that._uid ) return that.union(this,work);
512  if( is_leaf() ) return union(that,work);
513  if( that.is_leaf() ) return that.union(this,work);
514  if( is_base() && that.is_base() ) return unify_base(that,work);
515 
516  if( !Util.eq(_name,that._name) )
517  throw new RuntimeException("Cannot unify "+this+" and "+that);
518  assert _args!=that._args; // Not expecting to share _args and not 'this'
519  if( _args.length != that._args.length )
520  throw new RuntimeException("Cannot unify "+this+" and "+that);
521 
522  // Cycle check
523  long luid = dbl_uid(that);
524  T2 rez = DUPS.get(luid);
525  assert rez==null || rez==that;
526  if( rez!=null ) return false; // Been there, done that
527  DUPS.put(luid,that); // Close cycles
528 
529  // Structural recursion unification.
530  boolean progress=false;
531  for( int i=0; i<_args.length; i++ ) {
532  progress |= args(i)._unify(that.args(i),work);
533  if( progress && work!=null ) return true;
534  }
535  return progress;
536  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh_unify(), com.cliffc.aa.HM.HM5.T2._unify(), and com.cliffc.aa.HM.HM5.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.HM5.T2.add_deps_work ( Worklist  work)
package

Definition at line 717 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.add_deps_work_impl ( Worklist  work)
private

Definition at line 718 of file HM5.java.

718  {
719  if( is_leaf() || _args.length==0 ) {
720  work.addAll(_deps);
721  } else {
722  if( UPDATE_VISIT.tset(_uid) ) return;
723  for( int i=0; i<_args.length; i++ )
724  args(i).add_deps_work_impl(work);
725  }
726  }

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

Referenced by com.cliffc.aa.HM.HM5.T2.add_deps_work(), and com.cliffc.aa.HM.HM5.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.HM5.T2.args ( int  i)
package

Definition at line 464 of file HM5.java.

464  {
465  T2 u = _args[i];
466  T2 uu = u.find();
467  return u==uu ? uu : (_args[i]=uu);
468  }

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

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

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

◆ copy()

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

Definition at line 435 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.cycle_equals ( T2  t)
package

Definition at line 673 of file HM5.java.

673  {
674  assert CDUPS.isEmpty();
675  boolean rez = _cycle_equals(t);
676  CDUPS.clear();
677  return rez;
678  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.dbl_uid ( T2  t)
private

Definition at line 538 of file HM5.java.

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

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

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

Here is the caller graph for this function:

◆ find()

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

Definition at line 452 of file HM5.java.

452  {
453  if( !is_leaf() ) return this; // Shortcut
454  T2 u = _args[0];
455  if( u==null ) return this; // Shortcut
456  if( u.no_uf() ) return u; // Shortcut
457  // U-F fixup
458  while( u.is_leaf() && u._args[0]!=null ) u = u._args[0];
459  T2 v = this, v2;
460  while( !v.is_leaf() && (v2=v._args[0])!=u ) { v._args[0]=u; v = v2; }
461  return u;
462  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh_unify(), com.cliffc.aa.HM.HM5.T2.args(), com.cliffc.aa.HM.HM5.Syntax.debug_find(), com.cliffc.aa.HM.HM5.Syntax.find(), com.cliffc.aa.HM.HM5.hm(), com.cliffc.aa.HM.HM5.T2.p(), com.cliffc.aa.HM.HM5.Lambda.targ(), com.cliffc.aa.HM.HM5.Let.targ(), com.cliffc.aa.HM.HM5.Lambda2.targ0(), and com.cliffc.aa.HM.HM5.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.HM5.T2.fresh_base ( T2  that,
Worklist  work 
)
private

Definition at line 547 of file HM5.java.

547  {
548  Type con = _con.meet(that._con);
549  if( con==that._con ) return false; // No progress
550  if( work!=null ) that._con = con; // Yes progress, but no update if null work
551  return true;
552  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh_unify(), and com.cliffc.aa.HM.HM5.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.HM5.T2.fresh_unify ( T2  that,
VStack  nongen,
Worklist  work 
)
package

Definition at line 561 of file HM5.java.

561  {
562  assert VARS.isEmpty() && DUPS.isEmpty();
563  int old = CNT;
564  boolean progress = _fresh_unify(that,nongen,work);
565  VARS.clear(); DUPS.clear();
566  if( work==null && old!=CNT && DEBUG_LEAKS )
567  throw unimpl("busted, made T2s but just testing");
568  return progress;
569  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.get_dups ( VBitSet  dups)
package

Definition at line 732 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.T2.p(), com.cliffc.aa.HM.HM5.Syntax.p0(), and com.cliffc.aa.HM.HM5.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.HM5.T2.is_base ( )
package

Definition at line 448 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.T2._cycle_equals(), com.cliffc.aa.HM.HM5.T2._fresh_unify(), com.cliffc.aa.HM.HM5.T2._p(), com.cliffc.aa.HM.HM5.T2._unify(), and com.cliffc.aa.HM.HM5.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.HM5.T2.is_fun ( )
package

Definition at line 449 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.T2._p(), com.cliffc.aa.HM.HM5.Lambda.hm(), com.cliffc.aa.HM.HM5.Lambda2.hm(), com.cliffc.aa.HM.HM5.Apply.hm(), and com.cliffc.aa.HM.HM5.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.HM5.T2.is_leaf ( )
package

Definition at line 445 of file HM5.java.

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

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

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

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

◆ isa()

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

Definition at line 447 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.Con.hm(), com.cliffc.aa.HM.HM5.T2.is_base(), com.cliffc.aa.HM.HM5.T2.is_fun(), and com.cliffc.aa.HM.HM5.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.HM5.T2.make_base ( Type  con)
staticpackage

Definition at line 433 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.hm(), and com.cliffc.aa.HM.HM5.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.HM5.T2.make_fun ( T2...  args)
staticpackage

Definition at line 431 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.hm(), com.cliffc.aa.HM.HM5.Lambda.hm(), com.cliffc.aa.HM.HM5.Lambda2.hm(), and com.cliffc.aa.HM.HM5.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.HM5.T2.make_leaf ( )
staticpackage

Definition at line 432 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh(), com.cliffc.aa.HM.HM5.hm(), com.cliffc.aa.HM.HM5.Lambda.Lambda(), com.cliffc.aa.HM.HM5.Lambda2.Lambda2(), com.cliffc.aa.HM.HM5.Let.Let(), com.cliffc.aa.HM.HM5.Ident.prep_tree(), com.cliffc.aa.HM.HM5.Lambda.prep_tree(), com.cliffc.aa.HM.HM5.Lambda2.prep_tree(), and com.cliffc.aa.HM.HM5.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.HM5.T2.no_uf ( )
package

Definition at line 446 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.T2._cycle_equals(), com.cliffc.aa.HM.HM5.T2._fresh(), com.cliffc.aa.HM.HM5.T2._fresh_unify(), com.cliffc.aa.HM.HM5.T2._get_dups(), com.cliffc.aa.HM.HM5.T2._occurs_in_type(), com.cliffc.aa.HM.HM5.T2._p(), com.cliffc.aa.HM.HM5.T2._unify(), com.cliffc.aa.HM.HM5.T2.find(), com.cliffc.aa.HM.HM5.T2.push_update_impl(), and com.cliffc.aa.HM.HM5.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.HM5.T2.nongen_in ( VStack  syn)
package

Definition at line 657 of file HM5.java.

657  {
658  if( syn==null ) return false;
659  assert ODUPS.isEmpty();
660  boolean found = _nongen_in(syn);
661  ODUPS.clear();
662  return found;
663  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._fresh(), and com.cliffc.aa.HM.HM5.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.HM5.T2.occurs_in ( Syntax  syn)
package

Definition at line 626 of file HM5.java.

626  {
627  if( syn==null ) return false;
628  assert ODUPS.isEmpty();
629  boolean found = _occurs_in(syn);
630  ODUPS.clear();
631  return found;
632  }

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.occurs_in_type ( T2  x)
package

Definition at line 633 of file HM5.java.

633  {
634  assert ODUPS.isEmpty();
635  boolean found = _occurs_in_type(x);
636  ODUPS.clear();
637  return found;
638  }

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

Here is the call graph for this function:

◆ p() [1/2]

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

Definition at line 769 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.p ( VBitSet  dups)
package

Definition at line 770 of file HM5.java.

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

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

Here is the call graph for this function:

◆ prim()

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

Definition at line 434 of file HM5.java.

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

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

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

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

◆ push_update()

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

Definition at line 704 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.Lambda.prep_lookup_deps(), com.cliffc.aa.HM.HM5.Lambda2.prep_lookup_deps(), and com.cliffc.aa.HM.HM5.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.HM5.T2.push_update_impl ( Ident  a)
private

Definition at line 705 of file HM5.java.

705  {
706  assert no_uf();
707  if( is_leaf() || _args.length==0 ) {
708  if( _deps==null ) _deps = new Ary<>(Ident.class);
709  if( _deps.find(a)==-1 ) _deps.push(a);
710  } else {
711  if( UPDATE_VISIT.tset(_uid) ) return;
712  for( int i=0; i<_args.length; i++ )
713  args(i).push_update_impl(a);
714  }
715  }

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

Referenced by com.cliffc.aa.HM.HM5.T2.push_update(), and com.cliffc.aa.HM.HM5.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.HM5.T2.reset ( )
staticpackage

Definition at line 791 of file HM5.java.

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

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

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

Here is the caller graph for this function:

◆ str() [1/2]

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

Definition at line 766 of file HM5.java.

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

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

Here is the call graph for this function:

◆ str() [2/2]

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

Definition at line 745 of file HM5.java.

745  {
746  if( is_leaf() || is_base() ) {
747  if( is_base() ) sb.p(_con instanceof TypeMemPtr ? "str" : _con.toString()); else sb.p(_name);
748  return _args.length==0 || _args[0]==null ? sb : _args[0].str(sb.p(">>"), visit, dups);
749  }
750  boolean dup = dups.get(_uid);
751  if( dup ) sb.p('$').p(_uid);
752  if( visit.tset(_uid) && dup ) return sb;
753  if( dup ) sb.p(':');
754 
755  if( is_fun() ) {
756  sb.p("{ ");
757  for( int i=0; i<_args.length-1; i++ )
758  str(sb,visit,_args[i],dups).p(" ");
759  return str(sb.p("-> "),visit,_args[_args.length-1],dups).p(" }");
760  }
761  // Generic structural T2
762  sb.p("(").p(_name).p(" ");
763  for( T2 t : _args ) str(sb,visit,t,dups).p(" ");
764  return sb.unchar().p(")");
765  }

References com.cliffc.aa.HM.HM5.T2._args, com.cliffc.aa.HM.HM5.T2._con, com.cliffc.aa.HM.HM5.T2._name, com.cliffc.aa.HM.HM5.T2._uid, com.cliffc.aa.HM.HM5.T2.is_base(), com.cliffc.aa.HM.HM5.T2.is_fun(), com.cliffc.aa.HM.HM5.T2.is_leaf(), com.cliffc.aa.util.SB.p(), com.cliffc.aa.HM.HM5.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.HM5.Syntax.p0(), com.cliffc.aa.HM.HM5.VStack.str(), com.cliffc.aa.HM.HM5.T2.str(), and com.cliffc.aa.HM.HM5.T2.toString().

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

◆ toString()

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

Definition at line 744 of file HM5.java.

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

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

Here is the call graph for this function:

◆ unify()

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

Definition at line 495 of file HM5.java.

495  {
496  if( this==that ) return false;
497  assert DUPS.isEmpty();
498  boolean progress = _unify(that,work);
499  DUPS.clear();
500  return progress;
501  }

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

Referenced by com.cliffc.aa.HM.HM5.hm(), com.cliffc.aa.HM.HM5.Lambda.hm(), com.cliffc.aa.HM.HM5.Lambda2.hm(), com.cliffc.aa.HM.HM5.Let.hm(), and com.cliffc.aa.HM.HM5.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.HM5.T2.unify_base ( T2  that,
Worklist  work 
)
private

Definition at line 540 of file HM5.java.

540  {
541  fresh_base(that,work);
542  if( work==null ) return true;
543  _args = new T2[1]; // Room for a forwarding pointer
544  _con=null; // Flip from 'Base' to 'Leaf'
545  return union(that,work);
546  }

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

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

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

◆ union()

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

Definition at line 472 of file HM5.java.

472  {
473  assert is_leaf() && no_uf(); // Cannot union twice
474  if( this==that ) return false;
475  if( work==null ) return true; // Report progress without changing
476  // Worklist: put updates on the worklist for revisiting
477  if( _deps != null ) {
478  work.addAll(_deps); // Re-Apply
479  // Merge update lists, for future unions
480  if( that._deps==null && that.is_leaf() ) that._deps = _deps;
481  else
482  for( Ident dep : _deps ) that.push_update(dep);
483  _deps = null;
484  }
485  _args[0] = that; // U-F update
486  return true;
487  }

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

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

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

◆ vput()

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

Definition at line 603 of file HM5.java.

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

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

Referenced by com.cliffc.aa.HM.HM5.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.HM5.T2.CDUPS = new HashMap<>()
staticprivate

◆ CNT

◆ DUPS

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

◆ ODUPS

◆ UPDATE_VISIT

◆ VARS

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

The documentation for this class was generated from the following file:
com.cliffc.aa.HM.HM5.T2.CDUPS
static final HashMap< T2, T2 > CDUPS
Definition: HM5.java:672
com.cliffc.aa.HM.HM5.T2.VARS
static final HashMap< T2, T2 > VARS
Definition: HM5.java:560
com.cliffc.aa.HM.HM5.T2._occurs_in_type
boolean _occurs_in_type(T2 x)
Definition: HM5.java:646
com.cliffc.aa.HM.HM5.T2._get_dups
VBitSet _get_dups(VBitSet visit, VBitSet dups)
Definition: HM5.java:733
com.cliffc.aa.HM.HM5.T2._name
final String _name
Definition: HM5.java:419
com.cliffc.aa.HM.HM5.T2.UPDATE_VISIT
static final VBitSet UPDATE_VISIT
Definition: HM5.java:703
com.cliffc.aa.util.Util.eq
static boolean eq(String s0, String s1)
Definition: Util.java:16
com.cliffc.aa.HM.HM5.T2._fresh_unify
boolean _fresh_unify(T2 that, VStack nongen, Worklist work)
Definition: HM5.java:572
com.cliffc.aa.HM.HM5.T2.nongen_in
boolean nongen_in(VStack syn)
Definition: HM5.java:657
com.cliffc.aa.type.Type.toString
final String toString()
Definition: Type.java:127
com.cliffc.aa.HM.HM5.T2.DUPS
static final HashMap< Long, T2 > DUPS
Definition: HM5.java:494
com.cliffc.aa.HM.HM5.T2._unify
boolean _unify(T2 that, Worklist work)
Definition: HM5.java:506
com.cliffc.aa.HM.HM5.T2.str
SB str(SB sb, VBitSet visit, VBitSet dups)
Definition: HM5.java:745
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.HM.HM5.T2.args
T2 args(int i)
Definition: HM5.java:464
com.cliffc.aa.util.Ary
Definition: Ary.java:11
com.cliffc.aa.HM.HM5.T2.copy
T2 copy()
Definition: HM5.java:435
com.cliffc.aa.HM.HM5.T2.is_fun
boolean is_fun()
Definition: HM5.java:449
com.cliffc.aa.HM.HM5.T2.find
T2 find()
Definition: HM5.java:452
com.cliffc.aa.HM.HM5.T2._deps
Ary< Ident > _deps
Definition: HM5.java:428
com.cliffc.aa.HM.HM5.T2._occurs_in
boolean _occurs_in(Syntax syn)
Definition: HM5.java:639
com.cliffc.aa.HM.HM5.T2.is_base
boolean is_base()
Definition: HM5.java:448
com.cliffc.aa.HM.HM5.T2._cycle_equals
boolean _cycle_equals(T2 t)
Definition: HM5.java:679
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.HM.HM5.T2._uid
final int _uid
Definition: HM5.java:414
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.HM5.T2.get_dups
VBitSet get_dups(VBitSet dups)
Definition: HM5.java:732
com.cliffc.aa.HM.HM5.T2.push_update_impl
void push_update_impl(Ident a)
Definition: HM5.java:705
com.cliffc.aa.HM.HM5.DEBUG_LEAKS
static boolean DEBUG_LEAKS
Definition: HM5.java:25
com.cliffc.aa.util.Util
Definition: Util.java:5
com.cliffc.aa.HM.HM5.T2._nongen_in
boolean _nongen_in(VStack nongen)
Definition: HM5.java:664
com.cliffc.aa.HM.HM5.T2.add_deps_work_impl
void add_deps_work_impl(Worklist work)
Definition: HM5.java:718
com.cliffc.aa.HM.HM5.T2.dbl_uid
long dbl_uid(T2 t)
Definition: HM5.java:538
com.cliffc.aa.HM.HM5.T2.CNT
static int CNT
Definition: HM5.java:413
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
com.cliffc.aa.util.SB
Tight/tiny StringBuilder wrapper.
Definition: SB.java:8
com.cliffc.aa.HM.HM5.T2._fresh
T2 _fresh(VStack nongen)
Definition: HM5.java:606
com.cliffc.aa.HM.HM5.T2.cycle_equals
boolean cycle_equals(T2 t)
Definition: HM5.java:673
com.cliffc.aa.util.SB.p
SB p(String s)
Definition: SB.java:13
com.cliffc.aa.HM.HM5.T2._con
Type _con
Definition: HM5.java:425
com.cliffc.aa.HM.HM5.T2.no_uf
boolean no_uf()
Definition: HM5.java:446
com.cliffc.aa.HM.HM5.T2._p
SB _p(SB sb, VBitSet visit, VBitSet dups)
Definition: HM5.java:771
com.cliffc.aa.HM.HM5.T2._args
T2[] _args
Definition: HM5.java:422
com.cliffc.aa.HM.HM5.T2.fresh_base
boolean fresh_base(T2 that, Worklist work)
Definition: HM5.java:547
com.cliffc.aa.HM.HM5.T2.is_leaf
boolean is_leaf()
Definition: HM5.java:445
com.cliffc.aa.HM.HM5.T2.vput
boolean vput(T2 that, boolean progress)
Definition: HM5.java:603
com.cliffc.aa.HM.HM5.T2.ODUPS
static final VBitSet ODUPS
Definition: HM5.java:625
com.cliffc.aa.HM.HM5.T2.unify_base
boolean unify_base(T2 that, Worklist work)
Definition: HM5.java:540
com.cliffc.aa.HM.HM5.T2.p
String p()
Definition: HM5.java:769
com.cliffc.aa.HM.HM5.T2.isa
boolean isa(String name)
Definition: HM5.java:447
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.HM5.T2.T2
T2(@NotNull String name, Type con, T2 @NotNull ... args)
Definition: HM5.java:437