1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.dx.cf.code;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19fe107fb6e3f308ac5174ebdc5a794ee880c741d9Jesse Wilsonimport com.android.dx.rop.code.LocalItem;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.Constant;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Prototype;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Type;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interface for machines capable of executing bytecode by acting
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * upon a {@link Frame}. A machine conceptually contains four arbitrary-value
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * argument slots, slots for several literal-value arguments, and slots for
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * branch target information.
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic interface Machine {
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Gets the effective prototype of the method that this instance is
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * being used for. The <i>effective</i> prototype includes an initial
3599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code this} argument for instance methods.
36de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
3799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} the method prototype
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Prototype getPrototype();
40de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Clears the regular and auxiliary arguments area.
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void clearArgs();
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Pops the given number of values from the stack (of either category),
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and store them in the arguments area, indicating that there are now
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that many arguments. Also, clear the auxiliary arguments.
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
5299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param count {@code >= 0;} number of values to pop
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void popArgs(Frame frame, int count);
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Pops values from the stack of the types indicated by the given
5899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code Prototype} (popped in reverse of the argument
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * order, so the first prototype argument type is for the deepest
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * element of the stack), and store them in the arguments area,
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicating that there are now that many arguments. Also, clear
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the auxiliary arguments.
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
6599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param prototype {@code non-null;} prototype indicating arguments to pop
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void popArgs(Frame frame, Prototype prototype);
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Pops a value from the stack of the indicated type, and store it
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * in the arguments area, indicating that there are now that many
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * arguments. Also, clear the auxiliary arguments.
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
7599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the argument
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void popArgs(Frame frame, Type type);
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Pops values from the stack of the indicated types (popped in
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * reverse argument order, so the first indicated type is for the
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * deepest element of the stack), and store them in the arguments
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * area, indicating that there are now that many arguments. Also,
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * clear the auxiliary arguments.
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
8699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
8799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type1 {@code non-null;} type of the first argument
8899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type2 {@code non-null;} type of the second argument
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void popArgs(Frame frame, Type type1, Type type2);
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Pops values from the stack of the indicated types (popped in
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * reverse argument order, so the first indicated type is for the
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * deepest element of the stack), and store them in the arguments
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * area, indicating that there are now that many arguments. Also,
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * clear the auxiliary arguments.
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
9999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
10099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type1 {@code non-null;} type of the first argument
10199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type2 {@code non-null;} type of the second argument
10299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type3 {@code non-null;} type of the third argument
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void popArgs(Frame frame, Type type1, Type type2, Type type3);
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Loads the local variable with the given index as the sole argument in
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the arguments area. Also, clear the auxiliary arguments.
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
11099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
11199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param idx {@code >= 0;} the local variable index
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void localArg(Frame frame, int idx);
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
116c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao     * Used to specify if a loaded local variable has info in the local
117c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao     * variable table.
118c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao     *
119c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao     * @param local {@code true} if local arg has info in local variable table
120c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao     */
121c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao    public void localInfo(boolean local);
122c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao
123c31f795aef67a0d6af9abe4610db5ecae8d30c19jeffhao    /**
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that the salient type of this operation is as
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given. This differentiates between, for example, the various
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * arithmetic opcodes, which, by the time they hit a
12799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code Machine} are collapsed to the {@code int}
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * variant. (See {@link BytecodeArray#parseInstruction} for
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * details.)
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
13199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} the salient type of the upcoming operation
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void auxType(Type type);
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that there is an auxiliary (inline, not stack)
13799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * argument of type {@code int}, with the given value.
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p><b>Note:</b> Perhaps unintuitively, the stack manipulation
14099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * ops (e.g., {@code dup} and {@code swap}) use this to
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicate the result stack pattern with a straightforward hex
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encoding of the push order starting with least-significant
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * nibbles getting pushed first). For example, an all-category-1
14499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code dup2_x1} sets this to {@code 0x12312}, and the
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * other form of that op sets this to
14699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code 0x121}.</p>
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
14899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * <p><b>Also Note:</b> For {@code switch*} instructions, this is
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used to indicate the padding value (which is only useful for
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * verification).</p>
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value the argument value
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void auxIntArg(int value);
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that there is an auxiliary (inline, not stack) object
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * argument, with the value based on the given constant.
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
16099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * <p><b>Note:</b> Some opcodes use both {@code int} and
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constant auxiliary arguments.</p>
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
16399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param cst {@code non-null;} the constant containing / referencing
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the value
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void auxCstArg(Constant cst);
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that there is an auxiliary (inline, not stack) argument
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicating a branch target.
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param target the argument value
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void auxTargetArg(int target);
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that there is an auxiliary (inline, not stack) argument
17899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * consisting of a {@code switch*} table.
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p><b>Note:</b> This is generally used in conjunction with
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@link #auxIntArg} (which holds the padding).</p>
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
18399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param cases {@code non-null;} the list of key-target pairs, plus the default
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void auxSwitchArg(SwitchList cases);
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that there is an auxiliary (inline, not stack) argument
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * consisting of a list of initial values for a newly created array.
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
19299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param initValues {@code non-null;} the list of constant values to initialize
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the array
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void auxInitValues(ArrayList<Constant> initValues);
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates that the target of this operation is the given local.
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
20099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param idx {@code >= 0;} the local variable index
20199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} the type of the local
20299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param local {@code null-ok;} the name and signature of the local, if known
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void localTarget(int idx, Type type, LocalItem local);
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "Runs" the indicated opcode in an appropriate way, using the arguments
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * area as appropriate, and modifying the given frame in response.
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
21099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param frame {@code non-null;} frame to operate on
21199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param offset {@code >= 0;} byte offset in the method to the opcode being
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * run
21399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param opcode {@code >= 0;} the opcode to run
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void run(Frame frame, int offset, int opcode);
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
217