OperandStack (Groovy 2.5.0)
Date: 2018-05-27

org.codehaus.groovy.classgen.asm

## Class OperandStack

- java.lang.Object
- - org.codehaus.groovy.classgen.asm.OperandStack

-     public class OperandStack
      extends java.lang.Object

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `OperandStack(WriterController wc)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ClassNode` | `box()`
    `void` | `castToBool(int mark, boolean emptyDefault)` ensure last marked parameter on the stack is a primitive boolean if mark==stack size, we assume an empty expression or statement.
    `void` | `doAsType(ClassNode targetType)`
    `void` | `doGroovyCast(ClassNode targetType)` do Groovy cast for top level element
    `void` | `doGroovyCast(Variable v)`
    `void` | `dup()` duplicate top element
    `int` | `getStackLength()`
    `ClassNode` | `getTopOperand()`
    `org.objectweb.asm.Label` | `jump(int ifIns)`
    `void` | `jump(int ifIns, org.objectweb.asm.Label label)`
    `void` | `load(ClassNode type, int idx)`
    `void` | `loadOrStoreVariable(BytecodeVariable variable, boolean useReferenceDirectly)`
    `void` | `pop()` remove operand stack top element using bytecode pop
    `void` | `popDownTo(int elements)`
    `void` | `push(ClassNode type)` push operand on stack
    `void` | `pushBool(boolean inclusive)`
    `void` | `pushConstant(ConstantExpression expression)` load the constant on the operand stack.
    `void` | `pushDynamicName(Expression name)`
    `void` | `remove(int amount)` Remove amount elements from the operand stack, without using pop.
    `void` | `replace(ClassNode type)` replace top level element with new element of given type
    `void` | `replace(ClassNode type, int n)` replace n top level elements with new element of given type
    `void` | `storeVar(BytecodeVariable variable)`
    `void` | `swap()` swap two top level operands
    `java.lang.String` | `toString()`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### OperandStack

          public OperandStack(WriterController wc)

  - ### Method Detail

    - #### getStackLength

          public int getStackLength()

    - #### popDownTo

          public void popDownTo(int elements)

    - #### castToBool

          public void castToBool(int mark,
                                 boolean emptyDefault)

      ensure last marked parameter on the stack is a primitive boolean if mark==stack size, we assume an empty expression or statement. was used and we will use the value given in emptyDefault as boolean if mark==stack.size()-1 the top element will be cast to boolean using Groovy truth. In other cases we throw a GroovyBugError

    - #### pop

          public void pop()

      remove operand stack top element using bytecode pop

    - #### jump

          public org.objectweb.asm.Label jump(int ifIns)

    - #### jump

          public void jump(int ifIns,
                           org.objectweb.asm.Label label)

    - #### dup

          public void dup()

      duplicate top element

    - #### box

          public ClassNode box()

    - #### remove

          public void remove(int amount)

      Remove amount elements from the operand stack, without using pop. For example after a method invocation

    - #### push

          public void push(ClassNode type)

      push operand on stack

    - #### swap

          public void swap()

      swap two top level operands

    - #### replace

          public void replace(ClassNode type)

      replace top level element with new element of given type

    - #### replace

          public void replace(ClassNode type,
                              int n)

      replace n top level elements with new element of given type

    - #### doGroovyCast

          public void doGroovyCast(ClassNode targetType)

      do Groovy cast for top level element

    - #### doGroovyCast

          public void doGroovyCast(Variable v)

    - #### doAsType

          public void doAsType(ClassNode targetType)

    - #### pushConstant

          public void pushConstant(ConstantExpression expression)

      load the constant on the operand stack.

    - #### pushDynamicName

          public void pushDynamicName(Expression name)

    - #### loadOrStoreVariable

          public void loadOrStoreVariable(BytecodeVariable variable,
                                          boolean useReferenceDirectly)

    - #### storeVar

          public void storeVar(BytecodeVariable variable)

    - #### load

          public void load(ClassNode type,
                           int idx)

    - #### pushBool

          public void pushBool(boolean inclusive)

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### getTopOperand

          public ClassNode getTopOperand()