orc.ast.oil.expression
Class DeclareDefs

java.lang.Object
  extended by orc.ast.oil.expression.Expression
      extended by orc.ast.oil.expression.DeclareDefs

public class DeclareDefs
extends Expression

A group of mutually recursive definitions, and the expression to which they are scoped.

Author:
dkitchin

Field Summary
 Expression body
           
 java.util.List<Def> defs
           
 java.util.Set<Variable> free
          Variables defined outside this node which appear in the bodies of the defs.
 
Constructor Summary
DeclareDefs(java.util.List<Def> defs, Expression body)
           
 
Method Summary
<E> E
accept(Visitor<E> visitor)
           
 void addIndices(java.util.Set<java.lang.Integer> indices, int depth)
          If this expression has any indices which are >= depth, add (index - depth) to the index set accumulator.
 void enter(Token t)
           
 boolean equals(java.lang.Object obj)
           
 int hashCode()
           
 Expression marshal()
           
 void populateContinuations()
           
 java.lang.String toString()
           
 void typecheck(TypingContext ctx, Type T)
           
 Type typesynth(TypingContext ctx)
           
 
Methods inherited from class orc.ast.oil.expression.Expression
freeVars, getPublishContinuation, leave, marshalAll, setPublishContinuation
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

defs

public java.util.List<Def> defs

body

public Expression body

free

public java.util.Set<Variable> free
Variables defined outside this node which appear in the bodies of the defs. If the defs are all mutually recursive, this is correct, otherwise this is overly pessimistic and may force some defs to wait on variables which they won't use. The compiler ensures that all def groups are mutually recursive at this point in compilation.

Constructor Detail

DeclareDefs

public DeclareDefs(java.util.List<Def> defs,
                   Expression body)
Method Detail

hashCode

public int hashCode()
Specified by:
hashCode in class Expression

equals

public boolean equals(java.lang.Object obj)
Specified by:
equals in class Expression

addIndices

public void addIndices(java.util.Set<java.lang.Integer> indices,
                       int depth)
Description copied from class: Expression
If this expression has any indices which are >= depth, add (index - depth) to the index set accumulator. The depth increases each time this method recurses through a binder. The default implementation is to assume the expression has no free variables, and thus do nothing. Expressions which contain variables or subexpressions override this behavior.

Specified by:
addIndices in class Expression
Parameters:
indices - The index set accumulator.
depth - The minimum index for a free variable.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

accept

public <E> E accept(Visitor<E> visitor)
Specified by:
accept in class Expression

typesynth

public Type typesynth(TypingContext ctx)
               throws TypeException
Specified by:
typesynth in class Expression
Throws:
TypeException

typecheck

public void typecheck(TypingContext ctx,
                      Type T)
               throws TypeException
Overrides:
typecheck in class Expression
Throws:
TypeException

marshal

public Expression marshal()
                   throws CompilationException
Specified by:
marshal in class Expression
Throws:
CompilationException

populateContinuations

public void populateContinuations()
Specified by:
populateContinuations in class Expression

enter

public void enter(Token t)
Specified by:
enter in class Expression