Package gnu.mapping

Class Procedure

    • Field Detail

      • applyToObjectMethod

        protected MethodHandle applyToObjectMethod
        A static method with signature ??apply(Procedure,CallContext)
      • applyToConsumerMethod

        protected MethodHandle applyToConsumerMethod
      • validateApplyKey

        public static final Symbol validateApplyKey
        Key for a property used by gnu.expr.Inlinecalls. The property value is either a String of the form "CLASSNAME:METHODNAME", or a java.lang.reflect.Method (or FUTURE: MethodHandle) for a static method whose parameters are (ApplyExp exp, InlineCalls visitor, Type required, Procedure proc) and returns a re-written/validated Expression.
      • validateXApplyKey

        public static final Symbol validateXApplyKey
        Same as validateApplyKey but handles splice args.
      • compilerXKey

        public static final Symbol compilerXKey
      • inlineIfConstantSymbol

        public static final Symbol inlineIfConstantSymbol
      • applyMethodType

        public static final MethodType applyMethodType
      • applyToObjectDefault

        public static final MethodHandle applyToObjectDefault
      • applyToConsumerDefault

        public static final MethodHandle applyToConsumerDefault
    • Constructor Detail

      • Procedure

        public Procedure()
      • Procedure

        public Procedure​(String n)
      • Procedure

        public Procedure​(boolean resultGoesToConsumer,
                         MethodHandle applyMethod)
      • Procedure

        public Procedure​(boolean resultGoesToConsumer,
                         MethodHandle applyMethod,
                         String n)
    • Method Detail

      • setSourceLocation

        public void setSourceLocation​(String file,
                                      int line)
      • getSourceLocation

        public String getSourceLocation()
      • getApplyToConsumerMethod

        public final MethodHandle getApplyToConsumerMethod()
      • getApplyToObjectMethod

        public final MethodHandle getApplyToObjectMethod()
      • checkBadCode

        public void checkBadCode​(CallContext ctx)
      • minArgs

        public final int minArgs()
        Minimum number of arguments required.
      • maxArgs

        public final int maxArgs()
        Maximum number of arguments allowed, or -1 for unlimited. (May also return -1 if there are keyword arguments, for implementation reasons - FIXME.)
      • numArgs

        public int numArgs()
        Return 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.
      • minArgs

        public static int minArgs​(int num)
        Extract minimum number of arguments from numArgs() encoding.
      • maxArgs

        public static int maxArgs​(int num)
        Extract maximum number of arguments from numArgs() encoding.
      • checkArgCount

        public static void checkArgCount​(Procedure proc,
                                         int argCount)
        Check that the number of arguments in a call is valid.
        Parameters:
        proc - the Procedure being called
        argCount - the number of arguments in the call
        Throws:
        WrongArguments - there are too many or too few actual arguments
      • setSetter

        public void setSetter​(Procedure setter)
      • set0

        public void set0​(Object result)
                  throws Throwable
        If HasSetter, the Procedure is called in the LHS of an assignment.
        Throws:
        Throwable
      • isSideEffectFree

        public boolean isSideEffectFree()
        True if this Procedure (definitely) has no side-effects. Note side-effect-free does not imply idempotent if this allocates an object with "identity".
      • getReturnType

        public Type getReturnType​(Expression[] args)
        Semi-deprecated - instead should be set at Inline time. FIXME