public class org.jruby.ir.passes.LiveVariableAnalysis extends org.jruby.ir.passes.CompilerPass
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.ir.passes.LiveVariableAnalysis
  super_class: org.jruby.ir.passes.CompilerPass
{
  private static final java.util.List<java.lang.Class<? extends org.jruby.ir.passes.CompilerPass>> DEPENDENCIES;
    descriptor: Ljava/util/List;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/Class<+Lorg/jruby/ir/passes/CompilerPass;>;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 24
            ldc Lorg/jruby/ir/passes/OptimizeDynScopesPass;
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
         1: .line 23
            putstatic org.jruby.ir.passes.LiveVariableAnalysis.DEPENDENCIES:Ljava/util/List;
         2: .line 24
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
         0: .line 21
            aload 0 /* this */
            invokespecial org.jruby.ir.passes.CompilerPass.<init>:()V
            return
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ir/passes/LiveVariableAnalysis;

  public java.util.List<java.lang.Class<? extends org.jruby.ir.passes.CompilerPass>> getDependencies();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
         0: .line 28
            getstatic org.jruby.ir.passes.LiveVariableAnalysis.DEPENDENCIES:Ljava/util/List;
            areturn
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ir/passes/LiveVariableAnalysis;
    Signature: ()Ljava/util/List<Ljava/lang/Class<+Lorg/jruby/ir/passes/CompilerPass;>;>;

  public java.lang.String getLabel();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
         0: .line 33
            ldc "Live Variable Analysis"
            areturn
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ir/passes/LiveVariableAnalysis;

  public java.lang.Object previouslyRun(org.jruby.ir.IRScope);
    descriptor: (Lorg/jruby/ir/IRScope;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
        start local 1 // org.jruby.ir.IRScope scope
         0: .line 38
            aload 1 /* scope */
            invokevirtual org.jruby.ir.IRScope.getLiveVariablesProblem:()Lorg/jruby/ir/dataflow/analyses/LiveVariablesProblem;
            areturn
        end local 1 // org.jruby.ir.IRScope scope
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/jruby/ir/passes/LiveVariableAnalysis;
            0    1     1  scope  Lorg/jruby/ir/IRScope;
    MethodParameters:
       Name  Flags
      scope  

  private void collectNonLocalDirtyVars(org.jruby.ir.IRClosure, java.util.Set<org.jruby.ir.operands.LocalVariable>, );
    descriptor: (Lorg/jruby/ir/IRClosure;Ljava/util/Set;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=9, args_size=4
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
        start local 1 // org.jruby.ir.IRClosure cl
        start local 2 // java.util.Set vars
        start local 3 // int minDepth
         0: .line 42
            aload 1 /* cl */
            invokevirtual org.jruby.ir.IRClosure.getCFG:()Lorg/jruby/ir/representations/CFG;
            invokevirtual org.jruby.ir.representations.CFG.getBasicBlocks:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 5
            goto 13
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set int top java.util.Iterator
      StackMap stack:
         1: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.representations.BasicBlock
            astore 4 /* bb */
        start local 4 // org.jruby.ir.representations.BasicBlock bb
         2: .line 43
            aload 4 /* bb */
            invokevirtual org.jruby.ir.representations.BasicBlock.getInstrs:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 7
            goto 12
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set int org.jruby.ir.representations.BasicBlock java.util.Iterator top java.util.Iterator
      StackMap stack:
         3: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.instructions.Instr
            astore 6 /* i */
        start local 6 // org.jruby.ir.instructions.Instr i
         4: .line 45
            aload 6 /* i */
            instanceof org.jruby.ir.instructions.ResultInstr
            ifeq 8
         5: .line 46
            aload 6 /* i */
            checkcast org.jruby.ir.instructions.ResultInstr
            invokeinterface org.jruby.ir.instructions.ResultInstr.getResult:()Lorg/jruby/ir/operands/Variable;
            astore 8 /* res */
        start local 8 // org.jruby.ir.operands.Variable res
         6: .line 47
            aload 8 /* res */
            instanceof org.jruby.ir.operands.LocalVariable
            ifeq 8
            aload 8 /* res */
            checkcast org.jruby.ir.operands.LocalVariable
            invokevirtual org.jruby.ir.operands.LocalVariable.getScopeDepth:()I
            iload 3 /* minDepth */
            if_icmple 8
         7: .line 48
            aload 2 /* vars */
            aload 8 /* res */
            checkcast org.jruby.ir.operands.LocalVariable
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 8 // org.jruby.ir.operands.Variable res
         8: .line 54
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set int org.jruby.ir.representations.BasicBlock java.util.Iterator org.jruby.ir.instructions.Instr java.util.Iterator
      StackMap stack:
            aload 6 /* i */
            instanceof org.jruby.ir.instructions.ClosureAcceptingInstr
            ifeq 12
         9: .line 55
            aload 6 /* i */
            checkcast org.jruby.ir.instructions.ClosureAcceptingInstr
            invokeinterface org.jruby.ir.instructions.ClosureAcceptingInstr.getClosureArg:()Lorg/jruby/ir/operands/Operand;
            astore 8 /* clArg */
        start local 8 // org.jruby.ir.operands.Operand clArg
        10: .line 56
            aload 8 /* clArg */
            instanceof org.jruby.ir.operands.WrappedIRClosure
            ifeq 12
        11: .line 57
            aload 0 /* this */
            aload 8 /* clArg */
            checkcast org.jruby.ir.operands.WrappedIRClosure
            invokevirtual org.jruby.ir.operands.WrappedIRClosure.getClosure:()Lorg/jruby/ir/IRClosure;
            aload 2 /* vars */
            iload 3 /* minDepth */
            iconst_1
            iadd
            invokevirtual org.jruby.ir.passes.LiveVariableAnalysis.collectNonLocalDirtyVars:(Lorg/jruby/ir/IRClosure;Ljava/util/Set;I)V
        end local 8 // org.jruby.ir.operands.Operand clArg
        end local 6 // org.jruby.ir.instructions.Instr i
        12: .line 43
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set int org.jruby.ir.representations.BasicBlock java.util.Iterator top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        end local 4 // org.jruby.ir.representations.BasicBlock bb
        13: .line 42
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set int top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
        14: .line 62
            return
        end local 3 // int minDepth
        end local 2 // java.util.Set vars
        end local 1 // org.jruby.ir.IRClosure cl
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   15     0      this  Lorg/jruby/ir/passes/LiveVariableAnalysis;
            0   15     1        cl  Lorg/jruby/ir/IRClosure;
            0   15     2      vars  Ljava/util/Set<Lorg/jruby/ir/operands/LocalVariable;>;
            0   15     3  minDepth  I
            2   13     4        bb  Lorg/jruby/ir/representations/BasicBlock;
            4   12     6         i  Lorg/jruby/ir/instructions/Instr;
            6    8     8       res  Lorg/jruby/ir/operands/Variable;
           10   12     8     clArg  Lorg/jruby/ir/operands/Operand;
    Signature: (Lorg/jruby/ir/IRClosure;Ljava/util/Set<Lorg/jruby/ir/operands/LocalVariable;>;I)V
    MethodParameters:
          Name  Flags
      cl        
      vars      
      minDepth  

  public java.lang.Object execute(org.jruby.ir.IRScope, java.lang.Object[]);
    descriptor: (Lorg/jruby/ir/IRScope;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=5, locals=8, args_size=3
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
        start local 1 // org.jruby.ir.IRScope scope
        start local 2 // java.lang.Object[] data
         0: .line 67
            aload 1 /* scope */
            invokevirtual org.jruby.ir.IRScope.computeScopeFlags:()V
         1: .line 69
            new org.jruby.ir.dataflow.analyses.LiveVariablesProblem
            dup
            aload 1 /* scope */
            invokespecial org.jruby.ir.dataflow.analyses.LiveVariablesProblem.<init>:(Lorg/jruby/ir/IRScope;)V
            astore 3 /* lvp */
        start local 3 // org.jruby.ir.dataflow.analyses.LiveVariablesProblem lvp
         2: .line 71
            aload 1 /* scope */
            instanceof org.jruby.ir.IRClosure
            ifeq 13
         3: .line 74
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 4 /* nlVars */
        start local 4 // java.util.Set nlVars
         4: .line 75
            aload 1 /* scope */
            invokevirtual org.jruby.ir.IRScope.getExecutionContext:()Lorg/jruby/ir/interpreter/FullInterpreterContext;
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.getFlags:()Ljava/util/EnumSet;
            astore 5 /* flags */
        start local 5 // java.util.EnumSet flags
         5: .line 77
            aload 0 /* this */
            aload 1 /* scope */
            checkcast org.jruby.ir.IRClosure
            aload 4 /* nlVars */
            aload 5 /* flags */
            getstatic org.jruby.ir.IRFlags.DYNSCOPE_ELIMINATED:Lorg/jruby/ir/IRFlags;
            invokevirtual java.util.EnumSet.contains:(Ljava/lang/Object;)Z
            ifeq 6
            iconst_m1
            goto 7
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRScope java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem java.util.Set java.util.EnumSet
      StackMap stack: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set
         6: iconst_0
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRScope java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem java.util.Set java.util.EnumSet
      StackMap stack: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRClosure java.util.Set int
         7: invokevirtual org.jruby.ir.passes.LiveVariableAnalysis.collectNonLocalDirtyVars:(Lorg/jruby/ir/IRClosure;Ljava/util/Set;I)V
         8: .line 80
            aload 4 /* nlVars */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 11
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRScope java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem java.util.Set java.util.EnumSet top java.util.Iterator
      StackMap stack:
         9: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.operands.Variable
            astore 6 /* v */
        start local 6 // org.jruby.ir.operands.Variable v
        10: .line 81
            aload 3 /* lvp */
            aload 6 /* v */
            invokevirtual org.jruby.ir.dataflow.analyses.LiveVariablesProblem.addDFVar:(Lorg/jruby/ir/operands/Variable;)V
        end local 6 // org.jruby.ir.operands.Variable v
        11: .line 80
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        12: .line 83
            aload 3 /* lvp */
            aload 4 /* nlVars */
            invokevirtual org.jruby.ir.dataflow.analyses.LiveVariablesProblem.setVarsLiveOnScopeExit:(Ljava/util/Collection;)V
        end local 5 // java.util.EnumSet flags
        end local 4 // java.util.Set nlVars
        13: .line 86
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.IRScope java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem
      StackMap stack:
            aload 3 /* lvp */
            invokevirtual org.jruby.ir.dataflow.analyses.LiveVariablesProblem.compute_MOP_Solution:()V
        14: .line 87
            aload 1 /* scope */
            aload 3 /* lvp */
            invokevirtual org.jruby.ir.IRScope.putLiveVariablesProblem:(Lorg/jruby/ir/dataflow/analyses/LiveVariablesProblem;)V
        15: .line 89
            aload 3 /* lvp */
            areturn
        end local 3 // org.jruby.ir.dataflow.analyses.LiveVariablesProblem lvp
        end local 2 // java.lang.Object[] data
        end local 1 // org.jruby.ir.IRScope scope
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   16     0    this  Lorg/jruby/ir/passes/LiveVariableAnalysis;
            0   16     1   scope  Lorg/jruby/ir/IRScope;
            0   16     2    data  [Ljava/lang/Object;
            2   16     3     lvp  Lorg/jruby/ir/dataflow/analyses/LiveVariablesProblem;
            4   13     4  nlVars  Ljava/util/Set<Lorg/jruby/ir/operands/LocalVariable;>;
            5   13     5   flags  Ljava/util/EnumSet<Lorg/jruby/ir/IRFlags;>;
           10   11     6       v  Lorg/jruby/ir/operands/Variable;
    MethodParameters:
       Name  Flags
      scope  
      data   

  public boolean invalidate(org.jruby.ir.IRScope);
    descriptor: (Lorg/jruby/ir/IRScope;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
        start local 1 // org.jruby.ir.IRScope scope
         0: .line 94
            aload 0 /* this */
            aload 1 /* scope */
            invokespecial org.jruby.ir.passes.CompilerPass.invalidate:(Lorg/jruby/ir/IRScope;)Z
            pop
         1: .line 95
            aload 1 /* scope */
            aconst_null
            invokevirtual org.jruby.ir.IRScope.putLiveVariablesProblem:(Lorg/jruby/ir/dataflow/analyses/LiveVariablesProblem;)V
         2: .line 96
            iconst_1
            ireturn
        end local 1 // org.jruby.ir.IRScope scope
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0   this  Lorg/jruby/ir/passes/LiveVariableAnalysis;
            0    3     1  scope  Lorg/jruby/ir/IRScope;
    MethodParameters:
       Name  Flags
      scope  
}
SourceFile: "LiveVariableAnalysis.java"