1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 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 Project/* 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Functions for dealing with method prototypes 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#ifndef LIBDEX_DEXPROTO_H_ 22375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#define LIBDEX_DEXPROTO_H_ 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "DexFile.h" 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Single-thread single-string cache. This structure holds a pointer to 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * a string which is semi-automatically manipulated by some of the 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method prototype functions. Functions which use in this struct 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * generally return a string that is valid until the next 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * time the same DexStringCache is used. 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 33bfc9799b1a53fd6f6136d07e6278d4538cf70f13Carl Shapirostruct DexStringCache { 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char* value; /* the latest value */ 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project size_t allocatedSize; /* size of the allocated buffer, if allocated */ 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char buffer[120]; /* buffer used to hold small-enough results */ 37bfc9799b1a53fd6f6136d07e6278d4538cf70f13Carl Shapiro}; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 403c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson * Make sure that the given cache can hold a string of the given length, 413c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson * including the final '\0' byte. 423c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson */ 433c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilsonvoid dexStringCacheAlloc(DexStringCache* pCache, size_t length); 443c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson 453c6f4c012e0a314dc9f9f540b9374dbf530d03b0Jesse Wilson/* 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Initialize the given DexStringCache. Use this function before passing 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * one into any other function. 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dexStringCacheInit(DexStringCache* pCache); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Release the allocated contents of the given DexStringCache, if any. 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Use this function after your last use of a DexStringCache. 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dexStringCacheRelease(DexStringCache* pCache); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the given DexStringCache doesn't already point at the given value, 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * make a copy of it into the cache. This always returns a writable 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * pointer to the contents (whether or not a copy had to be made). This 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * function is intended to be used after making a call that at least 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sometimes doesn't populate a DexStringCache. 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectchar* dexStringCacheEnsureCopy(DexStringCache* pCache, const char* value); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Abandon the given DexStringCache, and return a writable copy of the 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * given value (reusing the string cache's allocation if possible). 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The return value must be free()d by the caller. Use this instead of 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dexStringCacheRelease() if you want the buffer to survive past the 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * scope of the DexStringCache. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectchar* dexStringCacheAbandon(DexStringCache* pCache, const char* value); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Method prototype structure, which refers to a protoIdx in a 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * particular DexFile. 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 79bfc9799b1a53fd6f6136d07e6278d4538cf70f13Carl Shapirostruct DexProto { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexFile* dexFile; /* file the idx refers to */ 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 protoIdx; /* index into proto_ids table of dexFile */ 82bfc9799b1a53fd6f6136d07e6278d4538cf70f13Carl Shapiro}; 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set the given DexProto to refer to the prototype of the given MethodId. 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectDEX_INLINE void dexProtoSetFromMethodId(DexProto* pProto, 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexFile* pDexFile, const DexMethodId* pMethodId) 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pProto->dexFile = pDexFile; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pProto->protoIdx = pMethodId->protoIdx; 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the short-form method descriptor for the given prototype. The 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * prototype must be protoIdx-based. 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst char* dexProtoGetShorty(const DexProto* pProto); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the full method descriptor for the given prototype. 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst char* dexProtoGetMethodDescriptor(const DexProto* pProto, 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DexStringCache* pCache); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get a copy of the descriptor string associated with the given prototype. 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The returned pointer must be free()ed by the caller. 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectchar* dexProtoCopyMethodDescriptor(const DexProto* pProto); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the parameter descriptors for the given prototype. This is the 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * concatenation of all the descriptors for all the parameters, in 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * order, with no other adornment. 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst char* dexProtoGetParameterDescriptors(const DexProto* pProto, 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DexStringCache* pCache); 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the utf-8 encoded descriptor string from the proto of a MethodId. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectDEX_INLINE const char* dexGetDescriptorFromMethodId(const DexFile* pDexFile, 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexMethodId* pMethodId, DexStringCache* pCache) 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DexProto proto; 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dexProtoSetFromMethodId(&proto, pDexFile, pMethodId); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return dexProtoGetMethodDescriptor(&proto, pCache); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get a copy of the utf-8 encoded method descriptor string from the 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * proto of a MethodId. The returned pointer must be free()ed by the 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * caller. 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectDEX_INLINE char* dexCopyDescriptorFromMethodId(const DexFile* pDexFile, 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexMethodId* pMethodId) 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DexProto proto; 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dexProtoSetFromMethodId(&proto, pDexFile, pMethodId); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return dexProtoCopyMethodDescriptor(&proto); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the type descriptor for the return type of the given prototype. 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst char* dexProtoGetReturnType(const DexProto* pProto); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the parameter count of the given prototype. 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectsize_t dexProtoGetParameterCount(const DexProto* pProto); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compute the number of parameter words (u4 units) required by the 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * given prototype. For example, if the method takes (int, long) and 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returns double, this would return 3 (one for the int, two for the 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * long, and the return type isn't relevant). 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint dexProtoComputeArgsSize(const DexProto* pProto); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare the two prototypes. The two prototypes are compared 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with the return type as the major order, then the first arguments, 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * then second, etc. If two prototypes are identical except that one 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has extra arguments, then the shorter argument is considered the 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * earlier one in sort order (similar to strcmp()). 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint dexProtoCompare(const DexProto* pProto1, const DexProto* pProto2); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 17475144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * Compare the two prototypes, ignoring return type. The two 17575144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * prototypes are compared with the first argument as the major order, 17675144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * then second, etc. If two prototypes are identical except that one 17775144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * has extra arguments, then the shorter argument is considered the 17875144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * earlier one in sort order (similar to strcmp()). 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 18075144030732a492207f594ae6bf73f0308d6be6cDan Bornsteinint dexProtoCompareParameters(const DexProto* pProto1, 18175144030732a492207f594ae6bf73f0308d6be6cDan Bornstein const DexProto* pProto2); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare a prototype and a string method descriptor. The comparison 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is done as if the descriptor were converted to a prototype and compared 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with dexProtoCompare(). 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint dexProtoCompareToDescriptor(const DexProto* proto, const char* descriptor); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 19175144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * Compare a prototype and a concatenation of type descriptors. The 19275144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * comparison is done as if the descriptors were converted to a 19375144030732a492207f594ae6bf73f0308d6be6cDan Bornstein * prototype and compared with dexProtoCompareParameters(). 19475144030732a492207f594ae6bf73f0308d6be6cDan Bornstein */ 19575144030732a492207f594ae6bf73f0308d6be6cDan Bornsteinint dexProtoCompareToParameterDescriptors(const DexProto* proto, 19675144030732a492207f594ae6bf73f0308d6be6cDan Bornstein const char* descriptors); 19775144030732a492207f594ae6bf73f0308d6be6cDan Bornstein 19875144030732a492207f594ae6bf73f0308d6be6cDan Bornstein/* 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Single-thread prototype parameter iterator. This structure holds a 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * pointer to a prototype and its parts, along with a cursor. 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 202bfc9799b1a53fd6f6136d07e6278d4538cf70f13Carl Shapirostruct DexParameterIterator { 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexProto* proto; 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexTypeList* parameters; 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int parameterCount; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int cursor; 207bfc9799b1a53fd6f6136d07e6278d4538cf70f13Carl Shapiro}; 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Initialize the given DexParameterIterator to be at the start of the 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parameters of the given prototype. 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dexParameterIteratorInit(DexParameterIterator* pIterator, 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const DexProto* pProto); 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the type_id index for the next parameter, if any. This returns 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * kDexNoIndex if the last parameter has already been consumed. 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectu4 dexParameterIteratorNextIndex(DexParameterIterator* pIterator); 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the type descriptor for the next parameter, if any. This returns 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NULL if the last parameter has already been consumed. 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst char* dexParameterIteratorNextDescriptor( 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DexParameterIterator* pIterator); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#endif // LIBDEX_DEXPROTO_H_ 230