gnu.mapping
Class MethodProc

java.lang.Object
  extended by gnu.mapping.PropertySet
      extended by gnu.mapping.Procedure
          extended by gnu.mapping.ProcedureN
              extended by gnu.mapping.MethodProc
All Implemented Interfaces:
Named
Direct Known Subclasses:
AppendValues, Attributes, callcc, Children, CommentConstructor, Continuation, GenericProc, GetRequest, GetResponse, IntegerRange, IteratorItems, ListItems, MakeCDATA, MakeResponseHeader, ModuleMethod, NodeConstructor, OrderedMap, PrimProcedure, Q2Apply, RelativeStep, SubList, TreeScanner, TypeSwitch, ValuesEvery, ValuesFilter, ValuesMap

public abstract class MethodProc
extends ProcedureN

Similar to a CLOS method. Can check if arguments "match" before committing to calling method.


Field Summary
protected  java.lang.Object argTypes
          The parameter types.
static int NO_MATCH
          Return code from match: Unspecified failure.
static int NO_MATCH_AMBIGUOUS
          Return code from match: Ambigious which method to select.
static int NO_MATCH_BAD_TYPE
          Return code from match: Invalid argument type.
static int NO_MATCH_TOO_FEW_ARGS
          Return code from match: Too few actual arguments.
static int NO_MATCH_TOO_MANY_ARGS
          Return code from match: Too many actual arguments.
 
Fields inherited from class gnu.mapping.ProcedureN
noArgs
 
Constructor Summary
MethodProc()
           
 
Method Summary
 java.lang.Object applyN(java.lang.Object[] args)
           
 Type getParameterType(int index)
           
 int isApplicable(Type[] argTypes)
          Test if method is applicable to an invocation with given arguments.
static java.lang.RuntimeException matchFailAsException(int code, Procedure proc, java.lang.Object[] args)
          Helper method to throw an exception if a matchX method fails.
static int mostSpecific(MethodProc[] procs, int length)
          Return the index of the most specific method.
static MethodProc mostSpecific(MethodProc proc1, MethodProc proc2)
          Return the more specific of the arguments.
 int numParameters()
          Return number of parameters, including optional and rest arguments.
protected  void resolveParameterTypes()
          Figure out or decode the parameter types, setting argTypes.
 
Methods inherited from class gnu.mapping.ProcedureN
apply0, apply1, apply2, apply3, apply4
 
Methods inherited from class gnu.mapping.Procedure
apply, apply, 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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

argTypes

protected java.lang.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.

See Also:
Constant Field Values

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).

See Also:
Constant Field Values

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).

See Also:
Constant Field Values

NO_MATCH_AMBIGUOUS

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

See Also:
Constant Field Values

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.

See Also:
Constant Field Values
Constructor Detail

MethodProc

public MethodProc()
Method Detail

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.


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.


getParameterType

public Type getParameterType(int index)

matchFailAsException

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


applyN

public java.lang.Object applyN(java.lang.Object[] args)
                        throws java.lang.Throwable
Specified by:
applyN in class ProcedureN
Throws:
java.lang.Throwable

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.