C++程序  |  44行  |  1.22 KB

/*--- end of opcodes ---*/

#ifndef THREADED_INTERP
        } // end of "switch"
    } // end of "while"
#endif

bail:
    ILOGD("|-- Leaving interpreter loop");      // note "curMethod" may be NULL

    interpState->retval = retval;
    return false;

bail_switch:
    /*
     * The standard interpreter currently doesn't set or care about the
     * "debugIsMethodEntry" value, so setting this is only of use if we're
     * switching between two "debug" interpreters, which we never do.
     *
     * TODO: figure out if preserving this makes any sense.
     */
#if defined(WITH_PROFILER) || defined(WITH_DEBUGGER)
# if INTERP_TYPE == INTERP_DBG
    interpState->debugIsMethodEntry = debugIsMethodEntry;
# else
    interpState->debugIsMethodEntry = false;
# endif
#endif

    /* export state changes */
    interpState->method = curMethod;
    interpState->pc = pc;
    interpState->fp = fp;
    /* debugTrackedRefStart doesn't change */
    interpState->retval = retval;   /* need for _entryPoint=ret */
    interpState->nextMode =
        (INTERP_TYPE == INTERP_STD) ? INTERP_DBG : INTERP_STD;
    LOGVV(" meth='%s.%s' pc=0x%x fp=%p\n",
        curMethod->clazz->descriptor, curMethod->name,
        pc - curMethod->insns, fp);
    return true;
}