public abstract class Procedure extends PropertySet
Modifier and Type | Field and Description |
---|---|
static LazyPropertyKey<?> |
compilerKey |
static Symbol |
compilerXKey |
static Symbol |
validateApplyKey
Key for a property used by gnu.expr.Inlinecalls.
|
static Symbol |
validateXApplyKey
Same as validateApplyKey but handles splice args.
|
nameKey
Constructor and Description |
---|
Procedure() |
Procedure(java.lang.String n) |
Modifier and Type | Method and Description |
---|---|
void |
apply(CallContext ctx)
Call this Procedure using the explicit-CallContext-convention.
|
static void |
apply(Procedure proc,
CallContext ctx) |
abstract java.lang.Object |
apply0() |
abstract java.lang.Object |
apply1(java.lang.Object arg1) |
abstract java.lang.Object |
apply2(java.lang.Object arg1,
java.lang.Object arg2) |
abstract java.lang.Object |
apply3(java.lang.Object arg1,
java.lang.Object arg2,
java.lang.Object arg3) |
abstract java.lang.Object |
apply4(java.lang.Object arg1,
java.lang.Object arg2,
java.lang.Object arg3,
java.lang.Object arg4) |
abstract java.lang.Object |
applyN(java.lang.Object[] args) |
void |
check0(CallContext ctx)
Does match0, plus throws exception on argument mismatch.
|
void |
check1(java.lang.Object arg1,
CallContext ctx)
Does match1, plus throws exception on argument mismatch.
|
void |
check2(java.lang.Object arg1,
java.lang.Object arg2,
CallContext ctx)
Does match, plus throws exception on argument mismatch.
|
void |
check3(java.lang.Object arg1,
java.lang.Object arg2,
java.lang.Object arg3,
CallContext ctx)
Does match3, plus throws exception on argument mismatch.
|
void |
check4(java.lang.Object arg1,
java.lang.Object arg2,
java.lang.Object arg3,
java.lang.Object arg4,
CallContext ctx)
Does match4, plus throws exception on argument mismatch.
|
static void |
checkArgCount(Procedure proc,
int argCount)
Check that the number of arguments in a call is valid.
|
void |
checkN(java.lang.Object[] args,
CallContext ctx)
Does matchN, plus throws exception on argument mismatch.
|
Type |
getReturnType(Expression[] args)
Semi-deprecated - instead should be set at Inline time.
|
Procedure |
getSetter() |
java.lang.String |
getSourceLocation() |
boolean |
isSideEffectFree()
True if this Procedure (definitely) has no side-effects.
|
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 |
maxArgs()
Maximum number of arguments allowed, or -1 for unlimited.
|
static int |
maxArgs(int num)
Extract maximum number of arguments from
numArgs() encoding. |
int |
minArgs()
Minimum number of arguments required.
|
static int |
minArgs(int num)
Extract minimum number of arguments from
numArgs() encoding. |
int |
numArgs()
Return
minArgs()|(maxArgs<<12) . |
void |
set0(java.lang.Object result)
If HasSetter, the Procedure is called in the LHS of an assignment.
|
void |
set1(java.lang.Object arg1,
java.lang.Object value) |
void |
setN(java.lang.Object[] args) |
void |
setSetter(Procedure setter) |
void |
setSourceLocation(java.lang.String file,
int line) |
java.lang.String |
toString() |
getName, getProperty, getSymbol, removeProperty, setName, setProperty, setProperty, setSymbol
public static final Symbol validateApplyKey
(ApplyExp exp, InlineCalls visitor, Type required, Procedure proc)
and returns a re-written/validated Expression
.public static final Symbol validateXApplyKey
public static final Symbol compilerXKey
public static final LazyPropertyKey<?> compilerKey
public void setSourceLocation(java.lang.String file, int line)
public java.lang.String getSourceLocation()
public abstract java.lang.Object applyN(java.lang.Object[] args) throws java.lang.Throwable
java.lang.Throwable
public abstract java.lang.Object apply0() throws java.lang.Throwable
java.lang.Throwable
public abstract java.lang.Object apply1(java.lang.Object arg1) throws java.lang.Throwable
java.lang.Throwable
public abstract java.lang.Object apply2(java.lang.Object arg1, java.lang.Object arg2) throws java.lang.Throwable
java.lang.Throwable
public abstract java.lang.Object apply3(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3) throws java.lang.Throwable
java.lang.Throwable
public abstract java.lang.Object apply4(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4) throws java.lang.Throwable
java.lang.Throwable
public final int minArgs()
public final int maxArgs()
public int numArgs()
minArgs()|(maxArgs<<12)
.
We use a single virtual function to reduce the number of methods
in the system, as well as the number of virtual method table entries.
We shift by 12 so the number can normally be represented using a
sipush instruction, without requiring a constant pool entry.public static int minArgs(int num)
numArgs()
encoding.public static int maxArgs(int num)
numArgs()
encoding.public static void checkArgCount(Procedure proc, int argCount)
proc
- the Procedure being calledargCount
- the number of arguments in the callWrongArguments
- there are too many or too
few actual argumentspublic void apply(CallContext ctx) throws java.lang.Throwable
java.lang.Throwable
public static void apply(Procedure proc, CallContext ctx) throws java.lang.Throwable
java.lang.Throwable
public int match0(CallContext ctx)
public int match1(java.lang.Object arg1, CallContext ctx)
public int match2(java.lang.Object arg1, java.lang.Object arg2, CallContext ctx)
public int match3(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, CallContext ctx)
public int match4(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4, CallContext ctx)
public int matchN(java.lang.Object[] args, CallContext ctx)
public void check0(CallContext ctx)
public void check1(java.lang.Object arg1, CallContext ctx)
public void check2(java.lang.Object arg1, java.lang.Object arg2, CallContext ctx)
public void check3(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, CallContext ctx)
public void check4(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4, CallContext ctx)
public void checkN(java.lang.Object[] args, CallContext ctx)
public Procedure getSetter()
public void setSetter(Procedure setter)
public void set0(java.lang.Object result) throws java.lang.Throwable
java.lang.Throwable
public void set1(java.lang.Object arg1, java.lang.Object value) throws java.lang.Throwable
java.lang.Throwable
public void setN(java.lang.Object[] args) throws java.lang.Throwable
java.lang.Throwable
public boolean isSideEffectFree()
public Type getReturnType(Expression[] args)
public java.lang.String toString()
toString
in class java.lang.Object