gnu.kawa.reflect
Class TypeSwitch
java.lang.Object
gnu.mapping.Procedure
gnu.mapping.ProcedureN
gnu.mapping.MethodProc
gnu.kawa.reflect.TypeSwitch
- All Implemented Interfaces:
- CanInline, Inlineable, Named
public class TypeSwitch
- extends MethodProc
- implements CanInline, Inlineable
Implement 'typeswitch' (as in XQuery) or 'typecase'.
Usage: (typeswitch SELECTOR CASE-LAMBDA ... DEFAULT-LAMBDA)
Each CASE-LAMBDA is a 1-argument MethodProc, while DEFAULT-LAMBDA
is a 0-argument Procedure. Calls the first CASE-LAMBDA such that
SELECTOR is a valid argument; if there is none, calls DEFAULT-LAMBDA.
In the current implementation, all of CASE-LAMBDA and DEFAULT-LAMBDA
must be LambdaExps, and the call must be inlined.
Constructor Summary |
TypeSwitch(java.lang.String name)
|
Methods inherited from class gnu.mapping.Procedure |
apply, check0, check1, check2, check3, check4, checkArgCount, checkN, getName, getProperty, getSetter, getSymbol, match0, match1, match2, match3, match4, matchN, maxArgs, minArgs, name, removeProperty, set0, set1, setN, setName, setProperty, setProperty, setSetter, setSymbol, toString |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
typeSwitch
public static final TypeSwitch typeSwitch
TypeSwitch
public TypeSwitch(java.lang.String name)
numArgs
public int numArgs()
- Description copied from class:
Procedure
- Return minArgs()|(maxArgs<<12).
- Overrides:
numArgs
in class Procedure
apply
public void apply(CallContext ctx)
throws java.lang.Throwable
- Description copied from class:
Procedure
- Call this Procedure using the explicit-CallContext-convention.
The input arguments are (by default) in stack.args;
the result is written to ctx.consumer.
- Overrides:
apply
in class Procedure
- Throws:
java.lang.Throwable
inline
public Expression inline(ApplyExp exp,
ExpWalker walker)
- Description copied from interface:
CanInline
- Inline an application of this Procedure and return result.
Can return original expression.
- Specified by:
inline
in interface CanInline
compile
public void compile(ApplyExp exp,
Compilation comp,
Target target)
- Specified by:
compile
in interface Inlineable
getReturnType
public Type getReturnType(Expression[] args)
- Specified by:
getReturnType
in interface Inlineable