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

Public Member Functions

String p ()
 
final String toString ()
 

Package Functions

 Apply (Syntax fun, Syntax... args)
 
void add_kids (Worklist work)
 
void add_occurs (Worklist work)
 
T2 debug_find ()
 
T2 find ()
 
boolean hm (Worklist work)
 
T2 lookup (String name)
 
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)
 

Package Attributes

final Syntax[] _args
 
final Syntax _fun
 
VStack _nongen
 
Syntax _par
 
T2 _t
 

Detailed Description

Definition at line 340 of file HM5.java.

Constructor & Destructor Documentation

◆ Apply()

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

Definition at line 343 of file HM5.java.

343 { _fun = fun; _args = args; }

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

Member Function Documentation

◆ add_kids()

void com.cliffc.aa.HM.HM5.Apply.add_kids ( Worklist  work)
package

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

Definition at line 390 of file HM5.java.

390 { for( Syntax arg : _args ) work.push(arg); }

References com.cliffc.aa.HM.HM5.Apply._args, and com.cliffc.aa.HM.HM5.Worklist.push().

Here is the call graph for this function:

◆ add_occurs()

void com.cliffc.aa.HM.HM5.Syntax.add_occurs ( Worklist  work)
packageinherited

Reimplemented in com.cliffc.aa.HM.HM5.Let, com.cliffc.aa.HM.HM5.Lambda2, com.cliffc.aa.HM.HM5.Lambda, and com.cliffc.aa.HM.HM5.Ident.

Definition at line 143 of file HM5.java.

143 {}

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

Here is the caller graph for this function:

◆ debug_find()

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

Definition at line 127 of file HM5.java.

127 { return _t.find(); } // Find, without the roll-up

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

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

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

◆ find()

T2 com.cliffc.aa.HM.HM5.Syntax.find ( )
packageinherited

Definition at line 123 of file HM5.java.

123  { // U-F find
124  T2 t = _t.find();
125  return t==_t ? t : (_t=t);
126  }

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

Referenced by com.cliffc.aa.HM.HM5.T2._occurs_in(), com.cliffc.aa.HM.HM5.Lambda.add_occurs(), com.cliffc.aa.HM.HM5.Lambda2.add_occurs(), com.cliffc.aa.HM.HM5.Let.add_occurs(), com.cliffc.aa.HM.HM5.Con.hm(), com.cliffc.aa.HM.HM5.Ident.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:

◆ hm()

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

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

Definition at line 357 of file HM5.java.

357  {
358  // Unifiying these: make_fun(this.arg0 this.arg1 -> new )
359  // _fun{_fun.arg0 _fun.arg1 -> _fun.rez}
360  // Progress if:
361  // _fun is not a function
362  // any arg-pair-unifies make progress
363  // this-unify-_fun.return makes progress
364 
365  T2 tfun = _fun.find();
366  if( !tfun.is_fun() ) {
367  if( work==null ) return true; // Will-progress & just-testing
368  T2[] targs = new T2[_args.length+1];
369  for( int i=0; i<_args.length; i++ )
370  targs[i] = _args[i].find();
371  targs[_args.length] = find(); // Return
372  T2 nfun = T2.make_fun(targs);
373  tfun.unify(nfun,work);
374  return true; // Always progress (since forcing tfun to be a fun)
375  }
376 
377  if( tfun._args.length != _args.length+1 )
378  throw new RuntimeException("Mismatched argument lengths");
379  // Check for progress amongst arg pairs
380  boolean progress = false;
381  for( int i=0; i<_args.length; i++ ) {
382  progress |= tfun.args(i).unify(_args[i].find(),work);
383  if( progress && work==null )
384  return true; // Will-progress & just-testing early exit
385  }
386  progress |= tfun.args(_args.length).unify(find(),work);
387  return progress;
388  }

References com.cliffc.aa.HM.HM5.Apply._args, com.cliffc.aa.HM.HM5.T2._args, com.cliffc.aa.HM.HM5.Apply._fun, com.cliffc.aa.HM.HM5.T2.args(), com.cliffc.aa.HM.HM5.Syntax.find(), com.cliffc.aa.HM.HM5.T2.is_fun(), com.cliffc.aa.HM.HM5.T2.make_fun(), and com.cliffc.aa.HM.HM5.T2.unify().

Here is the call graph for this function:

◆ lookup()

T2 com.cliffc.aa.HM.HM5.Apply.lookup ( String  name)
package

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

Definition at line 389 of file HM5.java.

389 { return _par==null ? null : _par.lookup(name); }

References com.cliffc.aa.HM.HM5.Syntax._par, and com.cliffc.aa.HM.HM5.Syntax.lookup().

Here is the call graph for this function:

◆ more_work()

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

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

Definition at line 398 of file HM5.java.

398  {
399  if( !more_work_impl(work) ) return false;
400  if( !_fun.more_work(work) ) return false;
401  for( Syntax arg : _args ) if( !arg.more_work(work) ) return false;
402  return true;
403  }

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

Here is the call graph for this function:

◆ more_work_impl()

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

Definition at line 147 of file HM5.java.

147  {
148  return work.has(this) || !hm(null); // Either on worklist, or no-progress
149  }

References com.cliffc.aa.HM.HM5.Worklist.has(), and com.cliffc.aa.HM.HM5.Syntax.hm().

Referenced by com.cliffc.aa.HM.HM5.Con.more_work(), com.cliffc.aa.HM.HM5.Ident.more_work(), com.cliffc.aa.HM.HM5.Lambda.more_work(), com.cliffc.aa.HM.HM5.Lambda2.more_work(), com.cliffc.aa.HM.HM5.Let.more_work(), and com.cliffc.aa.HM.HM5.Apply.more_work().

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

◆ p()

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

Definition at line 154 of file HM5.java.

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

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

Here is the call graph for this function:

◆ p0()

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

Definition at line 155 of file HM5.java.

155  {
156  _t.get_dups(dups);
157  _t.str(p1(sb.i()).p(" "), new VBitSet(),dups).nl();
158  return p2(sb.ii(1),dups).di(1);
159  }

References com.cliffc.aa.HM.HM5.Syntax._t, com.cliffc.aa.util.SB.di(), com.cliffc.aa.HM.HM5.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.HM5.Syntax.p1(), com.cliffc.aa.HM.HM5.Syntax.p2(), and com.cliffc.aa.HM.HM5.T2.str().

Referenced by com.cliffc.aa.HM.HM5.Syntax.p(), com.cliffc.aa.HM.HM5.Lambda.p2(), com.cliffc.aa.HM.HM5.Lambda2.p2(), com.cliffc.aa.HM.HM5.Let.p2(), and com.cliffc.aa.HM.HM5.Apply.p2().

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

◆ p1()

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

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

Definition at line 350 of file HM5.java.

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

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

Here is the call graph for this function:

◆ p2()

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

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

Definition at line 351 of file HM5.java.

351  {
352  _fun.p0(sb,dups);
353  for( Syntax arg : _args ) arg.p0(sb,dups);
354  return sb;
355  }

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

Here is the call graph for this function:

◆ prep_lookup_deps()

void com.cliffc.aa.HM.HM5.Apply.prep_lookup_deps ( Ident  id)
package

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

Definition at line 397 of file HM5.java.

397 { }

◆ prep_tree()

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

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

Definition at line 391 of file HM5.java.

391  {
392  prep_tree_impl(par,nongen,work,T2.make_leaf());
393  int cnt = _fun.prep_tree(this,nongen,work);
394  for( Syntax arg : _args ) cnt += arg.prep_tree(this,nongen,work);
395  return cnt;
396  }

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

Here is the call graph for this function:

◆ prep_tree_impl()

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

Definition at line 137 of file HM5.java.

137 { _par=par; _t=t; _nongen = nongen; work.push(this); }

References com.cliffc.aa.HM.HM5.Syntax._nongen, com.cliffc.aa.HM.HM5.Syntax._par, com.cliffc.aa.HM.HM5.Syntax._t, and com.cliffc.aa.HM.HM5.Worklist.push().

Referenced by com.cliffc.aa.HM.HM5.Con.prep_tree(), com.cliffc.aa.HM.HM5.Ident.prep_tree(), com.cliffc.aa.HM.HM5.Lambda.prep_tree(), com.cliffc.aa.HM.HM5.Lambda2.prep_tree(), com.cliffc.aa.HM.HM5.Let.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:

◆ str()

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

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

Definition at line 344 of file HM5.java.

344  {
345  _fun.str(sb.p("(")).p(" ");
346  for( Syntax arg : _args )
347  arg.str(sb).p(" ");
348  return sb.unchar().p(")");
349  }

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

Here is the call graph for this function:

◆ toString()

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

Definition at line 151 of file HM5.java.

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

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

Here is the call graph for this function:

Member Data Documentation

◆ _args

◆ _fun

◆ _nongen

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

◆ _par

◆ _t


The documentation for this class was generated from the following file:
com.cliffc.aa.util.SB.ii
SB ii(int i)
Definition: SB.java:44
com.cliffc.aa.util.SB.di
SB di(int i)
Definition: SB.java:46
com.cliffc.aa.HM.HM5.T2.str
SB str(SB sb, VBitSet visit, VBitSet dups)
Definition: HM5.java:745
com.cliffc.aa.HM.HM5.Apply._args
final Syntax[] _args
Definition: HM5.java:342
com.cliffc.aa.HM.HM5.Syntax.hm
abstract boolean hm(Worklist work)
com.cliffc.aa.HM.HM5.T2.find
T2 find()
Definition: HM5.java:452
com.cliffc.aa.HM.HM5.Syntax.prep_tree
abstract int prep_tree(Syntax par, VStack nongen, Worklist work)
com.cliffc.aa.util.SB.unchar
SB unchar()
Definition: SB.java:58
com.cliffc.aa.HM.HM5.T2.get_dups
VBitSet get_dups(VBitSet dups)
Definition: HM5.java:732
com.cliffc.aa.HM.HM5.Syntax.p0
final SB p0(SB sb, VBitSet dups)
Definition: HM5.java:155
com.cliffc.aa.HM.HM5.Syntax.lookup
abstract T2 lookup(String name)
com.cliffc.aa.HM.HM5.Syntax.find
T2 find()
Definition: HM5.java:123
com.cliffc.aa.HM.HM5.Syntax._t
T2 _t
Definition: HM5.java:122
com.cliffc.aa.HM.HM5.Syntax._nongen
VStack _nongen
Definition: HM5.java:121
com.cliffc.aa.HM.HM5.Syntax.p1
abstract SB p1(SB sb)
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
com.cliffc.aa.HM.HM5.Syntax.p2
abstract SB p2(SB sb, VBitSet dups)
com.cliffc.aa.util.SB
Tight/tiny StringBuilder wrapper.
Definition: SB.java:8
com.cliffc.aa.HM.HM5.Syntax.more_work
abstract boolean more_work(Worklist work)
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.HM5.Syntax.str
abstract SB str(SB sb)
com.cliffc.aa.util.SB.i
SB i(int d)
Definition: SB.java:38
com.cliffc.aa.HM.HM5.Apply._fun
final Syntax _fun
Definition: HM5.java:341
com.cliffc.aa.util.SB.toString
String toString()
Definition: SB.java:62
com.cliffc.aa.HM.HM5.Syntax.more_work_impl
final boolean more_work_impl(Worklist work)
Definition: HM5.java:147
com.cliffc.aa.HM.HM5.Syntax._par
Syntax _par
Definition: HM5.java:120
com.cliffc.aa.HM.HM5.Syntax.prep_tree_impl
final void prep_tree_impl(Syntax par, VStack nongen, Worklist work, T2 t)
Definition: HM5.java:137