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