summaryrefslogtreecommitdiffstats
path: root/vm/oo/Resolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm/oo/Resolve.c')
-rw-r--r--vm/oo/Resolve.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/vm/oo/Resolve.c b/vm/oo/Resolve.c
index 04c96db20..52eeee0b8 100644
--- a/vm/oo/Resolve.c
+++ b/vm/oo/Resolve.c
@@ -64,6 +64,7 @@ ClassObject* dvmResolveClass(const ClassObject* referrer, u4 classIdx,
{
DvmDex* pDvmDex = referrer->pDvmDex;
ClassObject* resClass;
+ const char* className;
/*
* Check the table first -- this gets called from the other "resolve"
@@ -85,9 +86,13 @@ ClassObject* dvmResolveClass(const ClassObject* referrer, u4 classIdx,
*
* If this is an array class, we'll generate it here.
*/
- resClass = dvmFindClassNoInit(
- dexStringByTypeIdx(pDvmDex->pDexFile, classIdx),
- referrer->classLoader);
+ className = dexStringByTypeIdx(pDvmDex->pDexFile, classIdx);
+ if (className[0] != '\0' && className[1] == '\0') {
+ /* primitive type */
+ resClass = dvmFindPrimitiveClass(className[0]);
+ } else {
+ resClass = dvmFindClassNoInit(className, referrer->classLoader);
+ }
if (resClass != NULL) {
/*