OP_INVOKE_OBJECT_INIT_RANGE.cpp revision ab35b50311951feea3782151dd5422ee944685c2
1HANDLE_OPCODE(OP_INVOKE_OBJECT_INIT_RANGE /*{vCCCC..v(CCCC+AA-1)}, meth@BBBB*/)
2    {
3        Object* obj;
4
5        vsrc1 = FETCH(2);               /* reg number of "this" pointer */
6        obj = GET_REGISTER_AS_OBJECT(vsrc1);
7
8        if (!checkForNullExportPC(obj, fp, pc))
9            GOTO_exceptionThrown();
10
11        /*
12         * The object should be marked "finalizable" when Object.<init>
13         * completes normally.  We're going to assume it does complete
14         * (by virtue of being nothing but a return-void) and set it now.
15         */
16        if (IS_CLASS_FLAG_SET(obj->clazz, CLASS_ISFINALIZABLE)) {
17            EXPORT_PC();
18            dvmSetFinalizable(obj);
19            if (dvmGetException(self))
20                GOTO_exceptionThrown();
21        }
22
23        if (self->interpBreak.ctl.subMode & kSubModeDebuggerActive) {
24            /* behave like OP_INVOKE_DIRECT_RANGE */
25            GOTO_invoke(invokeDirect, true);
26        }
27        FINISH(3);
28    }
29OP_END
30