gnu.expr
Class PrimProcedure

java.lang.Object
  extended by gnu.mapping.Procedure
      extended by gnu.mapping.ProcedureN
          extended by gnu.mapping.MethodProc
              extended by gnu.expr.PrimProcedure
All Implemented Interfaces:
Inlineable, Named

public class PrimProcedure
extends MethodProc
implements Inlineable

A primitive Procedure implemented by a plain Java method.


Field Summary
 
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
 
Fields inherited from class gnu.mapping.ProcedureN
noArgs
 
Constructor Summary
PrimProcedure(ClassType classtype, Type[] argTypes)
          Use to compile new followed by constructor.
PrimProcedure(int op_code, ClassType classtype, java.lang.String name, Type retType, Type[] argTypes)
           
PrimProcedure(int opcode, Type retType, Type[] argTypes)
           
PrimProcedure(Method method)
           
PrimProcedure(Method method, boolean is_special, Language language)
           
PrimProcedure(Method method, LambdaExp source)
           
PrimProcedure(java.lang.reflect.Method method, Language language)
           
PrimProcedure(Method method, Language language)
           
 
Method Summary
 void apply(CallContext ctx)
          Call this Procedure using the explicit-CallContext-convention.
 void compile(ApplyExp exp, Compilation comp, Target target)
           
static void compile(Compilation comp, Method method, Target target, boolean isTailCall, int op_code, Type stackType)
           
 void compile(Type thisType, ApplyExp exp, Compilation comp, Target target)
           
static PrimProcedure getMethodFor(java.lang.Class procClass, java.lang.String name, Declaration decl, Expression[] args, Language language)
          Get PrimProcedure for matching method in given class.
static PrimProcedure getMethodFor(ClassType procClass, java.lang.String name, Declaration decl, Expression[] args, Language language)
           
static PrimProcedure getMethodFor(ClassType procClass, java.lang.String name, Declaration decl, Type[] atypes, Language language)
           
static PrimProcedure getMethodFor(Procedure pproc, Declaration decl, Expression[] args, Language language)
          Search for a matching static method in a procedure's class.
static PrimProcedure getMethodFor(Procedure pproc, Declaration decl, Type[] atypes, Language language)
           
static PrimProcedure getMethodFor(Procedure pproc, Expression[] args)
           
 java.lang.String getName()
           
 Type getParameterType(int index)
           
 Type[] getParameterTypes()
           
static java.lang.Class getProcedureClass(java.lang.Object pproc)
           
 Type getReturnType()
           
 Type getReturnType(Expression[] args)
           
 boolean getStaticFlag()
           
 java.lang.String getVerboseName()
           
 boolean isSpecial()
           
static PrimProcedure makeBuiltinBinary(int opcode, Type type)
           
static PrimProcedure makeBuiltinUnary(int opcode, Type type)
           
 int match0(CallContext ctx)
          Pass zero arguments.
 int match1(java.lang.Object arg1, CallContext ctx)
          Pass one argument.
 int match2(java.lang.Object arg1, java.lang.Object arg2, CallContext ctx)
          Pass two arguments.
 int match3(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, CallContext ctx)
          Pass three arguments.
 int match4(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4, CallContext ctx)
          Pass four arguments.
 int matchN(java.lang.Object[] args, CallContext ctx)
           
 int numArgs()
          Return minArgs()|(maxArgs<<12).
 int opcode()
           
 void print(java.io.PrintWriter ps)
           
 void setReturnType(Type retType)
           
 boolean takesContext()
           
static boolean takesContext(Method method)
           
 boolean takesVarArgs()
          Return true iff the last parameter is a "rest" argument.
 java.lang.String toString()
           
 
Methods inherited from class gnu.mapping.MethodProc
applyN, isApplicable, matchFailAsException, mostSpecific, mostSpecific, numParameters, resolveParameterTypes
 
Methods inherited from class gnu.mapping.ProcedureN
apply0, apply1, apply2, apply3, apply4
 
Methods inherited from class gnu.mapping.Procedure
apply, check0, check1, check2, check3, check4, checkArgCount, checkN, getProperty, getSetter, getSymbol, maxArgs, minArgs, name, removeProperty, set0, set1, setN, setName, setProperty, setProperty, setSetter, setSymbol
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PrimProcedure

public PrimProcedure(java.lang.reflect.Method method,
                     Language language)

PrimProcedure

public PrimProcedure(Method method)

PrimProcedure

public PrimProcedure(Method method,
                     Language language)

PrimProcedure

public PrimProcedure(Method method,
                     boolean is_special,
                     Language language)

PrimProcedure

public PrimProcedure(Method method,
                     LambdaExp source)

PrimProcedure

public PrimProcedure(int opcode,
                     Type retType,
                     Type[] argTypes)

PrimProcedure

public PrimProcedure(int op_code,
                     ClassType classtype,
                     java.lang.String name,
                     Type retType,
                     Type[] argTypes)

PrimProcedure

public PrimProcedure(ClassType classtype,
                     Type[] argTypes)
Use to compile new followed by constructor.

Method Detail

opcode

public final int opcode()

getReturnType

public Type getReturnType()

setReturnType

public void setReturnType(Type retType)

isSpecial

public boolean isSpecial()

getReturnType

public Type getReturnType(Expression[] args)
Specified by:
getReturnType in interface Inlineable

takesVarArgs

public boolean takesVarArgs()
Return true iff the last parameter is a "rest" argument.


takesContext

public boolean takesContext()

takesContext

public static boolean takesContext(Method method)

numArgs

public int numArgs()
Description copied from class: Procedure
Return minArgs()|(maxArgs<<12).

Overrides:
numArgs in class Procedure

match0

public int match0(CallContext ctx)
Description copied from class: Procedure
Pass zero arguments.

Overrides:
match0 in class Procedure
Returns:
non-negative if the match succeeded, else negative.

match1

public int match1(java.lang.Object arg1,
                  CallContext ctx)
Description copied from class: Procedure
Pass one argument.

Overrides:
match1 in class Procedure
Returns:
non-negative if the match succeeded, else negative.

match2

public int match2(java.lang.Object arg1,
                  java.lang.Object arg2,
                  CallContext ctx)
Description copied from class: Procedure
Pass two arguments.

Overrides:
match2 in class Procedure
Returns:
non-negative if the match succeeded, else negative.

match3

public int match3(java.lang.Object arg1,
                  java.lang.Object arg2,
                  java.lang.Object arg3,
                  CallContext ctx)
Description copied from class: Procedure
Pass three arguments.

Overrides:
match3 in class Procedure
Returns:
non-negative if the match succeeded, else negative.

match4

public int match4(java.lang.Object arg1,
                  java.lang.Object arg2,
                  java.lang.Object arg3,
                  java.lang.Object arg4,
                  CallContext ctx)
Description copied from class: Procedure
Pass four arguments.

Overrides:
match4 in class Procedure
Returns:
non-negative if the match succeeded, else negative.

matchN

public int matchN(java.lang.Object[] args,
                  CallContext ctx)
Overrides:
matchN 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

makeBuiltinUnary

public static PrimProcedure makeBuiltinUnary(int opcode,
                                             Type type)

makeBuiltinBinary

public static PrimProcedure makeBuiltinBinary(int opcode,
                                              Type type)

getStaticFlag

public final boolean getStaticFlag()

getParameterTypes

public final Type[] getParameterTypes()

compile

public void compile(ApplyExp exp,
                    Compilation comp,
                    Target target)
Specified by:
compile in interface Inlineable

compile

public void compile(Type thisType,
                    ApplyExp exp,
                    Compilation comp,
                    Target target)

compile

public static void compile(Compilation comp,
                           Method method,
                           Target target,
                           boolean isTailCall,
                           int op_code,
                           Type stackType)

getParameterType

public Type getParameterType(int index)
Overrides:
getParameterType in class MethodProc

getMethodFor

public static PrimProcedure getMethodFor(Procedure pproc,
                                         Expression[] args)

getMethodFor

public static PrimProcedure getMethodFor(Procedure pproc,
                                         Declaration decl,
                                         Expression[] args,
                                         Language language)
Search for a matching static method in a procedure's class.

Returns:
a PrimProcedure that is suitable, or null.

getMethodFor

public static PrimProcedure getMethodFor(Procedure pproc,
                                         Declaration decl,
                                         Type[] atypes,
                                         Language language)

getProcedureClass

public static java.lang.Class getProcedureClass(java.lang.Object pproc)

getMethodFor

public static PrimProcedure getMethodFor(java.lang.Class procClass,
                                         java.lang.String name,
                                         Declaration decl,
                                         Expression[] args,
                                         Language language)
Get PrimProcedure for matching method in given class.


getMethodFor

public static PrimProcedure getMethodFor(ClassType procClass,
                                         java.lang.String name,
                                         Declaration decl,
                                         Expression[] args,
                                         Language language)

getMethodFor

public static PrimProcedure getMethodFor(ClassType procClass,
                                         java.lang.String name,
                                         Declaration decl,
                                         Type[] atypes,
                                         Language language)

getName

public java.lang.String getName()
Specified by:
getName in interface Named
Overrides:
getName in class Procedure

getVerboseName

public java.lang.String getVerboseName()

toString

public java.lang.String toString()
Overrides:
toString in class Procedure

print

public void print(java.io.PrintWriter ps)