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

Public Member Functions

String p ()
 
final String toString ()
 

Package Functions

 Lambda2 (String arg0, String arg1, Syntax body)
 
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)
 
T2 targ0 ()
 
T2 targ1 ()
 

Package Attributes

final String _arg0
 
final String _arg1
 
final Syntax _body
 
VStack _nongen
 
Syntax _par
 
T2 _t
 
T2 _targ0
 
T2 _targ1
 

Detailed Description

Definition at line 346 of file HM6.java.

Constructor & Destructor Documentation

◆ Lambda2()

com.cliffc.aa.HM.HM6.Lambda2.Lambda2 ( String  arg0,
String  arg1,
Syntax  body 
)
package

Definition at line 351 of file HM6.java.

351 { _arg0=arg0; _arg1 = arg1; _body=body; _targ0 = T2.make_leaf(); _targ1 = T2.make_leaf(); }

References com.cliffc.aa.HM.HM6.Lambda2._arg0, com.cliffc.aa.HM.HM6.Lambda2._arg1, com.cliffc.aa.HM.HM6.Lambda2._body, com.cliffc.aa.HM.HM6.Lambda2._targ0, com.cliffc.aa.HM.HM6.Lambda2._targ1, and com.cliffc.aa.HM.HM6.T2.make_leaf().

Here is the call graph for this function:

Member Function Documentation

◆ add_kids()

void com.cliffc.aa.HM.HM6.Lambda2.add_kids ( Worklist  work)
package

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

Definition at line 374 of file HM6.java.

374 { work.push(_body); }

References com.cliffc.aa.HM.HM6.Lambda2._body, and com.cliffc.aa.HM.HM6.Worklist.push().

Here is the call graph for this function:

◆ add_occurs()

void com.cliffc.aa.HM.HM6.Lambda2.add_occurs ( Worklist  work)
package

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

Definition at line 375 of file HM6.java.

375  {
376  if( targ0().occurs_in_type(find()) ) work.addAll(_targ0._deps);
377  if( targ1().occurs_in_type(find()) ) work.addAll(_targ1._deps);
378  }

References com.cliffc.aa.HM.HM6.T2._deps, com.cliffc.aa.HM.HM6.Lambda2._targ0, com.cliffc.aa.HM.HM6.Lambda2._targ1, com.cliffc.aa.HM.HM6.Worklist.addAll(), com.cliffc.aa.HM.HM6.Syntax.find(), com.cliffc.aa.HM.HM6.Lambda2.targ0(), and com.cliffc.aa.HM.HM6.Lambda2.targ1().

Here is the call graph for this function:

◆ debug_find()

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

Definition at line 218 of file HM6.java.

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

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

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

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

◆ find()

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

Definition at line 214 of file HM6.java.

214  { // U-F find
215  T2 t = _t.find();
216  return t==_t ? t : (_t=t);
217  }

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

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

◆ hm()

boolean com.cliffc.aa.HM.HM6.Lambda2.hm ( Worklist  work)
package

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

Definition at line 357 of file HM6.java.

357  {
358  // The normal lambda work
359  T2 old = find();
360  if( old.is_fun() && // Already a function? Compare-by-parts
361  !old.args(0).unify(targ0() ,work) &&
362  !old.args(1).unify(targ1() ,work) &&
363  !old.args(2).unify(_body.find(),work) )
364  return false;
365  // Make a new T2 for progress
366  T2 fun = T2.make_fun(targ0(),targ1(),_body.find());
367  return old.unify(fun,work);
368  }

References com.cliffc.aa.HM.HM6.Lambda2._body, com.cliffc.aa.HM.HM6.T2.args(), com.cliffc.aa.HM.HM6.Syntax.find(), com.cliffc.aa.HM.HM6.T2.is_fun(), com.cliffc.aa.HM.HM6.T2.make_fun(), com.cliffc.aa.HM.HM6.Lambda2.targ0(), com.cliffc.aa.HM.HM6.Lambda2.targ1(), and com.cliffc.aa.HM.HM6.T2.unify().

Here is the call graph for this function:

◆ lookup()

T2 com.cliffc.aa.HM.HM6.Lambda2.lookup ( String  name)
package

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

Definition at line 369 of file HM6.java.

369  {
370  if( Util.eq(_arg0,name) ) return targ0();
371  if( Util.eq(_arg1,name) ) return targ1();
372  return _par==null ? null : _par.lookup(name);
373  }

References com.cliffc.aa.HM.HM6.Lambda2._arg0, com.cliffc.aa.HM.HM6.Lambda2._arg1, com.cliffc.aa.HM.HM6.Syntax._par, com.cliffc.aa.util.Util.eq(), com.cliffc.aa.HM.HM6.Syntax.lookup(), com.cliffc.aa.HM.HM6.Lambda2.targ0(), and com.cliffc.aa.HM.HM6.Lambda2.targ1().

Here is the call graph for this function:

◆ more_work()

boolean com.cliffc.aa.HM.HM6.Lambda2.more_work ( Worklist  work)
package

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

Definition at line 389 of file HM6.java.

389  {
390  if( !more_work_impl(work) ) return false;
391  return _body.more_work(work);
392  }

References com.cliffc.aa.HM.HM6.Lambda2._body, com.cliffc.aa.HM.HM6.Syntax.more_work(), and com.cliffc.aa.HM.HM6.Syntax.more_work_impl().

Here is the call graph for this function:

◆ more_work_impl()

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

Definition at line 238 of file HM6.java.

238  {
239  return work.has(this) || !hm(null); // Either on worklist, or no-progress
240  }

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

Referenced by com.cliffc.aa.HM.HM6.Con.more_work(), com.cliffc.aa.HM.HM6.Ident.more_work(), com.cliffc.aa.HM.HM6.Lambda.more_work(), com.cliffc.aa.HM.HM6.Lambda2.more_work(), com.cliffc.aa.HM.HM6.Let.more_work(), and com.cliffc.aa.HM.HM6.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.HM6.Syntax.p ( )
inherited

Definition at line 245 of file HM6.java.

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

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

Here is the call graph for this function:

◆ p0()

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

Definition at line 246 of file HM6.java.

246  {
247  _t.get_dups(dups);
248  _t.str(p1(sb.i()).p(" "), new VBitSet(),dups).nl();
249  return p2(sb.ii(1),dups).di(1);
250  }

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

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

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

◆ p1()

SB com.cliffc.aa.HM.HM6.Lambda2.p1 ( SB  sb)
package

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

Definition at line 353 of file HM6.java.

353 { return sb.p("{ ").p(_arg0).p(" ").p(_arg1).p(" -> ... } "); }

References com.cliffc.aa.HM.HM6.Lambda2._arg0, com.cliffc.aa.HM.HM6.Lambda2._arg1, and com.cliffc.aa.util.SB.p().

Here is the call graph for this function:

◆ p2()

SB com.cliffc.aa.HM.HM6.Lambda2.p2 ( SB  sb,
VBitSet  dups 
)
package

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

Definition at line 354 of file HM6.java.

354 { return _body.p0(sb,dups); }

References com.cliffc.aa.HM.HM6.Lambda2._body, and com.cliffc.aa.HM.HM6.Syntax.p0().

Here is the call graph for this function:

◆ prep_lookup_deps()

void com.cliffc.aa.HM.HM6.Lambda2.prep_lookup_deps ( Ident  id)
package

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

Definition at line 385 of file HM6.java.

385  {
386  if( Util.eq(id._name,_arg0) ) _targ0.push_update(id);
387  if( Util.eq(id._name,_arg1) ) _targ1.push_update(id);
388  }

References com.cliffc.aa.HM.HM6.Lambda2._arg0, com.cliffc.aa.HM.HM6.Lambda2._arg1, com.cliffc.aa.HM.HM6.Lambda2._targ0, com.cliffc.aa.HM.HM6.Lambda2._targ1, com.cliffc.aa.util.Util.eq(), and com.cliffc.aa.HM.HM6.T2.push_update().

Here is the call graph for this function:

◆ prep_tree()

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

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

Definition at line 379 of file HM6.java.

379  {
380  prep_tree_impl(par,nongen,work,T2.make_leaf());
381  VStack vs0 = new VStack(nongen,_targ0);
382  VStack vs1 = new VStack(vs0 ,_targ1);
383  return _body.prep_tree(this,vs1,work) + 1;
384  }

References com.cliffc.aa.HM.HM6.Lambda2._body, com.cliffc.aa.HM.HM6.Lambda2._targ0, com.cliffc.aa.HM.HM6.Lambda2._targ1, com.cliffc.aa.HM.HM6.T2.make_leaf(), com.cliffc.aa.HM.HM6.Syntax.prep_tree(), and com.cliffc.aa.HM.HM6.Syntax.prep_tree_impl().

Here is the call graph for this function:

◆ prep_tree_impl()

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

Definition at line 228 of file HM6.java.

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

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

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

◆ str()

SB com.cliffc.aa.HM.HM6.Lambda2.str ( SB  sb)
package

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

Definition at line 352 of file HM6.java.

352 { return _body.str(sb.p("{ ").p(_arg0).p(" ").p(_arg1).p(" -> ")).p(" }"); }

References com.cliffc.aa.HM.HM6.Lambda2._arg0, com.cliffc.aa.HM.HM6.Lambda2._arg1, com.cliffc.aa.HM.HM6.Lambda2._body, com.cliffc.aa.util.SB.p(), and com.cliffc.aa.HM.HM6.Syntax.str().

Here is the call graph for this function:

◆ targ0()

T2 com.cliffc.aa.HM.HM6.Lambda2.targ0 ( )
package

Definition at line 355 of file HM6.java.

355 { T2 targ = _targ0.find(); return targ==_targ0 ? targ : (_targ0=targ); }

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

Referenced by com.cliffc.aa.HM.HM6.Lambda2.add_occurs(), com.cliffc.aa.HM.HM6.Lambda2.hm(), and com.cliffc.aa.HM.HM6.Lambda2.lookup().

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

◆ targ1()

T2 com.cliffc.aa.HM.HM6.Lambda2.targ1 ( )
package

Definition at line 356 of file HM6.java.

356 { T2 targ = _targ1.find(); return targ==_targ1 ? targ : (_targ1=targ); }

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

Referenced by com.cliffc.aa.HM.HM6.Lambda2.add_occurs(), com.cliffc.aa.HM.HM6.Lambda2.hm(), and com.cliffc.aa.HM.HM6.Lambda2.lookup().

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

◆ toString()

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

Definition at line 242 of file HM6.java.

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

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

Here is the call graph for this function:

Member Data Documentation

◆ _arg0

◆ _arg1

◆ _body

◆ _nongen

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

◆ _par

◆ _t

◆ _targ0

◆ _targ1


The documentation for this class was generated from the following file:
com.cliffc.aa.HM.HM6.Syntax.lookup
abstract T2 lookup(String name)
com.cliffc.aa.HM.HM6.Syntax._t
T2 _t
Definition: HM6.java:213
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.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.HM6.T2.get_dups
VBitSet get_dups(VBitSet dups)
Definition: HM6.java:823
com.cliffc.aa.HM.HM6.Lambda2._targ1
T2 _targ1
Definition: HM6.java:350
com.cliffc.aa.HM.HM6.Syntax.prep_tree_impl
final void prep_tree_impl(Syntax par, VStack nongen, Worklist work, T2 t)
Definition: HM6.java:228
com.cliffc.aa.HM.HM6.Lambda2._arg1
final String _arg1
Definition: HM6.java:347
com.cliffc.aa.HM.HM6.T2._deps
Ary< Ident > _deps
Definition: HM6.java:519
com.cliffc.aa.HM.HM6.Syntax.p2
abstract SB p2(SB sb, VBitSet dups)
com.cliffc.aa.HM.HM6.Syntax._nongen
VStack _nongen
Definition: HM6.java:212
com.cliffc.aa.HM.HM6.Lambda2._body
final Syntax _body
Definition: HM6.java:348
com.cliffc.aa.HM.HM6.Lambda2.targ1
T2 targ1()
Definition: HM6.java:356
com.cliffc.aa.HM.HM6.Syntax.more_work
abstract boolean more_work(Worklist work)
com.cliffc.aa.HM.HM6.T2.make_leaf
static T2 make_leaf()
Definition: HM6.java:523
com.cliffc.aa.HM.HM6.T2.find
T2 find()
Definition: HM6.java:543
com.cliffc.aa.HM.HM6.T2.push_update
boolean push_update(Ident a)
Definition: HM6.java:795
com.cliffc.aa.HM.HM6.Syntax._par
Syntax _par
Definition: HM6.java:211
com.cliffc.aa.util.Util
Definition: Util.java:5
com.cliffc.aa.HM.HM6.Syntax.p1
abstract SB p1(SB sb)
com.cliffc.aa.HM.HM6.Syntax.str
abstract SB str(SB sb)
com.cliffc.aa.HM.HM6.Syntax.find
T2 find()
Definition: HM6.java:214
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.util.SB.nl
SB nl()
Definition: SB.java:48
com.cliffc.aa.HM.HM6.Lambda2._targ0
T2 _targ0
Definition: HM6.java:349
com.cliffc.aa.util.SB.p
SB p(String s)
Definition: SB.java:13
com.cliffc.aa.HM.HM6.Lambda2._arg0
final String _arg0
Definition: HM6.java:347
com.cliffc.aa.util.SB.i
SB i(int d)
Definition: SB.java:38
com.cliffc.aa.HM.HM6.Syntax.hm
abstract boolean hm(Worklist work)
com.cliffc.aa.HM.HM6.Syntax.prep_tree
abstract int prep_tree(Syntax par, VStack nongen, Worklist work)
com.cliffc.aa.util.SB.toString
String toString()
Definition: SB.java:62
com.cliffc.aa.HM.HM6.Syntax.more_work_impl
final boolean more_work_impl(Worklist work)
Definition: HM6.java:238
com.cliffc.aa.HM.HM6.Lambda2.targ0
T2 targ0()
Definition: HM6.java:355
com.cliffc.aa.HM.HM6.Syntax.p0
final SB p0(SB sb, VBitSet dups)
Definition: HM6.java:246