/* * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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; } }