in js/src/jit/InlinableNatives.cpp [134:371]
bool js::jit::CanInlineNativeCrossRealm(InlinableNative native) {
switch (native) {
case InlinableNative::MathAbs:
case InlinableNative::MathFloor:
case InlinableNative::MathCeil:
case InlinableNative::MathRound:
case InlinableNative::MathClz32:
case InlinableNative::MathSqrt:
case InlinableNative::MathATan2:
case InlinableNative::MathHypot:
case InlinableNative::MathMax:
case InlinableNative::MathMin:
case InlinableNative::MathPow:
case InlinableNative::MathImul:
case InlinableNative::MathFRound:
case InlinableNative::MathF16Round:
case InlinableNative::MathTrunc:
case InlinableNative::MathSign:
case InlinableNative::MathSin:
case InlinableNative::MathTan:
case InlinableNative::MathCos:
case InlinableNative::MathExp:
case InlinableNative::MathLog:
case InlinableNative::MathASin:
case InlinableNative::MathATan:
case InlinableNative::MathACos:
case InlinableNative::MathLog10:
case InlinableNative::MathLog2:
case InlinableNative::MathLog1P:
case InlinableNative::MathExpM1:
case InlinableNative::MathCosH:
case InlinableNative::MathSinH:
case InlinableNative::MathTanH:
case InlinableNative::MathACosH:
case InlinableNative::MathASinH:
case InlinableNative::MathATanH:
case InlinableNative::MathCbrt:
case InlinableNative::Boolean:
return true;
case InlinableNative::Array:
// Cross-realm case handled by inlineArray.
return true;
case InlinableNative::MathRandom:
// RNG state is per-realm.
return false;
case InlinableNative::IntlGuardToCollator:
case InlinableNative::IntlGuardToDateTimeFormat:
case InlinableNative::IntlGuardToDisplayNames:
case InlinableNative::IntlGuardToDurationFormat:
case InlinableNative::IntlGuardToListFormat:
case InlinableNative::IntlGuardToNumberFormat:
case InlinableNative::IntlGuardToPluralRules:
case InlinableNative::IntlGuardToRelativeTimeFormat:
case InlinableNative::IntlGuardToSegmenter:
case InlinableNative::IntlGuardToSegments:
case InlinableNative::IntlGuardToSegmentIterator:
case InlinableNative::IsRegExpObject:
case InlinableNative::IsOptimizableRegExpObject:
case InlinableNative::IsPossiblyWrappedRegExpObject:
case InlinableNative::IsRegExpPrototypeOptimizable:
case InlinableNative::RegExpMatcher:
case InlinableNative::RegExpSearcher:
case InlinableNative::RegExpSearcherLastLimit:
case InlinableNative::RegExpHasCaptureGroups:
case InlinableNative::GetFirstDollarIndex:
case InlinableNative::IntrinsicNewArrayIterator:
case InlinableNative::IntrinsicNewStringIterator:
case InlinableNative::IntrinsicNewRegExpStringIterator:
case InlinableNative::IntrinsicStringReplaceString:
case InlinableNative::IntrinsicStringSplitString:
case InlinableNative::IntrinsicUnsafeSetReservedSlot:
case InlinableNative::IntrinsicUnsafeGetReservedSlot:
case InlinableNative::IntrinsicUnsafeGetObjectFromReservedSlot:
case InlinableNative::IntrinsicUnsafeGetInt32FromReservedSlot:
case InlinableNative::IntrinsicUnsafeGetStringFromReservedSlot:
case InlinableNative::IntrinsicIsCallable:
case InlinableNative::IntrinsicIsConstructor:
case InlinableNative::IntrinsicToObject:
case InlinableNative::IntrinsicIsObject:
case InlinableNative::IntrinsicIsCrossRealmArrayConstructor:
case InlinableNative::IntrinsicCanOptimizeArraySpecies:
case InlinableNative::IntrinsicCanOptimizeStringProtoSymbolLookup:
case InlinableNative::IntrinsicToInteger:
case InlinableNative::IntrinsicToLength:
case InlinableNative::IntrinsicIsConstructing:
case InlinableNative::IntrinsicIsSuspendedGenerator:
case InlinableNative::IntrinsicSubstringKernel:
case InlinableNative::IntrinsicGuardToArrayIterator:
case InlinableNative::IntrinsicGuardToMapIterator:
case InlinableNative::IntrinsicGuardToSetIterator:
case InlinableNative::IntrinsicGuardToStringIterator:
case InlinableNative::IntrinsicGuardToRegExpStringIterator:
case InlinableNative::IntrinsicGuardToWrapForValidIterator:
case InlinableNative::IntrinsicGuardToIteratorHelper:
case InlinableNative::IntrinsicGuardToAsyncIteratorHelper:
#ifdef NIGHTLY_BUILD
case InlinableNative::IntrinsicGuardToIteratorRange:
#endif
case InlinableNative::IntrinsicIsPackedArray:
case InlinableNative::IntrinsicGuardToMapObject:
case InlinableNative::IntrinsicGetNextMapEntryForIterator:
case InlinableNative::IntrinsicGuardToSetObject:
case InlinableNative::IntrinsicGetNextSetEntryForIterator:
case InlinableNative::IntrinsicGuardToArrayBuffer:
case InlinableNative::IntrinsicArrayBufferByteLength:
case InlinableNative::IntrinsicPossiblyWrappedArrayBufferByteLength:
case InlinableNative::IntrinsicGuardToSharedArrayBuffer:
case InlinableNative::IntrinsicIsTypedArrayConstructor:
case InlinableNative::IntrinsicIsTypedArray:
case InlinableNative::IntrinsicIsPossiblyWrappedTypedArray:
case InlinableNative::IntrinsicPossiblyWrappedTypedArrayLength:
case InlinableNative::IntrinsicRegExpBuiltinExec:
case InlinableNative::IntrinsicRegExpBuiltinExecForTest:
case InlinableNative::IntrinsicRegExpExec:
case InlinableNative::IntrinsicRegExpExecForTest:
case InlinableNative::IntrinsicTypedArrayLength:
case InlinableNative::IntrinsicTypedArrayLengthZeroOnOutOfBounds:
case InlinableNative::IntrinsicTypedArrayByteOffset:
case InlinableNative::IntrinsicTypedArrayElementSize:
case InlinableNative::IntrinsicArrayIteratorPrototypeOptimizable:
case InlinableNative::IntrinsicThisTimeValue:
#ifdef ENABLE_EXPLICIT_RESOURCE_MANAGEMENT
case InlinableNative::IntrinsicGuardToAsyncDisposableStack:
case InlinableNative::IntrinsicGuardToDisposableStack:
#endif
MOZ_CRASH("Unexpected cross-realm intrinsic call");
case InlinableNative::TestBailout:
case InlinableNative::TestAssertFloat32:
case InlinableNative::TestAssertRecoveredOnBailout:
// Testing functions, not worth inlining cross-realm.
return false;
case InlinableNative::ArrayIsArray:
case InlinableNative::ArrayJoin:
case InlinableNative::ArrayPop:
case InlinableNative::ArrayShift:
case InlinableNative::ArrayPush:
case InlinableNative::ArraySlice:
case InlinableNative::AtomicsCompareExchange:
case InlinableNative::AtomicsExchange:
case InlinableNative::AtomicsLoad:
case InlinableNative::AtomicsStore:
case InlinableNative::AtomicsAdd:
case InlinableNative::AtomicsSub:
case InlinableNative::AtomicsAnd:
case InlinableNative::AtomicsOr:
case InlinableNative::AtomicsXor:
case InlinableNative::AtomicsIsLockFree:
case InlinableNative::AtomicsPause:
case InlinableNative::BigInt:
case InlinableNative::BigIntAsIntN:
case InlinableNative::BigIntAsUintN:
case InlinableNative::DataViewGetInt8:
case InlinableNative::DataViewGetUint8:
case InlinableNative::DataViewGetInt16:
case InlinableNative::DataViewGetUint16:
case InlinableNative::DataViewGetInt32:
case InlinableNative::DataViewGetUint32:
case InlinableNative::DataViewGetFloat16:
case InlinableNative::DataViewGetFloat32:
case InlinableNative::DataViewGetFloat64:
case InlinableNative::DataViewGetBigInt64:
case InlinableNative::DataViewGetBigUint64:
case InlinableNative::DataViewSetInt8:
case InlinableNative::DataViewSetUint8:
case InlinableNative::DataViewSetInt16:
case InlinableNative::DataViewSetUint16:
case InlinableNative::DataViewSetInt32:
case InlinableNative::DataViewSetUint32:
case InlinableNative::DataViewSetFloat16:
case InlinableNative::DataViewSetFloat32:
case InlinableNative::DataViewSetFloat64:
case InlinableNative::DataViewSetBigInt64:
case InlinableNative::DataViewSetBigUint64:
case InlinableNative::DateGetTime:
case InlinableNative::DateGetFullYear:
case InlinableNative::DateGetMonth:
case InlinableNative::DateGetDate:
case InlinableNative::DateGetDay:
case InlinableNative::DateGetHours:
case InlinableNative::DateGetMinutes:
case InlinableNative::DateGetSeconds:
case InlinableNative::FunctionBind:
case InlinableNative::MapConstructor:
case InlinableNative::MapGet:
case InlinableNative::MapHas:
case InlinableNative::MapDelete:
case InlinableNative::MapSet:
case InlinableNative::Number:
case InlinableNative::NumberParseInt:
case InlinableNative::NumberToString:
case InlinableNative::ReflectGetPrototypeOf:
case InlinableNative::SetConstructor:
case InlinableNative::SetHas:
case InlinableNative::SetDelete:
case InlinableNative::SetAdd:
case InlinableNative::SetSize:
case InlinableNative::String:
case InlinableNative::StringToString:
case InlinableNative::StringValueOf:
case InlinableNative::StringCharCodeAt:
case InlinableNative::StringCodePointAt:
case InlinableNative::StringFromCharCode:
case InlinableNative::StringFromCodePoint:
case InlinableNative::StringCharAt:
case InlinableNative::StringAt:
case InlinableNative::StringIncludes:
case InlinableNative::StringIndexOf:
case InlinableNative::StringLastIndexOf:
case InlinableNative::StringStartsWith:
case InlinableNative::StringEndsWith:
case InlinableNative::StringToLowerCase:
case InlinableNative::StringToUpperCase:
case InlinableNative::StringTrim:
case InlinableNative::StringTrimStart:
case InlinableNative::StringTrimEnd:
case InlinableNative::Object:
case InlinableNative::ObjectCreate:
case InlinableNative::ObjectIs:
case InlinableNative::ObjectIsPrototypeOf:
case InlinableNative::ObjectKeys:
case InlinableNative::ObjectToString:
case InlinableNative::TypedArrayConstructor:
#ifdef FUZZING_JS_FUZZILLI
case InlinableNative::FuzzilliHash:
#endif
// Default to false for most natives.
return false;
case InlinableNative::Limit:
break;
}
MOZ_CRASH("Unknown native");
}