Machine.java revision de75089fb7216d19e9c22cce4dc62a49513477d3
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 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.Constant; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Prototype; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Type; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.LocalItem; 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 /** 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates that the salient type of this operation is as 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * given. This differentiates between, for example, the various 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * arithmetic opcodes, which, by the time they hit a 11999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code Machine} are collapsed to the {@code int} 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * variant. (See {@link BytecodeArray#parseInstruction} for 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * details.) 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param type {@code non-null;} the salient type of the upcoming operation 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void auxType(Type type); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates that there is an auxiliary (inline, not stack) 12999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * argument of type {@code int}, with the given value. 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p><b>Note:</b> Perhaps unintuitively, the stack manipulation 13299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * ops (e.g., {@code dup} and {@code swap}) use this to 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * indicate the result stack pattern with a straightforward hex 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * encoding of the push order starting with least-significant 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * nibbles getting pushed first). For example, an all-category-1 13699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code dup2_x1} sets this to {@code 0x12312}, and the 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other form of that op sets this to 13899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code 0x121}.</p> 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 14099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * <p><b>Also Note:</b> For {@code switch*} instructions, this is 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * used to indicate the padding value (which is only useful for 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * verification).</p> 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value the argument value 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void auxIntArg(int value); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates that there is an auxiliary (inline, not stack) object 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * argument, with the value based on the given constant. 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * <p><b>Note:</b> Some opcodes use both {@code int} and 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * constant auxiliary arguments.</p> 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param cst {@code non-null;} the constant containing / referencing 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the value 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void auxCstArg(Constant cst); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates that there is an auxiliary (inline, not stack) argument 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * indicating a branch target. 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param target the argument value 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void auxTargetArg(int target); 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 17099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * consisting of a {@code switch*} table. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p><b>Note:</b> This is generally used in conjunction with 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link #auxIntArg} (which holds the padding).</p> 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 17599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param cases {@code non-null;} the list of key-target pairs, plus the default 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void auxSwitchArg(SwitchList cases); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates that there is an auxiliary (inline, not stack) argument 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * consisting of a list of initial values for a newly created array. 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 18499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param initValues {@code non-null;} the list of constant values to initialize 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the array 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void auxInitValues(ArrayList<Constant> initValues); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates that the target of this operation is the given local. 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 19299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param idx {@code >= 0;} the local variable index 19399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param type {@code non-null;} the type of the local 19499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param local {@code null-ok;} the name and signature of the local, if known 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void localTarget(int idx, Type type, LocalItem local); 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "Runs" the indicated opcode in an appropriate way, using the arguments 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * area as appropriate, and modifying the given frame in response. 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 20299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param frame {@code non-null;} frame to operate on 20399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param offset {@code >= 0;} byte offset in the method to the opcode being 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * run 20599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param opcode {@code >= 0;} the opcode to run 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run(Frame frame, int offset, int opcode); 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 209