Package gnu.expr
Class CaseExp
- java.lang.Object
-
- gnu.mapping.PropertySet
-
- gnu.mapping.Procedure
-
- gnu.expr.Expression
-
- gnu.expr.CaseExp
-
- All Implemented Interfaces:
gnu.kawa.format.Printable,Named,SourceLocator,SourceLocator,Locator
public class CaseExp extends Expression
This class represents a case expressioncase case-key case-clause+ case case-key case-clause* case-else-clause case-key ::= expression case-clause ::=((datum*)expression+)|((datum*) =>expression)case-else-clause ::= (else expression+) |(else =>expression)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classCaseExp.CaseClauseThis class represent a clause of the case expression, of the form ((datum*) expression+) or (else expression+)-
Nested classes/interfaces inherited from interface gnu.text.SourceLocator
SourceLocator.Simple
-
-
Field Summary
-
Fields inherited from class gnu.expr.Expression
applyMethodExpression, flags, NEXT_AVAIL_FLAG, noExpressions, type, VALIDATED
-
Fields inherited from class gnu.mapping.Procedure
applyMethodType, applyToConsumerDefault, applyToConsumerMethod, applyToObjectDefault, applyToObjectMethod, compilerKey, compilerXKey, inlineIfConstantSymbol, validateApplyKey, validateXApplyKey
-
Fields inherited from class gnu.mapping.PropertySet
nameKey
-
-
Constructor Summary
Constructors Constructor Description CaseExp(Expression key, CaseExp.CaseClause[] clauses)Constructor for a case expression with no else clause.CaseExp(Expression key, CaseExp.CaseClause[] clauses, CaseExp.CaseClause elseClause)Constructor for a case expression with an else clause.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidapply(CallContext ctx)Evaluate the expression.protected TypecalculateDatumsType()Computes the union type of the case expression datums.protected ObjectcalculateDatumValue(Expression datum)Given the expression generated from a datum returns the value of the datum as an Object.protected TypecalculateType()voidcompile(Compilation comp, Target target)protected booleanmustCompile()voidprint(gnu.kawa.io.OutPort out)booleansearchValue(Object keyValue)Search a clause containing the specified key.ExpressionselectCase(Object keyValue)Search for a clause containing the specified key.protected <R,D>
Rvisit(ExpVisitor<R,D> visitor, D d)protected <R,D>
voidvisitChildren(ExpVisitor<R,D> visitor, D d)-
Methods inherited from class gnu.expr.Expression
applyMethodExpression, checkLiteralKeyword, compile, compile, compileWithPosition, compileWithPosition, deepCopy, deepCopy, deepCopy, deepCopy, eval, eval, getColumnNumber, getEndColumn, getEndLine, getFileName, getFlag, getFlags, getLineNumber, getPublicId, getStartColumn, getStartLine, getSystemId, getType, getTypeRaw, isSingleValue, isStableSourceLocation, makeWhile, maybeSetLine, neverReturns, numArgs, print, printLineColumn, setFile, setFlag, setFlag, setLine, setLine, setLine, setLine, setLine, setLocation, setType, side_effects, toString, validateApply, valueIfConstant
-
Methods inherited from class gnu.mapping.Procedure
apply0, apply1, apply2, apply3, apply4, applyL, applyN, applyToConsumerDefault, applyToObjectDefault, checkArgCount, checkBadCode, getApplyMethod, getApplyToConsumerMethod, getApplyToObjectMethod, getReturnType, getSetter, getSourceLocation, isSideEffectFree, lookupApplyHandle, maxArgs, maxArgs, minArgs, minArgs, set0, set1, setN, setSetter, setSourceLocation
-
Methods inherited from class gnu.mapping.PropertySet
getName, getProperty, getSymbol, removeProperty, setName, setProperty, setProperty, setSymbol
-
-
-
-
Constructor Detail
-
CaseExp
public CaseExp(Expression key, CaseExp.CaseClause[] clauses)
Constructor for a case expression with no else clause. Arguments must be non null. clauses parameter must contain at least one CaseClause.
-
CaseExp
public CaseExp(Expression key, CaseExp.CaseClause[] clauses, CaseExp.CaseClause elseClause)
Constructor for a case expression with an else clause. Arguments must be non null.
-
-
Method Detail
-
mustCompile
protected boolean mustCompile()
- Specified by:
mustCompilein classExpression
-
apply
public void apply(CallContext ctx) throws Throwable
Description copied from class:ExpressionEvaluate 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:
applyin classExpression- Throws:
Throwable
-
print
public void print(gnu.kawa.io.OutPort out)
- Specified by:
printin classExpression
-
compile
public void compile(Compilation comp, Target target)
- Specified by:
compilein classExpression
-
visit
protected <R,D> R visit(ExpVisitor<R,D> visitor, D d)
- Overrides:
visitin classExpression
-
visitChildren
protected <R,D> void visitChildren(ExpVisitor<R,D> visitor, D d)
- Overrides:
visitChildrenin classExpression
-
calculateDatumValue
protected Object calculateDatumValue(Expression datum)
Given the expression generated from a datum returns the value of the datum as an Object.
-
calculateType
protected Type calculateType()
- Overrides:
calculateTypein classExpression
-
calculateDatumsType
protected Type calculateDatumsType()
Computes the union type of the case expression datums. Useful to know if the datums are all integer values.
-
searchValue
public boolean searchValue(Object keyValue)
Search a clause containing the specified key. If the clause is found returns true, false otherwise.
-
selectCase
public Expression selectCase(Object keyValue)
Search for a clause containing the specified key. If the clause is found returns the corresponding expression.
-
-