diff --git a/lib/ExecutionEngine/Script.cpp b/lib/ExecutionEngine/Script.cpp
index 6e3774b..ac231b4 100644
--- a/lib/ExecutionEngine/Script.cpp
+++ b/lib/ExecutionEngine/Script.cpp
@@ -186,6 +186,7 @@
   CompilerOption option;
   option.RelocModelOpt = RelocModel;
   option.LoadAfterCompile = false;
+
   int status = internalCompile(option);
   if (status != 0) {
     ALOGE("LLVM error message: %s\n", getCompilerErrorMessage());
@@ -206,6 +207,8 @@
       return false;
   }
 
+  mObjectType = ScriptObject::Relocatable;
+
   return 0;
 }
 
@@ -229,10 +232,7 @@
 
   int status = -1;
 #if USE_CACHE
-  if (internalLoadCache(cacheDir, cacheName,
-                        ScriptObject::Executable, /* checkOnly */ false) == 0) {
-    status = 0;
-  }
+  status = internalLoadCache(cacheDir, cacheName, /* checkOnly */ false);
 #endif
 
   if (status != 0) {
@@ -254,15 +254,14 @@
   // FIXME: Registration can be conditional on the presence of debug metadata
   registerObjectWithGDB(getELF(), getELFSize()); // thread-safe registration
 
+  mObjectType = ScriptObject::Executable;
+
   return status;
 }
 
 #if USE_CACHE
 int Script::internalLoadCache(char const *cacheDir, char const *cacheName,
-                              ScriptObject::ObjectType objectType,
                               bool checkOnly) {
-  mObjectType = objectType;
-
   if ((cacheDir == NULL) || (cacheName == NULL)) {
     return 1;
   }
diff --git a/lib/ExecutionEngine/Script.h b/lib/ExecutionEngine/Script.h
index 629fd7a..b05fc07 100644
--- a/lib/ExecutionEngine/Script.h
+++ b/lib/ExecutionEngine/Script.h
@@ -64,6 +64,9 @@
     int mErrorCode;
 
     ScriptStatus::StatusType mStatus;
+    // The type of the object behind this script after compilation. For
+    // example, after returning from a successful call to prepareRelocatable(),
+    // the value of mObjectType will be ScriptObject::Relocatable.
     ScriptObject::ObjectType mObjectType;
 
     union {
@@ -81,26 +84,7 @@
 #if USE_OLD_JIT
       return std::string(mCacheDir + mCacheName + ".jit-image");
 #elif USE_MCJIT
-      std::string objPath(mCacheDir + mCacheName);
-
-      // Append suffix depends on the object type
-      switch (mObjectType) {
-        case ScriptObject::Relocatable:
-        case ScriptObject::Executable: {
-          objPath.append(".o");
-          break;
-        }
-
-        case ScriptObject::SharedObject: {
-          objPath.append(".so");
-          break;
-        }
-
-        default: {
-          assert(false && "Unknown object type!");
-        }
-      }
-      return objPath;
+      return std::string(mCacheDir + mCacheName + ".o");
 #endif
     }
 
@@ -256,9 +240,9 @@
     //
     // It returns 0 if there's a cache hit.
     //
-    // Side effect: it will set mCacheDir, mCacheName and mObjectType.
+    // Side effect: it will set mCacheDir, mCacheName.
     int internalLoadCache(char const *cacheDir, char const *cacheName,
-                          ScriptObject::ObjectType objectType, bool checkOnly);
+                          bool checkOnly);
 #endif
     int internalCompile(const CompilerOption&);
   };
