JITCode::CodePtr JITCode::addressForCall(ArityCheckMode arityCheck) { switch (arityCheck) { case ArityCheckNotRequired: return m_addressForCall; case MustCheckArity: return m_arityCheckEntrypoint.code(); } RELEASE_ASSERT_NOT_REACHED(); return CodePtr(); }
JITCode::CodePtr DirectJITCode::addressForCall( VM& vm, ExecutableBase* executable, ArityCheckMode arity, RegisterPreservationMode registers) { switch (arity) { case ArityCheckNotRequired: switch (registers) { case RegisterPreservationNotRequired: RELEASE_ASSERT(m_ref); return m_ref.code(); case MustPreserveRegisters: { #if ENABLE(JIT) RegisterPreservationWrappers* wrappers = ensureWrappers(); if (!wrappers->withoutArityCheck) wrappers->withoutArityCheck = generateRegisterPreservationWrapper(vm, executable, m_ref.code()); return wrappers->withoutArityCheck.code(); #else UNUSED_PARAM(vm); UNUSED_PARAM(executable); RELEASE_ASSERT_NOT_REACHED(); #endif } } case MustCheckArity: switch (registers) { case RegisterPreservationNotRequired: RELEASE_ASSERT(m_withArityCheck); return m_withArityCheck; case MustPreserveRegisters: { #if ENABLE(JIT) RegisterPreservationWrappers* wrappers = ensureWrappers(); if (!wrappers->withArityCheck) wrappers->withArityCheck = generateRegisterPreservationWrapper(vm, executable, m_withArityCheck); return wrappers->withArityCheck.code(); #else RELEASE_ASSERT_NOT_REACHED(); #endif } } } RELEASE_ASSERT_NOT_REACHED(); return CodePtr(); }