Class Frame

  • Direct Known Subclasses:
    ReferenceFrame

    public class Frame
    extends java.lang.Object
    A call frame, created from a scope, stores the arguments and local variables in a "stack frame" (sic).
    Since:
    3.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private int curried
      Number of curried parameters.
      private Scope scope
      The scope.
      protected java.lang.Object[] stack
      The actual stack frame.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected Frame​(Scope s, java.lang.Object[] r, int c)
      Creates a new frame.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) Frame assign​(java.lang.Object... values)
      Assign values to this frame.
      (package private) java.lang.Object capture​(int s, boolean lexical)
      Captures a value.
      (package private) java.lang.Object get​(int s)
      Gets a value.
      Scope getScope()
      Gets the scope.
      java.lang.String[] getUnboundParameters()
      Gets this script unbound parameters, i.e.
      (package private) boolean has​(int s)
      Tests whether this frame defines a symbol, ie declared it and assigned it a value.
      (package private) Frame newFrame​(Scope s, java.lang.Object[] r, int c)
      Creates a new from of this frame"s class.
      (package private) java.lang.Object[] nocycleStack​(Closure closure)
      Replace any instance of a closure in this stack by its (fuzzy encoded) offset in it.
      (package private) void set​(int r, java.lang.Object value)
      Sets a value.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • scope

        private final Scope scope
        The scope.
      • stack

        protected final java.lang.Object[] stack
        The actual stack frame.
      • curried

        private final int curried
        Number of curried parameters.
    • Constructor Detail

      • Frame

        protected Frame​(Scope s,
                        java.lang.Object[] r,
                        int c)
        Creates a new frame.
        Parameters:
        s - the scope
        r - the stack frame
        c - the number of curried parameters
    • Method Detail

      • assign

        Frame assign​(java.lang.Object... values)
        Assign values to this frame.
        Parameters:
        values - the values
        Returns:
        this frame
      • newFrame

        Frame newFrame​(Scope s,
                       java.lang.Object[] r,
                       int c)
        Creates a new from of this frame"s class.
        Parameters:
        s - the scope
        r - the arguments
        c - the number of curried parameters
        Returns:
        a new instance of frame
      • capture

        java.lang.Object capture​(int s,
                                 boolean lexical)
        Captures a value.
        Parameters:
        s - the offset in this frame
        lexical - true if this captured symbol is redefined locally
        Returns:
        the stacked value
      • get

        java.lang.Object get​(int s)
        Gets a value.
        Parameters:
        s - the offset in this frame
        Returns:
        the stacked value
      • set

        void set​(int r,
                 java.lang.Object value)
        Sets a value.
        Parameters:
        r - the offset in this frame
        value - the value to set in this frame
      • getScope

        public Scope getScope()
        Gets the scope.
        Returns:
        this frame scope
      • getUnboundParameters

        public java.lang.String[] getUnboundParameters()
        Gets this script unbound parameters, i.e. parameters not bound through curry().
        Returns:
        the parameter names
      • has

        boolean has​(int s)
        Tests whether this frame defines a symbol, ie declared it and assigned it a value.
        Parameters:
        s - the offset in this frame
        Returns:
        true if this symbol has been assigned a value, false otherwise
      • nocycleStack

        java.lang.Object[] nocycleStack​(Closure closure)
        Replace any instance of a closure in this stack by its (fuzzy encoded) offset in it.

        This is to avoid the cyclic dependency between the closure and its frame stack that may point back to it that occur with recursive function definitions.

        Parameters:
        closure - the owning closure
        Returns:
        the cleaned-up stack or the stack itself (most of the time)