org.erights.e.elang.evm
Class CallExpr

java.lang.Object
  |
  +--org.erights.e.elang.evm.ParseNode
        |
        +--org.erights.e.elang.evm.ENode
              |
              +--org.erights.e.elang.evm.EExpr
                    |
                    +--org.erights.e.elang.evm.CallExpr
All Implemented Interfaces:
Cloneable, EPrintable, EStackItem, MatchMaker

public class CallExpr
extends EExpr
implements EStackItem

Safe: BNF: eExpr.verb(args... )

A synchronous message call. Tells the expression's value to perform the request now, and to pass an outcome (return a result, throw an exception, non-local escape) synchronously back to the caller.

Author:
Mark S. Miller

Field Summary
private  EExpr[] myArgs
           
private  EExpr myRecipient
           
private  String myVerb
           
 
Fields inherited from class org.erights.e.elang.evm.ENode
 
Fields inherited from class org.erights.e.elang.evm.ParseNode
NUM_PR, PR_ASSIGN, PR_CALL, PR_COMP, PR_EEXPR, PR_LISTPATT, PR_ORDER, PR_PATTERN, PR_PRIM, PR_START
 
Constructor Summary
CallExpr(SourceSpan optSpan, EExpr recipient, String verb, EExpr[] args)
          Enabled:
 
Method Summary
 EExpr[] args()
          Enabled:
protected  StaticScope computeStaticScope()
          When staticScope() is first requested on a given node, it calls computeStaticScope() to do the actual computation, which is then remembered.
 boolean matchBind(ConstList args, Object specimen, FlexList bindings)
          Enabled:
 EExpr recipient()
          Enabled:
protected  Object subEval(EvalContext ctx, boolean forValue)
          The recursive part that does the work
 void subPrintOn(TextWriter out, int priority)
          Enabled:
 void traceOn(TextWriter out)
          Enabled:
 String verb()
          Enabled:
 Object welcome(ETreeVisitor visitor)
          Enabled:
 
Methods inherited from class org.erights.e.elang.evm.EExpr
__printOn, appendAllTo, appendTo, eval, eval, evalBool, printAsBlockOn, substitute, transform
 
Methods inherited from class org.erights.e.elang.evm.ENode
cleanCopy, copy, getOptPatternMap, getOptScopeMap, getPatternMap, getScopeMap, qbuild, setPatternMap, setScopeMap, staticScope, synEnv
 
Methods inherited from class org.erights.e.elang.evm.ParseNode
asText, getOptSpan, lnPrintOn, lnPrintOn, matchBind, matchBind, matchBind, printListOn, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

myRecipient

private final EExpr myRecipient

myVerb

private final String myVerb

myArgs

private final EExpr[] myArgs
Constructor Detail

CallExpr

public CallExpr(SourceSpan optSpan,
                EExpr recipient,
                String verb,
                EExpr[] args)
Enabled:

Method Detail

welcome

public Object welcome(ETreeVisitor visitor)
Enabled:

Specified by:
welcome in class ENode

computeStaticScope

protected StaticScope computeStaticScope()
Description copied from class: ENode
When staticScope() is first requested on a given node, it calls computeStaticScope() to do the actual computation, which is then remembered.

Specified by:
computeStaticScope in class ENode

subEval

protected Object subEval(EvalContext ctx,
                         boolean forValue)
Description copied from class: EExpr
The recursive part that does the work

Specified by:
subEval in class EExpr

traceOn

public void traceOn(TextWriter out)
             throws IOException
Enabled:

Specified by:
traceOn in interface EStackItem
IOException

subPrintOn

public void subPrintOn(TextWriter out,
                       int priority)
                throws IOException
Enabled:

Specified by:
subPrintOn in class ParseNode
IOException

matchBind

public boolean matchBind(ConstList args,
                         Object specimen,
                         FlexList bindings)
Enabled:

Specified by:
matchBind in interface MatchMaker
Specified by:
matchBind in class ParseNode

recipient

public EExpr recipient()
Enabled:


verb

public String verb()
Enabled:


args

public EExpr[] args()
Enabled:



comments?