gnu.kawa.reflect

Class TypeSwitch

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.

Field Summary

static TypeSwitch
typeSwitch

Fields inherited from class gnu.mapping.MethodProc

NO_MATCH, NO_MATCH_AMBIGUOUS, NO_MATCH_BAD_TYPE, NO_MATCH_TOO_FEW_ARGS, NO_MATCH_TOO_MANY_ARGS, argTypes

Fields inherited from class gnu.mapping.ProcedureN

noArgs

Constructor Summary

TypeSwitch(String name)

Method Summary

void
apply(CallContext ctx)
void
compile(ApplyExp exp, Compilation comp, Target target)
Type
getReturnType(Expression[] args)
Expression
inline(ApplyExp exp, ExpWalker walker)
int
numArgs()

Methods inherited from class gnu.mapping.MethodProc

applyN, getParameterType, isApplicable, matchFailAsException, mostSpecific, mostSpecific, numParameters, resolveParameterTypes

Methods inherited from class gnu.mapping.ProcedureN

apply0, apply1, apply2, apply3, apply4, applyN

Methods inherited from class gnu.mapping.Procedure

apply, apply, apply0, apply1, apply2, apply3, apply4, applyN, check0, check1, check2, check3, check4, checkArgCount, checkN, getName, getProperty, getSetter, getSymbol, match0, match1, match2, match3, match4, matchN, maxArgs, minArgs, name, numArgs, removeProperty, set0, set1, setN, setName, setProperty, setProperty, setSetter, setSymbol, toString

Field Details

typeSwitch

public static final TypeSwitch typeSwitch

Constructor Details

TypeSwitch

public TypeSwitch(String name)

Method Details

apply

public void apply(CallContext ctx)
            throws Throwable
Overrides:
apply in interface Procedure

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

inline

public Expression inline(ApplyExp exp,
                         ExpWalker walker)
Specified by:
inline in interface CanInline

numArgs

public int numArgs()
Overrides:
numArgs in interface Procedure