Class Closure

    • Field Detail

      • frame

        protected final Frame frame
        The frame.
      • options

        protected final JexlOptions options
        The options.
    • Constructor Detail

      • Closure

        protected Closure​(Interpreter theCaller,
                          ASTJexlLambda lambda)
        Creates a closure.
        Parameters:
        theCaller - the calling interpreter
        lambda - the lambda
      • Closure

        protected Closure​(Script base,
                          java.lang.Object[] args)
        Creates a curried version of a script.
        Parameters:
        base - the base script
        args - the script arguments
    • Method Detail

      • callable

        public Script.Callable callable​(JexlContext context,
                                        java.lang.Object... args)
        Description copied from class: Script
        Creates a Callable from this script.

        This allows to submit it to an executor pool and provides support for asynchronous calls.

        The interpreter will handle interruption/cancellation gracefully if needed.

        Specified by:
        callable in interface JexlScript
        Overrides:
        callable in class Script
        Parameters:
        context - the context
        args - the script arguments
        Returns:
        the callable
      • captureSelfIfRecursive

        void captureSelfIfRecursive​(Frame parentFrame,
                                    int symbol)
        Enable lambda recursion.

        Assign this lambda in its own frame if the symbol it is assigned to in its definition scope is captured in its body.

        This done allow a locally defined function to "see" and call itself as a local (captured) variable.

        Typical case is: const f = (x)->x <= 0? 1 : x*f(x-1). Since assignment of f occurs after the lambda creation, we need to patch the lambda frame to expose itself through the captured symbol.
        Parameters:
        parentFrame - the parent calling frame
        symbol - the symbol index (in the caller of this closure)
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class Script
      • evaluate

        public java.lang.Object evaluate​(JexlContext context)
        Description copied from interface: JexlExpression
        Evaluates the expression with the variables contained in the supplied JexlContext.
        Specified by:
        evaluate in interface JexlExpression
        Overrides:
        evaluate in class Script
        Parameters:
        context - A JexlContext containing variables.
        Returns:
        The result of this evaluation
      • execute

        public java.lang.Object execute​(JexlContext context)
        Description copied from interface: JexlScript
        Executes the script with the variables contained in the supplied JexlContext.
        Specified by:
        execute in interface JexlScript
        Overrides:
        execute in class Script
        Parameters:
        context - A JexlContext containing variables.
        Returns:
        The result of this script, usually the result of the last statement.
      • execute

        public java.lang.Object execute​(JexlContext context,
                                        java.lang.Object... args)
        Description copied from interface: JexlScript
        Executes the script with the variables contained in the supplied JexlContext and a set of arguments corresponding to the parameters used during parsing.
        Specified by:
        execute in interface JexlScript
        Overrides:
        execute in class Script
        Parameters:
        context - A JexlContext containing variables.
        args - the arguments
        Returns:
        The result of this script, usually the result of the last statement.
      • getUnboundParameters

        public java.lang.String[] getUnboundParameters()
        Description copied from interface: JexlScript
        Gets this script unbound parameters.

        Parameters that haven't been bound by a previous call to curry().

        Specified by:
        getUnboundParameters in interface JexlScript
        Overrides:
        getUnboundParameters in class Script
        Returns:
        the parameters or null
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Script