public class PrimProcedure extends MethodProc implements Inlineable
NO_MATCH, NO_MATCH_AMBIGUOUS, NO_MATCH_BAD_TYPE, NO_MATCH_TOO_FEW_ARGS, NO_MATCH_TOO_MANY_ARGSnoArgscompilerKey, validateApplyKeynameKey| Constructor and Description |
|---|
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,
char mode,
Language language) |
PrimProcedure(Method method,
LambdaExp source) |
PrimProcedure(java.lang.reflect.Method method,
Language language) |
PrimProcedure(Method method,
Language language) |
PrimProcedure(java.lang.String className,
java.lang.String methodName,
int numArgs) |
| Modifier and Type | Method and Description |
|---|---|
void |
apply(CallContext ctx)
Call this Procedure using the explicit-CallContext-convention.
|
void |
compile(ApplyExp exp,
Compilation comp,
Target target) |
static void |
compileInvoke(Compilation comp,
Method method,
Target target,
boolean isTailCall,
int op_code,
Type stackType)
Emit the actual invoke operation, after arguments have been pushed.
|
static void |
disassemble(Procedure proc,
ClassTypeWriter cwriter) |
static void |
disassemble(Procedure proc,
java.io.Writer out) |
static void |
disassemble$X(Procedure pproc,
CallContext ctx) |
Method |
getMethod() |
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)
Semi-deprecated - instead should be set at Inline time.
|
boolean |
getStaticFlag()
True if there is no 'this' parameter.
|
java.lang.String |
getVerboseName() |
int |
isApplicable(Type[] argTypes)
Test if method is applicable to an invocation with given arguments.
|
boolean |
isConstructor() |
boolean |
isSideEffectFree()
True if this Procedure (definitely) has no side-effects.
|
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()
The (minimum, number) of arguments.
|
int |
opcode() |
void |
print(java.io.PrintWriter ps) |
void |
setReturnType(Type retType) |
void |
setSideEffectFree() |
boolean |
takesContext() |
static boolean |
takesContext(Method method) |
boolean |
takesTarget()
Whether we are passed an argument for the 'target' / 'receiver' / 'this'.
|
boolean |
takesVarArgs()
Return true iff the last parameter is a "rest" argument.
|
java.lang.String |
toString() |
applyN, matchFailAsException, mostSpecific, mostSpecific, numParameters, resolveParameterTypesapply, check0, check1, check2, check3, check4, checkArgCount, checkN, getSetter, getSourceLocation, maxArgs, maxArgs, minArgs, minArgs, set0, set1, setN, setSetter, setSourceLocationgetProperty, getSymbol, removeProperty, setName, setProperty, setProperty, setSymbolpublic PrimProcedure(java.lang.String className,
java.lang.String methodName,
int numArgs)
public PrimProcedure(java.lang.reflect.Method method,
Language language)
public PrimProcedure(Method method)
public final int opcode()
public Type getReturnType()
public void setReturnType(Type retType)
public boolean isSpecial()
public Type getReturnType(Expression[] args)
ProceduregetReturnType in class Procedurepublic Method getMethod()
public boolean isSideEffectFree()
ProcedureisSideEffectFree in class Procedurepublic void setSideEffectFree()
public boolean takesVarArgs()
public boolean takesContext()
public static boolean takesContext(Method method)
public int isApplicable(Type[] argTypes)
MethodProcisApplicable in class MethodProcpublic final boolean isConstructor()
public boolean takesTarget()
object.name(args...) (Java syntax) or
(invoke object 'name args...) (Scheme syntax).
This includes when the object is implied.
In this case we need to ignore the first argument's value.public int numArgs()
public int match0(CallContext ctx)
Procedurepublic int match1(java.lang.Object arg1,
CallContext ctx)
Procedurepublic int match2(java.lang.Object arg1,
java.lang.Object arg2,
CallContext ctx)
Procedurepublic int match3(java.lang.Object arg1,
java.lang.Object arg2,
java.lang.Object arg3,
CallContext ctx)
Procedurepublic int match4(java.lang.Object arg1,
java.lang.Object arg2,
java.lang.Object arg3,
java.lang.Object arg4,
CallContext ctx)
Procedurepublic int matchN(java.lang.Object[] args,
CallContext ctx)
public void apply(CallContext ctx) throws java.lang.Throwable
Procedurepublic static PrimProcedure makeBuiltinUnary(int opcode, Type type)
public static PrimProcedure makeBuiltinBinary(int opcode, Type type)
public final boolean getStaticFlag()
public final Type[] getParameterTypes()
public void compile(ApplyExp exp, Compilation comp, Target target)
compile in interface Inlineablepublic static void compileInvoke(Compilation comp, Method method, Target target, boolean isTailCall, int op_code, Type stackType)
public Type getParameterType(int index)
getParameterType in class MethodProcpublic static PrimProcedure getMethodFor(Procedure pproc, Expression[] args)
public static PrimProcedure getMethodFor(Procedure pproc, Declaration decl, Expression[] args, Language language)
public static PrimProcedure getMethodFor(Procedure pproc, Declaration decl, Type[] atypes, Language language)
public static void disassemble$X(Procedure pproc, CallContext ctx) throws java.lang.Exception
java.lang.Exceptionpublic static void disassemble(Procedure proc, java.io.Writer out) throws java.lang.Exception
java.lang.Exceptionpublic static void disassemble(Procedure proc, ClassTypeWriter cwriter) throws java.lang.Exception
java.lang.Exceptionpublic static java.lang.Class getProcedureClass(java.lang.Object pproc)
public static PrimProcedure getMethodFor(java.lang.Class procClass, java.lang.String name, Declaration decl, Expression[] args, Language language)
public static PrimProcedure getMethodFor(ClassType procClass, java.lang.String name, Declaration decl, Expression[] args, Language language)
public static PrimProcedure getMethodFor(ClassType procClass, java.lang.String name, Declaration decl, Type[] atypes, Language language)
public java.lang.String getName()
getName in interface NamedgetName in class PropertySetpublic java.lang.String getVerboseName()
public void print(java.io.PrintWriter ps)