gnu.mapping

Class MethodProc

public abstract class MethodProc extends ProcedureN

Similar to a CLOS method. Can check if arguments "match" before committing to calling method.
Field Summary
protected ObjectargTypes
The parameter types.
static intNO_MATCH
Return code from match: Unspecified failure.
static intNO_MATCH_AMBIGUOUS
Return code from match: Ambigious which method to select.
static intNO_MATCH_BAD_TYPE
Return code from match: Invalid argument type.
static intNO_MATCH_TOO_FEW_ARGS
Return code from match: Too few actual arguments.
static intNO_MATCH_TOO_MANY_ARGS
Return code from match: Too many actual arguments.
Method Summary
ObjectapplyN(Object[] args)
TypegetParameterType(int index)
intisApplicable(Type[] argTypes)
Test if method is applicable to an invocation with given arguments.
static RuntimeExceptionmatchFailAsException(int code, Procedure proc, Object[] args)
Helper method to throw an exception if a matchX method fails.
static MethodProcmostSpecific(MethodProc proc1, MethodProc proc2)
Return the more specific of the arguments.
static intmostSpecific(MethodProc[] procs, int length)
Return the index of the most specific method.
intnumParameters()
Return number of parameters, including optional and rest arguments.
protected voidresolveParameterTypes()
Figure out or decode the parameter types, setting argTypes.

Field Detail

argTypes

protected Object argTypes
The parameter types. Usually either an Type[] or a String encoding.

NO_MATCH

public static final int NO_MATCH
Return code from match: Unspecified failure.

NO_MATCH_AMBIGUOUS

public static final int NO_MATCH_AMBIGUOUS
Return code from match: Ambigious which method to select.

NO_MATCH_BAD_TYPE

public static final int NO_MATCH_BAD_TYPE
Return code from match: Invalid argument type. In that case the lower half is the 1-origin index of the first argument that does not match.

NO_MATCH_TOO_FEW_ARGS

public static final int NO_MATCH_TOO_FEW_ARGS
Return code from match: Too few actual arguments. The lower half is the minimum number of arguments (if not 0xffff).

NO_MATCH_TOO_MANY_ARGS

public static final int NO_MATCH_TOO_MANY_ARGS
Return code from match: Too many actual arguments. The lower half is the maximum number of arguments (if not 0xffff).

Method Detail

applyN

public Object applyN(Object[] args)

getParameterType

public Type getParameterType(int index)

isApplicable

public int isApplicable(Type[] argTypes)
Test if method is applicable to an invocation with given arguments. Returns -1 if no; 1 if yes; 0 if need to check at run-time.

matchFailAsException

public static RuntimeException matchFailAsException(int code, Procedure proc, Object[] args)
Helper method to throw an exception if a matchX method fails.

mostSpecific

public static MethodProc mostSpecific(MethodProc proc1, MethodProc proc2)
Return the more specific of the arguments.

Returns: null if neither is more specific.

mostSpecific

public static int mostSpecific(MethodProc[] procs, int length)
Return the index of the most specific method.

numParameters

public int numParameters()
Return number of parameters, including optional and rest arguments.

resolveParameterTypes

protected void resolveParameterTypes()
Figure out or decode the parameter types, setting argTypes.