Class OneLocalsArray

All Implemented Interfaces:
ToHuman

public class OneLocalsArray extends LocalsArray
Representation of an array of local variables, with Java semantics.

Note: For the most part, the documentation for this class ignores the distinction between Type and TypeBearer.

  • Constructor Details

    • OneLocalsArray

      public OneLocalsArray(int maxLocals)
      Constructs an instance. The locals array initially consists of all-uninitialized values (represented as nulls).
      Parameters:
      maxLocals - >= 0; the maximum number of locals this instance can refer to
  • Method Details

    • copy

      public OneLocalsArray copy()
      Makes and returns a mutable copy of this instance.
      Specified by:
      copy in class LocalsArray
      Returns:
      non-null; the copy
    • annotate

      public void annotate(ExceptionWithContext ex)
      Annotates (adds context to) the given exception with information about this instance.
      Specified by:
      annotate in class LocalsArray
      Parameters:
      ex - non-null; the exception to annotate
    • toHuman

      public String toHuman()
      Return the "human" string form of this instance. This is generally less "debuggy" than toString().
      Returns:
      non-null; the human string form
    • makeInitialized

      public void makeInitialized(Type type)
      Replaces all the occurrences of the given uninitialized type in this array with its initialized equivalent.
      Specified by:
      makeInitialized in class LocalsArray
      Parameters:
      type - non-null; type to replace
    • getMaxLocals

      public int getMaxLocals()
      Gets the maximum number of locals this instance can refer to.
      Specified by:
      getMaxLocals in class LocalsArray
      Returns:
      the max locals
    • set

      public void set(int idx, TypeBearer type)
      Sets the type stored at the given local index. If the given type is category-2, then (a) the index must be at least two less than LocalsArray.getMaxLocals() and (b) the next index gets invalidated by the operation. In case of either category, if the previous local contains a category-2 value, then it too is invalidated by this operation.
      Specified by:
      set in class LocalsArray
      Parameters:
      idx - >= 0, < getMaxLocals(); which local
      type - non-null; new type for the local at idx
    • set

      public void set(RegisterSpec spec)
      Sets the type for the local indicated by the given register spec to that register spec (which includes type and optional name information). This is identical to calling set(spec.getReg(), spec).
      Specified by:
      set in class LocalsArray
      Parameters:
      spec - non-null; register spec to use as the basis for the update
    • invalidate

      public void invalidate(int idx)
      Invalidates the local at the given index.
      Specified by:
      invalidate in class LocalsArray
      Parameters:
      idx - >= 0, < getMaxLocals(); which local
    • getOrNull

      public TypeBearer getOrNull(int idx)
      Gets the type stored at the given local index, or null if the given local is uninitialized / invalid.
      Specified by:
      getOrNull in class LocalsArray
      Parameters:
      idx - >= 0, < getMaxLocals(); which local
      Returns:
      null-ok; the type of value stored in that local
    • get

      public TypeBearer get(int idx)
      Gets the type stored at the given local index, only succeeding if the given local contains a valid type (though it is allowed to be an uninitialized instance).
      Specified by:
      get in class LocalsArray
      Parameters:
      idx - >= 0, < getMaxLocals(); which local
      Returns:
      non-null; the type of value stored in that local
    • getCategory1

      public TypeBearer getCategory1(int idx)
      Gets the type stored at the given local index, which is expected to be an initialized category-1 value.
      Specified by:
      getCategory1 in class LocalsArray
      Parameters:
      idx - >= 0, < getMaxLocals(); which local
      Returns:
      non-null; the type of value stored in that local
    • getCategory2

      public TypeBearer getCategory2(int idx)
      Gets the type stored at the given local index, which is expected to be a category-2 value.
      Specified by:
      getCategory2 in class LocalsArray
      Parameters:
      idx - >= 0, < getMaxLocals(); which local
      Returns:
      non-null; the type of value stored in that local
    • merge

      public LocalsArray merge(LocalsArray other)
      Merges this instance with other. If the merged result is the same as this instance, then this is returned (not a copy).
      Specified by:
      merge in class LocalsArray
      Parameters:
      other - non-null; another LocalsArray
      Returns:
      non-null; the merge result, a new instance or this
    • merge

      public OneLocalsArray merge(OneLocalsArray other)
      Merges this OneLocalsArray instance with another OneLocalsArray instance. A more-refined version of merge which is called by that method when appropriate.
      Parameters:
      other - locals array with which to merge
      Returns:
      this instance if merge was a no-op, or a new instance if the merge resulted in a change.
    • mergeWithSubroutineCaller

      public LocalsArraySet mergeWithSubroutineCaller(LocalsArray other, int predLabel)
      Merges this instance with a LocalsSet from a subroutine caller. To be used when merging in the first block of a subroutine.
      Specified by:
      mergeWithSubroutineCaller in class LocalsArray
      Parameters:
      other - other non-null; another LocalsArray. The final locals state of a subroutine caller.
      predLabel - the label of the subroutine caller block.
      Returns:
      non-null; the merge result, a new instance or this
    • getPrimary

      protected OneLocalsArray getPrimary()
      Gets the locals set appropriate for the current execution context. That is, if this is a OneLocalsArray instance, then return this, otherwise return LocalsArraySet's primary.
      Specified by:
      getPrimary in class LocalsArray
      Returns:
      locals for this execution context.