aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util/asm/StackManipulationLookupTable.java
blob: f3fc2c2027d2911e52c9a931040b78c6dd633115 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package org.zwobble.couscous.util.asm;

import net.bytebuddy.implementation.Implementation;
import net.bytebuddy.implementation.bytecode.StackManipulation;
import net.bytebuddy.implementation.bytecode.StackSize;
import net.bytebuddy.jar.asm.Label;
import net.bytebuddy.jar.asm.MethodVisitor;

public class StackManipulationLookupTable implements StackManipulation {
    private final Label dflt;
    private final int[] keys;
    private final Label[] labels;

    public StackManipulationLookupTable(Label dflt, int[] keys, Label[] labels) {
        this.dflt = dflt;
        this.keys = keys;
        this.labels = labels;
    }

    @Override
    public boolean isValid() {
        return true;
    }

    @Override
    public Size apply(MethodVisitor methodVisitor, Implementation.Context implementationContext) {
        methodVisitor.visitLookupSwitchInsn(dflt, keys, labels);
        return StackSize.SINGLE.toDecreasingSize();
    }
}