aa
com.cliffc.aa.HM.HM9.Apply Class Reference
Inheritance diagram for com.cliffc.aa.HM.HM9.Apply:
[legend]
Collaboration diagram for com.cliffc.aa.HM.HM9.Apply:
[legend]

Public Member Functions

String p ()
 
final String toString ()
 

Package Functions

 Apply (Syntax fun, Syntax... args)
 
void add_hm_work (Worklist work)
 
void add_val_work (Syntax child, Worklist work)
 
T2 debug_find ()
 
T2 find ()
 
boolean hm (Worklist work)
 
boolean more_work (Worklist work)
 
final boolean more_work_impl (Worklist work)
 
final SB p0 (SB sb, VBitSet dups)
 
SB p1 (SB sb)
 
SB p2 (SB sb, VBitSet dups)
 
void prep_lookup_deps (Ident id)
 
int prep_tree (Syntax par, VStack nongen, Worklist work)
 
final void prep_tree_impl (Syntax par, VStack nongen, Worklist work, T2 t)
 
SB str (SB sb)
 
Type val (Worklist work)
 

Package Attributes

final Syntax[] _args
 
Type _flow
 
final Syntax _fun
 
T2 _hmt
 
VStack _nongen
 
Syntax _par
 

Private Member Functions

T2 is_if_nil ()
 

Static Private Attributes

static final HashMap< T2, TypeT2MAP = new HashMap<>()
 
static final NonBlockingHashMapLong< String > WDUPS = new NonBlockingHashMapLong<>()
 

Detailed Description

Definition at line 581 of file HM9.java.

Constructor & Destructor Documentation

◆ Apply()

com.cliffc.aa.HM.HM9.Apply.Apply ( Syntax  fun,
Syntax...  args 
)
package

Definition at line 584 of file HM9.java.

584 { _fun = fun; _args = args; }

References com.cliffc.aa.HM.HM9.Apply._args, and com.cliffc.aa.HM.HM9.Apply._fun.

Member Function Documentation

◆ add_hm_work()

void com.cliffc.aa.HM.HM9.Apply.add_hm_work ( Worklist  work)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Reimplemented in com.cliffc.aa.HM.HM9.Root.

Definition at line 649 of file HM9.java.

649  {
650  work.push(_par);
651  for( Syntax arg : _args ) work.push(arg);
652  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Syntax._par, and com.cliffc.aa.HM.HM9.Worklist.push().

Here is the call graph for this function:

◆ add_val_work()

void com.cliffc.aa.HM.HM9.Apply.add_val_work ( Syntax  child,
Worklist  work 
)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Definition at line 687 of file HM9.java.

687  {
688  // If function changes type, recompute self
689  if( child==_fun ) work.push(this);
690  // If an argument changes type, adjust the lambda arg types
691  Type flow = _fun._flow;
692  if( flow.above_center() ) return;
693  if( !(flow instanceof TypeFunPtr) ) return;
694  // Meet the actuals over the formals.
695  for( int fidx : ((TypeFunPtr)flow)._fidxs ) {
696  Lambda fun = Lambda.FUNS.get(fidx);
697  if( fun!=null ) {
698  fun.find().push_update(this); // Discovered as call-site; if the Lambda changes the Apply needs to be revisited.
699  for( int i=0; i<fun._types.length; i++ ) {
700  Type formal = fun._types[i];
701  Type actual = this instanceof Root ? Root.widen(fun.targ(i)) : _args[i]._flow;
702  Type rez = formal.meet(actual);
703  if( formal != rez ) {
704  fun._types[i] = rez;
705  work.addAll(fun.targ(i)._deps);
706  work.push(fun._body);
707  if( i==0 && fun instanceof If ) work.push(fun); // Specifically If might need more unification
708  }
709  }
710  }
711  }
712  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Lambda._body, com.cliffc.aa.HM.HM9.T2._deps, com.cliffc.aa.HM.HM9.Syntax._flow, com.cliffc.aa.HM.HM9.Apply._fun, com.cliffc.aa.HM.HM9.Lambda._types, com.cliffc.aa.type.Type< T extends Type< T >.above_center(), com.cliffc.aa.HM.HM9.Worklist.addAll(), com.cliffc.aa.HM.HM9.Syntax.find(), com.cliffc.aa.HM.HM9.Lambda.FUNS, com.cliffc.aa.type.Type< T extends Type< T >.meet(), com.cliffc.aa.HM.HM9.Worklist.push(), com.cliffc.aa.HM.HM9.T2.push_update(), com.cliffc.aa.HM.HM9.Lambda.targ(), and com.cliffc.aa.HM.HM9.Root.widen().

Referenced by com.cliffc.aa.HM.HM9.Root.val().

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

◆ debug_find()

T2 com.cliffc.aa.HM.HM9.Syntax.debug_find ( )
packageinherited

Definition at line 329 of file HM9.java.

329 { return _hmt.debug_find(); } // Find, without the roll-up

References com.cliffc.aa.HM.HM9.Syntax._hmt, and com.cliffc.aa.HM.HM9.T2.debug_find().

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

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

◆ find()

◆ hm()

boolean com.cliffc.aa.HM.HM9.Apply.hm ( Worklist  work)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Reimplemented in com.cliffc.aa.HM.HM9.Root.

Definition at line 600 of file HM9.java.

600  {
601  boolean progress = false;
602 
603  // Discover not-nil in the trivial case of directly using the 'if'
604  // primitive against a T2.is_struct(). Will not work if 'if' is some
605  // more hidden or complex function (e.q. '&&' or '||') or the predicate
606  // implies not-null on some other struct.
607  T2 str = is_if_nil();
608  if( str!=null && str.is_struct() ) {
609  BitsAlias aliases = str._alias;
610  if( !aliases.test(0) ) {
611  str._alias = str._alias.meet_nil(); // Nil is allowed on the tested value
612  progress = true;
613  if( work==null ) return true;
614  work.addAll(str._deps);
615  }
616  }
617 
618  // Progress if:
619  // _fun is not a function
620  // any arg-pair-unifies make progress
621  // this-unify-_fun.return makes progress
622  T2 tfun = _fun.find();
623  if( !tfun.is_fun() ) { // Not a function, so progress
624  if( tfun.is_err() ) return find().unify(tfun,work);
625  if( work==null ) return true; // Will-progress & just-testing
626  T2[] targs = new T2[_args.length+1];
627  for( int i=0; i<_args.length; i++ )
628  targs[i] = _args[i].find();
629  targs[_args.length] = find(); // Return
630  T2 nfun = T2.make_fun(BitsFun.FULL,targs);
631  progress = tfun.unify(nfun,work);
632  return tfun.find().is_err() ? find().unify(tfun.find(),work) : progress;
633  }
634 
635  if( tfun._args.length != _args.length+1 )
636  progress |= T2.make_err("Mismatched argument lengths").unify(find(),work);
637  // Check for progress amongst arg pairs
638  for( int i=0; i<_args.length; i++ ) {
639  progress |= tfun.args(i).unify(_args[i].find(),work);
640  if( progress && work==null ) return true; // Will-progress & just-testing early exit
641  if( (tfun=tfun.find()).is_err() ) return find().unify(tfun,work);
642  }
643  // Check for progress on the return
644  progress |= tfun.args(_args.length).unify(find(),work);
645  if( (tfun=tfun.find()).is_err() ) return find().unify(tfun,work);
646 
647  return progress;
648  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.T2._args, com.cliffc.aa.HM.HM9.Apply._fun, com.cliffc.aa.HM.HM9.Worklist.addAll(), com.cliffc.aa.HM.HM9.T2.args(), com.cliffc.aa.HM.HM9.Syntax.find(), com.cliffc.aa.HM.HM9.T2.find(), com.cliffc.aa.type.BitsFun.FULL, com.cliffc.aa.HM.HM9.T2.is_err(), com.cliffc.aa.HM.HM9.T2.is_fun(), com.cliffc.aa.HM.HM9.Apply.is_if_nil(), com.cliffc.aa.HM.HM9.T2.make_err(), com.cliffc.aa.HM.HM9.T2.make_fun(), com.cliffc.aa.HM.HM9.Apply.str(), com.cliffc.aa.type.Bits< B extends Bits< B >.test(), and com.cliffc.aa.HM.HM9.T2.unify().

Here is the call graph for this function:

◆ is_if_nil()

T2 com.cliffc.aa.HM.HM9.Apply.is_if_nil ( )
private

Definition at line 729 of file HM9.java.

729  {
730  return _fun instanceof If && _args[0] instanceof Ident ? _args[0].find() : null;
731  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Apply._fun, and com.cliffc.aa.HM.HM9.Syntax.find().

Referenced by com.cliffc.aa.HM.HM9.Apply.hm(), and com.cliffc.aa.HM.HM9.Apply.prep_tree().

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

◆ more_work()

boolean com.cliffc.aa.HM.HM9.Apply.more_work ( Worklist  work)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Definition at line 722 of file HM9.java.

722  {
723  if( !more_work_impl(work) ) return false;
724  if( !_fun.more_work(work) ) return false;
725  for( Syntax arg : _args ) if( !arg.more_work(work) ) return false;
726  return true;
727  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Apply._fun, com.cliffc.aa.HM.HM9.Syntax.more_work(), and com.cliffc.aa.HM.HM9.Syntax.more_work_impl().

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

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

◆ more_work_impl()

final boolean com.cliffc.aa.HM.HM9.Syntax.more_work_impl ( Worklist  work)
packageinherited

Definition at line 362 of file HM9.java.

362  {
363  if( work.has(this) ) return true;
364  if( DO_HM && hm(null) ) // Any more HM work?
365  return false; // Found HM work not on worklist
366  if( DO_GCP && val(null)!=_flow )
367  return false; // Found GCP work not on worklist
368  return true;
369  }

References com.cliffc.aa.HM.HM9.Syntax._flow, com.cliffc.aa.HM.HM9.DO_GCP, com.cliffc.aa.HM.HM9.DO_HM, com.cliffc.aa.HM.HM9.Worklist.has(), com.cliffc.aa.HM.HM9.Syntax.hm(), and com.cliffc.aa.HM.HM9.Syntax.val().

Referenced by com.cliffc.aa.HM.HM9.Con.more_work(), com.cliffc.aa.HM.HM9.Ident.more_work(), com.cliffc.aa.HM.HM9.Lambda.more_work(), com.cliffc.aa.HM.HM9.Let.more_work(), com.cliffc.aa.HM.HM9.Apply.more_work(), com.cliffc.aa.HM.HM9.Struct.more_work(), com.cliffc.aa.HM.HM9.Field.more_work(), and com.cliffc.aa.HM.HM9.PrimSyn.more_work().

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

◆ p()

String com.cliffc.aa.HM.HM9.Syntax.p ( )
inherited

Definition at line 374 of file HM9.java.

374 { return p0(new SB(), new VBitSet()).toString(); }

References com.cliffc.aa.HM.HM9.Syntax.p0(), and com.cliffc.aa.util.SB.toString().

Here is the call graph for this function:

◆ p0()

final SB com.cliffc.aa.HM.HM9.Syntax.p0 ( SB  sb,
VBitSet  dups 
)
packageinherited

Definition at line 375 of file HM9.java.

375  {
376  _hmt.get_dups(dups);
377  VBitSet visit = new VBitSet();
378  p1(sb.i());
379  if( DO_HM ) _hmt .str(sb.p(", HM="), visit,dups);
380  if( DO_GCP ) _flow.str(sb.p(", CCP="),visit.clr(),null,false);
381  sb.nl();
382  return p2(sb.ii(1),dups).di(1);
383  }

References com.cliffc.aa.HM.HM9.Syntax._flow, com.cliffc.aa.HM.HM9.Syntax._hmt, com.cliffc.aa.util.VBitSet.clr(), com.cliffc.aa.util.SB.di(), com.cliffc.aa.HM.HM9.DO_GCP, com.cliffc.aa.HM.HM9.DO_HM, com.cliffc.aa.HM.HM9.T2.get_dups(), com.cliffc.aa.util.SB.i(), com.cliffc.aa.util.SB.ii(), com.cliffc.aa.util.SB.nl(), com.cliffc.aa.util.SB.p(), com.cliffc.aa.HM.HM9.Syntax.p1(), com.cliffc.aa.HM.HM9.Syntax.p2(), com.cliffc.aa.type.Type< T extends Type< T >.str(), and com.cliffc.aa.HM.HM9.T2.str().

Referenced by com.cliffc.aa.HM.HM9.Syntax.p(), com.cliffc.aa.HM.HM9.Lambda.p2(), com.cliffc.aa.HM.HM9.Let.p2(), com.cliffc.aa.HM.HM9.Apply.p2(), com.cliffc.aa.HM.HM9.Struct.p2(), and com.cliffc.aa.HM.HM9.Field.p2().

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

◆ p1()

SB com.cliffc.aa.HM.HM9.Apply.p1 ( SB  sb)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Definition at line 591 of file HM9.java.

591 { return sb.p("(...)"); }

References com.cliffc.aa.util.SB.p().

Here is the call graph for this function:

◆ p2()

SB com.cliffc.aa.HM.HM9.Apply.p2 ( SB  sb,
VBitSet  dups 
)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Definition at line 592 of file HM9.java.

592  {
593  _fun.p0(sb,dups);
594  for( Syntax arg : _args ) arg.p0(sb,dups);
595  return sb;
596  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Apply._fun, and com.cliffc.aa.HM.HM9.Syntax.p0().

Here is the call graph for this function:

◆ prep_lookup_deps()

void com.cliffc.aa.HM.HM9.Syntax.prep_lookup_deps ( Ident  id)
packageinherited

Reimplemented in com.cliffc.aa.HM.HM9.Let, and com.cliffc.aa.HM.HM9.Lambda.

Definition at line 358 of file HM9.java.

358 {}

◆ prep_tree()

int com.cliffc.aa.HM.HM9.Apply.prep_tree ( Syntax  par,
VStack  nongen,
Worklist  work 
)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Definition at line 714 of file HM9.java.

714  {
715  prep_tree_impl(par,nongen,work,T2.make_leaf());
716  int cnt = 1+_fun.prep_tree(this,nongen,work);
717  for( Syntax arg : _args ) cnt += arg.prep_tree(this,nongen,work);
718  T2 str = is_if_nil();
719  if( str!=null ) str.push_update(this);
720  return cnt;
721  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Apply._fun, com.cliffc.aa.HM.HM9.Apply.is_if_nil(), com.cliffc.aa.HM.HM9.T2.make_leaf(), com.cliffc.aa.HM.HM9.Syntax.prep_tree(), com.cliffc.aa.HM.HM9.Syntax.prep_tree_impl(), and com.cliffc.aa.HM.HM9.Apply.str().

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

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

◆ prep_tree_impl()

final void com.cliffc.aa.HM.HM9.Syntax.prep_tree_impl ( Syntax  par,
VStack  nongen,
Worklist  work,
T2  t 
)
packageinherited

Definition at line 351 of file HM9.java.

351  {
352  _par = par;
353  _hmt = t;
354  _flow= Type.XSCALAR;
355  _nongen = nongen;
356  work.push(this);
357  }

References com.cliffc.aa.HM.HM9.Syntax._flow, com.cliffc.aa.HM.HM9.Syntax._hmt, com.cliffc.aa.HM.HM9.Syntax._nongen, com.cliffc.aa.HM.HM9.Syntax._par, com.cliffc.aa.HM.HM9.Worklist.push(), and com.cliffc.aa.type.Type< T extends Type< T >.XSCALAR.

Referenced by com.cliffc.aa.HM.HM9.Con.prep_tree(), com.cliffc.aa.HM.HM9.Ident.prep_tree(), com.cliffc.aa.HM.HM9.Lambda.prep_tree(), com.cliffc.aa.HM.HM9.Let.prep_tree(), com.cliffc.aa.HM.HM9.Apply.prep_tree(), com.cliffc.aa.HM.HM9.Struct.prep_tree(), com.cliffc.aa.HM.HM9.Field.prep_tree(), and com.cliffc.aa.HM.HM9.PrimSyn.prep_tree().

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

◆ str()

SB com.cliffc.aa.HM.HM9.Apply.str ( SB  sb)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Reimplemented in com.cliffc.aa.HM.HM9.Root.

Definition at line 585 of file HM9.java.

585  {
586  _fun.str(sb.p("(")).p(" ");
587  for( Syntax arg : _args )
588  arg.str(sb).p(" ");
589  return sb.unchar().p(")");
590  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.HM.HM9.Apply._fun, com.cliffc.aa.util.SB.p(), com.cliffc.aa.HM.HM9.Syntax.str(), and com.cliffc.aa.util.SB.unchar().

Referenced by com.cliffc.aa.HM.HM9.Apply.hm(), and com.cliffc.aa.HM.HM9.Apply.prep_tree().

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

◆ toString()

final String com.cliffc.aa.HM.HM9.Syntax.toString ( )
inherited

Definition at line 371 of file HM9.java.

371 { return str(new SB()).toString(); }

References com.cliffc.aa.HM.HM9.Syntax.str(), and com.cliffc.aa.util.SB.toString().

Referenced by com.cliffc.aa.HM.HM9.Lambda.p1().

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

◆ val()

Type com.cliffc.aa.HM.HM9.Apply.val ( Worklist  work)
package

Reimplemented from com.cliffc.aa.HM.HM9.Syntax.

Reimplemented in com.cliffc.aa.HM.HM9.Root.

Definition at line 655 of file HM9.java.

655  {
656  Type flow = _fun._flow;
657  if( flow.above_center() ) return Type.XSCALAR;
658  if( !(flow instanceof TypeFunPtr) ) return Type.SCALAR;
659  TypeFunPtr tfp = (TypeFunPtr)flow;
660  // Have some functions, meet over their returns.
661  Type rez = Type.XSCALAR;
662  if( tfp._fidxs==BitsFun.FULL ) rez = Type.SCALAR;
663  else
664  for( int fidx : tfp._fidxs )
665  rez = rez.meet(Lambda.FUNS.get(fidx).apply(_args));
666  if( rez==Type.XSCALAR ) // Fast path cutout, no improvement possible
667  return rez;
668 
669  // Attempt to lift the result, based on HM types. Walk the input HM type
670  // and CCP flow type in parallel and create a mapping. Then walk the
671  // output HM type and CCP flow type in parallel, and join output CCP
672  // types with the matching input CCP type.
673  if( DO_HM ) {
674  T2MAP.clear(); WDUPS.clear();
675  // Walk the inputs, building a mapping
677  for( Syntax arg : _args )
678  { WDUPS.clear(); arg.find().walk_types_in(arg._flow); }
679  // Walk the outputs, building an improved result
680  Type rez2 = find().walk_types_out(rez);
681  rez = rez2.join(rez); // Lift result
682  if( !_flow.isa(rez) )
683  rez = _flow; // TODO: Cheaty force monotonic
684  }
685  return rez;
686  }

References com.cliffc.aa.HM.HM9.Apply._args, com.cliffc.aa.type.TypeFunPtr._fidxs, com.cliffc.aa.HM.HM9.Syntax._flow, com.cliffc.aa.HM.HM9.Apply._fun, com.cliffc.aa.type.Type< T extends Type< T >.above_center(), com.cliffc.aa.util.NonBlockingHashMapLong< TypeV >.clear(), com.cliffc.aa.HM.HM9.DO_HM, com.cliffc.aa.HM.HM9.Syntax.find(), com.cliffc.aa.type.BitsFun.FULL, com.cliffc.aa.HM.HM9.Lambda.FUNS, com.cliffc.aa.type.Type< T extends Type< T >.isa(), com.cliffc.aa.type.Type< T extends Type< T >.join(), com.cliffc.aa.type.Type< T extends Type< T >.meet(), com.cliffc.aa.type.Type< T extends Type< T >.SCALAR, com.cliffc.aa.HM.HM9.Apply.T2MAP, com.cliffc.aa.HM.HM9.T2.walk_types_in(), com.cliffc.aa.HM.HM9.T2.walk_types_out(), com.cliffc.aa.HM.HM9.Apply.WDUPS, and com.cliffc.aa.type.Type< T extends Type< T >.XSCALAR.

Here is the call graph for this function:

Member Data Documentation

◆ _args

◆ _flow

◆ _fun

◆ _hmt

◆ _nongen

VStack com.cliffc.aa.HM.HM9.Syntax._nongen
packageinherited

◆ _par

◆ T2MAP

final HashMap<T2,Type> com.cliffc.aa.HM.HM9.Apply.T2MAP = new HashMap<>()
staticprivate

◆ WDUPS

final NonBlockingHashMapLong<String> com.cliffc.aa.HM.HM9.Apply.WDUPS = new NonBlockingHashMapLong<>()
staticprivate

The documentation for this class was generated from the following file:
com.cliffc.aa.HM.HM9.Syntax.prep_tree_impl
final void prep_tree_impl(Syntax par, VStack nongen, Worklist work, T2 t)
Definition: HM9.java:351
com.cliffc.aa.HM.HM9.T2.walk_types_out
Type walk_types_out(Type t)
Definition: HM9.java:1953
com.cliffc.aa.type.TypeFunPtr
Definition: TypeFunPtr.java:23
com.cliffc.aa.type.Type.isa
boolean isa(Type t)
Definition: Type.java:623
com.cliffc.aa.HM.HM9.Syntax.hm
abstract boolean hm(Worklist work)
com.cliffc.aa.type.Type.join
Type join(Type t)
Definition: Type.java:619
com.cliffc.aa.HM.HM9.Syntax.more_work
abstract boolean more_work(Worklist work)
com.cliffc.aa.util.SB.ii
SB ii(int i)
Definition: SB.java:44
com.cliffc.aa.HM.HM9.Apply._fun
final Syntax _fun
Definition: HM9.java:582
com.cliffc.aa.HM.HM9.Syntax.find
T2 find()
Definition: HM9.java:325
com.cliffc.aa.type.Type.SCALAR
static final Type SCALAR
Definition: Type.java:328
com.cliffc.aa.util.SB.di
SB di(int i)
Definition: SB.java:46
com.cliffc.aa.type.Type.widen
Type widen()
Definition: Type.java:828
com.cliffc.aa.type.Type.XSCALAR
static final Type XSCALAR
Definition: Type.java:329
com.cliffc.aa.HM.HM9.Syntax.p0
final SB p0(SB sb, VBitSet dups)
Definition: HM9.java:375
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.util.NonBlockingHashMapLong.clear
void clear()
Removes all of the mappings from this map.
Definition: NonBlockingHashMapLong.java:332
com.cliffc.aa.type.BitsFun.FULL
static final BitsFun FULL
Definition: BitsFun.java:33
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.type.TypeFunPtr._fidxs
BitsFun _fidxs
Definition: TypeFunPtr.java:26
com.cliffc.aa.util.VBitSet.clr
VBitSet clr()
Definition: VBitSet.java:9
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.type.Bits.test
static boolean test(long[] bits, int i)
Definition: Bits.java:224
com.cliffc.aa.type.Type.str
SB str(SB sb, VBitSet dups, TypeMem mem, boolean debug)
Definition: Type.java:131
com.cliffc.aa.HM.HM9.Syntax.p1
abstract SB p1(SB sb)
com.cliffc.aa.util.SB.unchar
SB unchar()
Definition: SB.java:58
com.cliffc.aa.HM.HM9.T2.find
T2 find()
Definition: HM9.java:1355
com.cliffc.aa.type.Type.above_center
boolean above_center()
Definition: Type.java:741
com.cliffc.aa.HM.HM9.Apply._args
final Syntax[] _args
Definition: HM9.java:583
com.cliffc.aa.HM.HM9.Syntax._hmt
T2 _hmt
Definition: HM9.java:324
com.cliffc.aa.HM.HM9.Apply.T2MAP
static final HashMap< T2, Type > T2MAP
Definition: HM9.java:653
com.cliffc.aa.HM.HM9.T2.debug_find
T2 debug_find()
Definition: HM9.java:1344
com.cliffc.aa.HM.HM9.Syntax.more_work_impl
final boolean more_work_impl(Worklist work)
Definition: HM9.java:362
com.cliffc.aa.HM.HM9.T2.str
SB str(SB sb, VBitSet visit, VBitSet dups)
Definition: HM9.java:2040
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
com.cliffc.aa.HM.HM9.Apply.is_if_nil
T2 is_if_nil()
Definition: HM9.java:729
com.cliffc.aa.type.BitsFun
Definition: BitsFun.java:7
com.cliffc.aa.util.SB
Tight/tiny StringBuilder wrapper.
Definition: SB.java:8
com.cliffc.aa.HM.HM9.Syntax.str
abstract SB str(SB sb)
com.cliffc.aa.HM.HM9.Apply.str
SB str(SB sb)
Definition: HM9.java:585
com.cliffc.aa.util.SB.nl
SB nl()
Definition: SB.java:48
com.cliffc.aa.util.SB.p
SB p(String s)
Definition: SB.java:13
com.cliffc.aa.HM.HM9.T2.walk_types_in
Type walk_types_in(Type t)
Definition: HM9.java:1903
com.cliffc.aa.HM.HM9.Syntax.prep_tree
abstract int prep_tree(Syntax par, VStack nongen, Worklist work)
com.cliffc.aa.HM.HM9.Syntax._nongen
VStack _nongen
Definition: HM9.java:323
com.cliffc.aa.util.SB.i
SB i(int d)
Definition: SB.java:38
com.cliffc.aa.HM.HM9.Apply.WDUPS
static final NonBlockingHashMapLong< String > WDUPS
Definition: HM9.java:654
com.cliffc.aa.HM.HM9.DO_GCP
static final boolean DO_GCP
Definition: HM9.java:79
com.cliffc.aa.HM.HM9.T2.unify
boolean unify(T2 that, Worklist work)
Definition: HM9.java:1528
com.cliffc.aa.HM.HM9.Syntax.p2
abstract SB p2(SB sb, VBitSet dups)
com.cliffc.aa.HM.HM9.DO_HM
static final boolean DO_HM
Definition: HM9.java:78
com.cliffc.aa.HM.HM9.Syntax._flow
Type _flow
Definition: HM9.java:332
com.cliffc.aa.util.SB.toString
String toString()
Definition: SB.java:62
com.cliffc.aa.HM.HM9.T2.get_dups
VBitSet get_dups(VBitSet dups)
Definition: HM9.java:2025
com.cliffc.aa.HM.HM9.Syntax.val
abstract Type val(Worklist work)
com.cliffc.aa.HM.HM9.Syntax._par
Syntax _par
Definition: HM9.java:322