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 22
            ldc Lorg/jruby/ir/passes/OptimizeDynScopesPass;
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
         1: .line 21
            putstatic org.jruby.ir.passes.LiveVariableAnalysis.DEPENDENCIES:Ljava/util/List;
         2: .line 22
            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 19
            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 26
            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 31
            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.interpreter.FullInterpreterContext);
    descriptor: (Lorg/jruby/ir/interpreter/FullInterpreterContext;)Ljava/lang/Object;
    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.interpreter.FullInterpreterContext fic
         0: .line 36
            aload 1 /* fic */
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.getDataFlowProblems:()Ljava/util/Map;
            ldc "Live Variables Analysis"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 1 // org.jruby.ir.interpreter.FullInterpreterContext fic
        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   fic  Lorg/jruby/ir/interpreter/FullInterpreterContext;
    MethodParameters:
      Name  Flags
      fic   

  private void collectNonLocalDirtyVars(org.jruby.ir.interpreter.FullInterpreterContext, java.util.Set<org.jruby.ir.operands.LocalVariable>, );
    descriptor: (Lorg/jruby/ir/interpreter/FullInterpreterContext;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.interpreter.FullInterpreterContext fic
        start local 2 // java.util.Set vars
        start local 3 // int minDepth
         0: .line 40
            aload 1 /* fic */
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.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.interpreter.FullInterpreterContext 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 41
            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.interpreter.FullInterpreterContext 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 43
            aload 6 /* i */
            instanceof org.jruby.ir.instructions.ResultInstr
            ifeq 8
         5: .line 44
            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 45
            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 46
            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 52
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext 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 53
            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 54
            aload 8 /* clArg */
            instanceof org.jruby.ir.operands.WrappedIRClosure
            ifeq 12
        11: .line 55
            aload 0 /* this */
            aload 8 /* clArg */
            checkcast org.jruby.ir.operands.WrappedIRClosure
            invokevirtual org.jruby.ir.operands.WrappedIRClosure.getClosure:()Lorg/jruby/ir/IRClosure;
            invokevirtual org.jruby.ir.IRClosure.getFullInterpreterContext:()Lorg/jruby/ir/interpreter/FullInterpreterContext;
            aload 2 /* vars */
            iload 3 /* minDepth */
            iconst_1
            iadd
            invokevirtual org.jruby.ir.passes.LiveVariableAnalysis.collectNonLocalDirtyVars:(Lorg/jruby/ir/interpreter/FullInterpreterContext;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 41
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext 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 40
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext java.util.Set int top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
        14: .line 60
            return
        end local 3 // int minDepth
        end local 2 // java.util.Set vars
        end local 1 // org.jruby.ir.interpreter.FullInterpreterContext fic
        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       fic  Lorg/jruby/ir/interpreter/FullInterpreterContext;
            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/interpreter/FullInterpreterContext;Ljava/util/Set<Lorg/jruby/ir/operands/LocalVariable;>;I)V
    MethodParameters:
          Name  Flags
      fic       
      vars      
      minDepth  

  public java.lang.Object execute(org.jruby.ir.interpreter.FullInterpreterContext, java.lang.Object[]);
    descriptor: (Lorg/jruby/ir/interpreter/FullInterpreterContext;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=4, locals=7, args_size=3
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
        start local 1 // org.jruby.ir.interpreter.FullInterpreterContext fic
        start local 2 // java.lang.Object[] data
         0: .line 64
            new org.jruby.ir.dataflow.analyses.LiveVariablesProblem
            dup
            aload 1 /* fic */
            invokespecial org.jruby.ir.dataflow.analyses.LiveVariablesProblem.<init>:(Lorg/jruby/ir/interpreter/FullInterpreterContext;)V
            astore 3 /* lvp */
        start local 3 // org.jruby.ir.dataflow.analyses.LiveVariablesProblem lvp
         1: .line 66
            aload 1 /* fic */
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.getScope:()Lorg/jruby/ir/IRScope;
            instanceof org.jruby.ir.IRClosure
            ifeq 11
         2: .line 69
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 4 /* nlVars */
        start local 4 // java.util.Set nlVars
         3: .line 71
            aload 0 /* this */
            aload 1 /* fic */
            aload 4 /* nlVars */
            aload 1 /* fic */
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.isDynamicScopeEliminated:()Z
            ifeq 4
            iconst_m1
            goto 5
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem java.util.Set
      StackMap stack: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext java.util.Set
         4: iconst_0
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem java.util.Set
      StackMap stack: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext java.util.Set int
         5: invokevirtual org.jruby.ir.passes.LiveVariableAnalysis.collectNonLocalDirtyVars:(Lorg/jruby/ir/interpreter/FullInterpreterContext;Ljava/util/Set;I)V
         6: .line 74
            aload 4 /* nlVars */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 6
            goto 9
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext java.lang.Object[] org.jruby.ir.dataflow.analyses.LiveVariablesProblem java.util.Set top java.util.Iterator
      StackMap stack:
         7: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.operands.Variable
            astore 5 /* v */
        start local 5 // org.jruby.ir.operands.Variable v
         8: .line 75
            aload 3 /* lvp */
            aload 5 /* v */
            invokevirtual org.jruby.ir.dataflow.analyses.LiveVariablesProblem.addDFVar:(Lorg/jruby/ir/operands/Variable;)V
        end local 5 // org.jruby.ir.operands.Variable v
         9: .line 74
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        10: .line 77
            aload 3 /* lvp */
            aload 4 /* nlVars */
            invokevirtual org.jruby.ir.dataflow.analyses.LiveVariablesProblem.setVarsLiveOnScopeExit:(Ljava/util/Collection;)V
        end local 4 // java.util.Set nlVars
        11: .line 80
      StackMap locals: org.jruby.ir.passes.LiveVariableAnalysis org.jruby.ir.interpreter.FullInterpreterContext 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
        12: .line 81
            aload 1 /* fic */
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.getDataFlowProblems:()Ljava/util/Map;
            ldc "Live Variables Analysis"
            aload 3 /* lvp */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        13: .line 83
            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.interpreter.FullInterpreterContext fic
        end local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   14     0    this  Lorg/jruby/ir/passes/LiveVariableAnalysis;
            0   14     1     fic  Lorg/jruby/ir/interpreter/FullInterpreterContext;
            0   14     2    data  [Ljava/lang/Object;
            1   14     3     lvp  Lorg/jruby/ir/dataflow/analyses/LiveVariablesProblem;
            3   11     4  nlVars  Ljava/util/Set<Lorg/jruby/ir/operands/LocalVariable;>;
            8    9     5       v  Lorg/jruby/ir/operands/Variable;
    MethodParameters:
      Name  Flags
      fic   
      data  

  public boolean invalidate(org.jruby.ir.interpreter.FullInterpreterContext);
    descriptor: (Lorg/jruby/ir/interpreter/FullInterpreterContext;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.ir.passes.LiveVariableAnalysis this
        start local 1 // org.jruby.ir.interpreter.FullInterpreterContext fic
         0: .line 88
            aload 0 /* this */
            aload 1 /* fic */
            invokespecial org.jruby.ir.passes.CompilerPass.invalidate:(Lorg/jruby/ir/interpreter/FullInterpreterContext;)Z
            pop
         1: .line 89
            aload 1 /* fic */
            invokevirtual org.jruby.ir.interpreter.FullInterpreterContext.getDataFlowProblems:()Ljava/util/Map;
            ldc "Live Variables Analysis"
            aconst_null
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 90
            iconst_1
            ireturn
        end local 1 // org.jruby.ir.interpreter.FullInterpreterContext fic
        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   fic  Lorg/jruby/ir/interpreter/FullInterpreterContext;
    MethodParameters:
      Name  Flags
      fic   
}
SourceFile: "LiveVariableAnalysis.java"