1916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath/*
2916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Copyright (C) 2011 The Android Open Source Project
3916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *
4916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License");
5916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * you may not use this file except in compliance with the License.
6916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * You may obtain a copy of the License at
7916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *
8916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *      http://www.apache.org/licenses/LICENSE-2.0
9916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath *
10916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Unless required by applicable law or agreed to in writing, software
11916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
12916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * See the License for the specific language governing permissions and
14916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * limitations under the License.
15916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath */
16916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
17916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamathpackage com.android.dex;
18916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
19916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamathpublic final class Code {
20916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final int registersSize;
21916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final int insSize;
22916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final int outsSize;
23916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final int debugInfoOffset;
24916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final short[] instructions;
25916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final Try[] tries;
26916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    private final CatchHandler[] catchHandlers;
27916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
28916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Code(int registersSize, int insSize, int outsSize, int debugInfoOffset,
29916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            short[] instructions, Try[] tries, CatchHandler[] catchHandlers) {
30916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.registersSize = registersSize;
31916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.insSize = insSize;
32916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.outsSize = outsSize;
33916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.debugInfoOffset = debugInfoOffset;
34916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.instructions = instructions;
35916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.tries = tries;
36916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        this.catchHandlers = catchHandlers;
37916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
38916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
39916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public int getRegistersSize() {
40916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return registersSize;
41916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
42916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
43916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public int getInsSize() {
44916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return insSize;
45916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
46916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
47916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public int getOutsSize() {
48916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return outsSize;
49916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
50916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
51916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public int getDebugInfoOffset() {
52916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return debugInfoOffset;
53916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
54916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
55916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public short[] getInstructions() {
56916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return instructions;
57916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
58916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
59916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public Try[] getTries() {
60916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return tries;
61916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
62916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
63916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public CatchHandler[] getCatchHandlers() {
64916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        return catchHandlers;
65916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
66916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
67916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public static class Try {
68916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int startAddress;
69916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int instructionCount;
70916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int catchHandlerIndex;
71916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
72916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        Try(int startAddress, int instructionCount, int catchHandlerIndex) {
73916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.startAddress = startAddress;
74916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.instructionCount = instructionCount;
75916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.catchHandlerIndex = catchHandlerIndex;
76916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
77916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
78916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getStartAddress() {
79916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return startAddress;
80916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
81916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
82916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getInstructionCount() {
83916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return instructionCount;
84916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
85916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
86916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        /**
87916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath         * Returns this try's catch handler <strong>index</strong>. Note that
88916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath         * this is distinct from the its catch handler <strong>offset</strong>.
89916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath         */
90916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getCatchHandlerIndex() {
91916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return catchHandlerIndex;
92916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
93916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
94916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
95916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    public static class CatchHandler {
96916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int[] typeIndexes;
97916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int[] addresses;
98916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int catchAllAddress;
99916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        final int offset;
100916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
101916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public CatchHandler(int[] typeIndexes, int[] addresses, int catchAllAddress, int offset) {
102916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.typeIndexes = typeIndexes;
103916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.addresses = addresses;
104916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.catchAllAddress = catchAllAddress;
105916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            this.offset = offset;
106916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
107916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
108916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int[] getTypeIndexes() {
109916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return typeIndexes;
110916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
111916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
112916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int[] getAddresses() {
113916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return addresses;
114916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
115916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
116916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getCatchAllAddress() {
117916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return catchAllAddress;
118916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
119916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath
120916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        public int getOffset() {
121916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath            return offset;
122916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath        }
123916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath    }
124916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath}
125