// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.java.decompiler.code; /* * opc_tableswitch, lookupswitch */ public class SwitchInstruction extends Instruction { private int[] destinations; private int[] values; private int defaultdest; public SwitchInstruction() { } public void initInstruction(InstructionSequence seq) { int pref = (opcode == CodeConstants.opc_tableswitch ? 3 : 2); int len = this.getOperands().length - pref; defaultdest = seq.getPointerByRelOffset(this.getOperand(0)); int low = 0; if (opcode == CodeConstants.opc_lookupswitch) { len /= 2; } else { low = this.getOperand(1); } destinations = new int[len]; values = new int[len]; for (int i = 0, k = 0; i < len; i++, k++) { if (opcode == CodeConstants.opc_lookupswitch) { values[i] = this.getOperand(pref + k); k++; } else { values[i] = low + k; } destinations[i] = seq.getPointerByRelOffset(this.getOperand(pref + k)); } } public SwitchInstruction clone() { SwitchInstruction newinstr = (SwitchInstruction)super.clone(); newinstr.defaultdest = defaultdest; newinstr.destinations = destinations.clone(); newinstr.values = values.clone(); return newinstr; } public int[] getDestinations() { return destinations; } public void setDestinations(int[] destinations) { this.destinations = destinations; } public int getDefaultdest() { return defaultdest; } public void setDefaultdest(int defaultdest) { this.defaultdest = defaultdest; } public int[] getValues() { return values; } public void setValues(int[] values) { this.values = values; } }