gnu.expr

Class Expression

Implemented Interfaces:
org.xml.sax.Locator, Named, Printable, SourceLocator
Known Direct Subclasses:
AccessExp, ApplyExp, BeginExp, BlockExp, ErrorExp, ExitExp, IfExp, LangExp, QuoteExp, ScopeExp, SynchronizedExp, TryExp

public abstract class Expression
extends Procedure0
implements Printable, SourceLocator

Abstract class for syntactic forms that evaluate to a value. Scheme S-expressions get re-written to these before evaluation.

Field Summary

protected static int
NEXT_AVAIL_FLAG
protected int
flags
static Expression[]
noExpressions

Method Summary

void
apply(CallContext ctx)
Evaluate the expression.
Object
apply0()
void
compile(Compilation comp, Type type)
void
compile(Compilation comp, Declaration lhs)
Compile an expression with checking suitable for a known Declaration.
abstract void
compile(Compilation comp, Target target)
static void
compileButFirst(Expression exp, Compilation comp)
Compile all but the first sub-"statement".
void
compileNotePosition(Compilation comp, Target target, Expression position)
Compile, but take note of line number.
void
compileWithPosition(Compilation comp, Target target)
Same as compile, but emit line number beforehard.
void
compileWithPosition(Compilation comp, Target target, Expression position)
Same as 2-argument compileWithPosition, but use some other Expression's line number.
Object
eval(CallContext ctx)
Object
eval(Environment env)
int
getColumnNumber()
Return current column number.
String
getFileName()
Normally same as getSystemId.
boolean
getFlag(int flag)
int
getFlags()
int
getLineNumber()
Get the line number of (the start of) this Expression.
String
getPublicId()
String
getSystemId()
Type
getType()
Return the Type used to represent the values of this Expression.
Expression
inline(ApplyExp exp, InlineCalls walker, Declaration decl)
Apply inlining transformations on a given ApplyExp.
boolean
isStableSourceLocation()
True if position is unlikely to change.
static Expression
makeWhile(Object cond, Object body, Compilation parser)
Helper method to create a `while' statement.
int
match0(CallContext ctx)
protected abstract boolean
mustCompile()
void
print(Consumer out)
abstract void
print(OutPort ps)
void
printLineColumn(OutPort out)
Print line and column number if specified.
void
setFile(String filename)
void
setFlag(boolean setting, int flag)
void
setFlag(int flag)
void
setLine(Compilation comp)
Set line number from current position in Compilation.
Expression
setLine(Expression old)
void
setLine(int lineno)
void
setLine(int lineno, int colno)
void
setLocation(SourceLocator location)
Copies the current location.
boolean
side_effects()
True if evaluating may have side-effects.
String
toString()
Object
valueIfConstant()
Return value if it is constant, or null if non-constant or unknown.
protected Expression
walk(ExpWalker walker)
protected void
walkChildren(ExpWalker walker)

Methods inherited from class gnu.mapping.Procedure0

apply0, apply1, apply2, apply3, apply4, applyN, numArgs

Methods inherited from class gnu.mapping.Procedure

apply, apply, apply0, apply1, apply2, apply3, apply4, applyN, check0, check1, check2, check3, check4, checkArgCount, checkN, getSetter, getSourceLocation, match0, match1, match2, match3, match4, matchN, maxArgs, minArgs, numArgs, set0, set1, setN, setSetter, setSourceLocation, toString

Methods inherited from class gnu.mapping.PropertySet

getName, getProperty, getSymbol, removeProperty, setName, setProperty, setProperty, setSymbol

Field Details

NEXT_AVAIL_FLAG

protected static final int NEXT_AVAIL_FLAG
Field Value:
1

flags

protected int flags

noExpressions

public static final Expression[] noExpressions

Method Details

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?
Overrides:
apply in interface Procedure

apply0

public final Object apply0()
            throws Throwable
Overrides:
apply0 in interface Procedure0

compile

public final void compile(Compilation comp,
                          Type type)

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.

compile

public abstract void compile(Compilation comp,
                             Target target)

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.
Specified by:
getColumnNumber in interface SourceLocator

getFileName

public final String getFileName()
Normally same as getSystemId.
Specified by:
getFileName 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.
Specified by:
getLineNumber in interface SourceLocator

getPublicId

public String getPublicId()
Specified by:
getPublicId in interface SourceLocator

getSystemId

public String getSystemId()
Specified by:
getSystemId 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.
Parameters:
exp - an application whose function expression can be simplified to this expression.
walker - the context for the current inlining pass
decl - if non-null, a Declaration bound to this expression
Returns:
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.
Specified by:
isStableSourceLocation in interface SourceLocator

makeWhile

public static Expression makeWhile(Object cond,
                                   Object body,
                                   Compilation parser)
Helper method to create a `while' statement.

match0

public final int match0(CallContext ctx)
Overrides:
match0 in interface Procedure

mustCompile

protected abstract boolean mustCompile()

print

public final void print(Consumer out)
Specified by:
print in interface Printable

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 Expression setLine(Expression old)

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.

toString

public String toString()
Overrides:
toString in interface Procedure

valueIfConstant

public Object valueIfConstant()
Return value if it is constant, or null if non-constant or unknown.

walk

protected Expression walk(ExpWalker walker)

walkChildren

protected void walkChildren(ExpWalker walker)