bool BaselineInspector::isOptimizableCallStringSplit(jsbytecode* pc, JSString** stringOut, JSString** stringArg, JSObject** objOut) { if (!hasBaselineScript()) return false; const ICEntry& entry = icEntryFromPC(pc); // If StringSplit stub is attached, must have only one stub attached. if (entry.fallbackStub()->numOptimizedStubs() != 1) return false; ICStub* stub = entry.firstStub(); if (stub->kind() != ICStub::Call_StringSplit) return false; *stringOut = stub->toCall_StringSplit()->expectedThis(); *stringArg = stub->toCall_StringSplit()->expectedArg(); *objOut = stub->toCall_StringSplit()->templateObject(); return true; }
NativeObject * BaselineInspector::getTemplateObjectForNative(jsbytecode *pc, Native native) { if (!hasBaselineScript()) return nullptr; const ICEntry &entry = icEntryFromPC(pc); for (ICStub *stub = entry.firstStub(); stub; stub = stub->next()) { if (stub->isCall_Native() && stub->toCall_Native()->callee()->native() == native) return stub->toCall_Native()->templateObject(); if (stub->isCall_StringSplit() && native == js::str_split) return stub->toCall_StringSplit()->templateObject(); } return nullptr; }