Abstract class for syntactic forms that evaluate to a value.
Scheme S-expressions get re-written to these before evaluation.
apply
public void apply(CallContext ctx)
throws Throwable
Evaluate the expression.
This is named apply rather than eval so it is compatible with the
full-tail-call calling convention, and we can stash an Expression in
CallContext's proc field. FIXME - are we making use of this?
- apply in interface Procedure
apply0
public final Object apply0()
throws Throwable
- apply0 in interface Procedure0
compile
public final void compile(Compilation comp,
Declaration lhs)
Compile an expression with checking suitable for a known Declaration.
Leaves the result on the stack (i.e. does not assign to the lhs).
It does coerce the value to a suitable type for the lhs, and
throw a hopefully-informative WrongType exception on failure.
compileButFirst
public static void compileButFirst(Expression exp,
Compilation comp)
Compile all but the first sub-"statement".
A kludge used for constructor methods, since if the first "statement"
is a super-constructor we need to inject initializer expressions.
compileNotePosition
public final void compileNotePosition(Compilation comp,
Target target,
Expression position)
Compile, but take note of line number.
compileWithPosition
public final void compileWithPosition(Compilation comp,
Target target)
Same as compile, but emit line number beforehard.
compileWithPosition
public final void compileWithPosition(Compilation comp,
Target target,
Expression position)
Same as 2-argument compileWithPosition,
but use some other Expression's line number.
eval
public final Object eval(CallContext ctx)
throws Throwable
eval
public final Object eval(Environment env)
throws Throwable
getColumnNumber
public final int getColumnNumber()
Return current column number.
The "first" column is column 1; unknown is -1.
- getColumnNumber in interface SourceLocator
getFlag
public boolean getFlag(int flag)
getFlags
public int getFlags()
getLineNumber
public final int getLineNumber()
Get the line number of (the start of) this Expression.
The "first" line is line 1; unknown is -1.
- getLineNumber in interface SourceLocator
getType
public Type getType()
Return the Type used to represent the values of this Expression.
inline
public Expression inline(ApplyExp exp,
InlineCalls walker,
Declaration decl)
Apply inlining transformations on a given ApplyExp.
Assumes the ApplyExp's function is the this expression,
or can be optimized to this expression.
exp
- an application whose function expression can be simplified
to this expression.walker
- the context for the current inlining passdecl
- if non-null, a Declaration bound to this expression
- an Expression equivalent to te passed-in exp.
isStableSourceLocation
public boolean isStableSourceLocation()
True if position is unlikely to change.
True for an expression but not an input file.
- isStableSourceLocation in interface SourceLocator
makeWhile
public static Expression makeWhile(Object cond,
Object body,
Compilation parser)
Helper method to create a `while' statement.
mustCompile
protected abstract boolean mustCompile()
print
public abstract void print(OutPort ps)
printLineColumn
public void printLineColumn(OutPort out)
Print line and column number if specified.
This is a helper routineintended for use by print(OutPort).
setFile
public final void setFile(String filename)
setFlag
public void setFlag(boolean setting,
int flag)
setFlag
public void setFlag(int flag)
setLine
public void setLine(Compilation comp)
Set line number from current position in Compilation
.
setLine
public final void setLine(int lineno)
setLine
public final void setLine(int lineno,
int colno)
setLocation
public final void setLocation(SourceLocator location)
Copies the current location.
side_effects
public boolean side_effects()
True if evaluating may have side-effects.
valueIfConstant
public Object valueIfConstant()
Return value if it is constant, or null if non-constant or unknown.
walkChildren
protected void walkChildren(ExpWalker walker)