| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- #define InlineSlotCountIncrement (HeapConstants::ObjectGranularity / sizeof(Var))
- #define MaxPreInitializedObjectTypeInlineSlotCount 16
- #define MaxPreInitializedObjectHeaderInlinedTypeInlineSlotCount \
- (Js::DynamicTypeHandler::GetObjectHeaderInlinableSlotCapacity() + MaxPreInitializedObjectTypeInlineSlotCount)
- #define PreInitializedObjectTypeCount ((MaxPreInitializedObjectTypeInlineSlotCount / InlineSlotCountIncrement) + 1)
- CompileAssert(MaxPreInitializedObjectTypeInlineSlotCount <= USHRT_MAX);
- class ScriptSite;
- class ActiveScriptExternalLibrary;
- class ProjectionExternalLibrary;
- class EditAndContinue;
- class ChakraHostScriptContext;
- #ifdef ENABLE_PROJECTION
- namespace Projection
- {
- class ProjectionContext;
- class WinRTPromiseEngineInterfaceExtensionObject;
- }
- #endif
- namespace Js
- {
- static const unsigned int EvalMRUSize = 15;
- typedef JsUtil::BaseDictionary<DWORD_PTR, SourceContextInfo *, Recycler, PowerOf2SizePolicy> SourceContextInfoMap;
- typedef JsUtil::BaseDictionary<uint, SourceContextInfo *, Recycler, PowerOf2SizePolicy> DynamicSourceContextInfoMap;
- typedef JsUtil::BaseDictionary<EvalMapString, ScriptFunction*, RecyclerNonLeafAllocator, PrimeSizePolicy> SecondLevelEvalCache;
- typedef TwoLevelHashRecord<FastEvalMapString, ScriptFunction*, SecondLevelEvalCache, EvalMapString> EvalMapRecord;
- typedef JsUtil::Cache<FastEvalMapString, EvalMapRecord*, RecyclerNonLeafAllocator, PrimeSizePolicy, JsUtil::MRURetentionPolicy<FastEvalMapString, EvalMRUSize>, FastEvalMapStringComparer> EvalCacheTopLevelDictionary;
- typedef JsUtil::Cache<EvalMapString, FunctionInfo*, RecyclerNonLeafAllocator, PrimeSizePolicy, JsUtil::MRURetentionPolicy<EvalMapString, EvalMRUSize>> NewFunctionCache;
- typedef JsUtil::BaseDictionary<ParseableFunctionInfo*, ParseableFunctionInfo*, Recycler, PrimeSizePolicy, RecyclerPointerComparer> ParseableFunctionInfoMap;
- // This is the dictionary used by script context to cache the eval.
- typedef TwoLevelHashDictionary<FastEvalMapString, ScriptFunction*, EvalMapRecord, EvalCacheTopLevelDictionary, EvalMapString> EvalCacheDictionary;
- typedef JsUtil::BaseDictionary<JavascriptMethod, JavascriptFunction*, Recycler, PowerOf2SizePolicy> BuiltInLibraryFunctionMap;
- // valid if object!= NULL
- struct EnumeratedObjectCache
- {
- static const int kMaxCachedPropStrings = 16;
- Field(DynamicObject*) object;
- Field(DynamicType*) type;
- Field(PropertyString*) propertyStrings[kMaxCachedPropStrings];
- Field(int) validPropStrings;
- };
- struct Cache
- {
- Field(JavascriptString *) lastNumberToStringRadix10String;
- Field(EnumeratedObjectCache) enumObjCache;
- Field(JavascriptString *) lastUtcTimeFromStrString;
- Field(EvalCacheDictionary*) evalCacheDictionary;
- Field(EvalCacheDictionary*) indirectEvalCacheDictionary;
- Field(NewFunctionCache*) newFunctionCache;
- Field(RegexPatternMruMap *) dynamicRegexMap;
- Field(SourceContextInfoMap*) sourceContextInfoMap; // maps host provided context cookie to the URL of the script buffer passed.
- Field(DynamicSourceContextInfoMap*) dynamicSourceContextInfoMap;
- Field(SourceContextInfo*) noContextSourceContextInfo;
- Field(SRCINFO*) noContextGlobalSourceInfo;
- Field(Field(SRCINFO const *)*) moduleSrcInfo;
- Field(BuiltInLibraryFunctionMap*) builtInLibraryFunctions;
- #if ENABLE_PROFILE_INFO
- #if DBG_DUMP || defined(DYNAMIC_PROFILE_STORAGE) || defined(RUNTIME_DATA_COLLECTION)
- Field(DynamicProfileInfoList*) profileInfoList;
- #endif
- #endif
- };
- class MissingPropertyTypeHandler;
- class SourceTextModuleRecord;
- class ArrayBufferBase;
- class SharedContents;
- typedef RecyclerFastAllocator<JavascriptNumber, LeafBit> RecyclerJavascriptNumberAllocator;
- typedef JsUtil::List<Var, Recycler> ListForListIterator;
- class UndeclaredBlockVariable : public RecyclableObject
- {
- friend class JavascriptLibrary;
- UndeclaredBlockVariable(Type* type) : RecyclableObject(type) { }
- };
- class SourceTextModuleRecord;
- typedef JsUtil::List<SourceTextModuleRecord*> ModuleRecordList;
- #if ENABLE_COPYONACCESS_ARRAY
- struct CacheForCopyOnAccessArraySegments
- {
- static const uint32 MAX_SIZE = 31;
- Field(SparseArraySegment<int32> *) cache[MAX_SIZE];
- Field(uint32) count;
- uint32 AddSegment(SparseArraySegment<int32> *segment)
- {
- cache[count++] = segment;
- return count;
- }
- SparseArraySegment<int32> *GetSegmentByIndex(byte index)
- {
- Assert(index <= MAX_SIZE);
- return cache[index - 1];
- }
- bool IsNotOverHardLimit()
- {
- return count < MAX_SIZE;
- }
- bool IsNotFull()
- {
- return count < (uint32) CONFIG_FLAG(CopyOnAccessArraySegmentCacheSize);
- }
- bool IsValidIndex(uint32 index)
- {
- return count && index && index <= count;
- }
- #if ENABLE_DEBUG_CONFIG_OPTIONS
- uint32 GetCount()
- {
- return count;
- }
- #endif
- };
- #endif
- template <typename T>
- struct StringTemplateCallsiteObjectComparer
- {
- static bool Equals(T x, T y)
- {
- static_assert(false, "Unexpected type T");
- }
- static hash_t GetHashCode(T i)
- {
- static_assert(false, "Unexpected type T");
- }
- };
- template <>
- struct StringTemplateCallsiteObjectComparer<ParseNodePtr>
- {
- static bool Equals(ParseNodePtr x, RecyclerWeakReference<Js::RecyclableObject>* y);
- static bool Equals(ParseNodePtr x, ParseNodePtr y);
- static hash_t GetHashCode(ParseNodePtr i);
- };
- template <>
- struct StringTemplateCallsiteObjectComparer<RecyclerWeakReference<Js::RecyclableObject>*>
- {
- static bool Equals(RecyclerWeakReference<Js::RecyclableObject>* x, RecyclerWeakReference<Js::RecyclableObject>* y);
- static bool Equals(RecyclerWeakReference<Js::RecyclableObject>* x, ParseNodePtr y);
- static hash_t GetHashCode(RecyclerWeakReference<Js::RecyclableObject>* o);
- };
- class JavascriptLibrary : public JavascriptLibraryBase
- {
- friend class EditAndContinue;
- friend class ScriptSite;
- friend class GlobalObject;
- friend class ScriptContext;
- friend class EngineInterfaceObject;
- friend class ExternalLibraryBase;
- friend class ActiveScriptExternalLibrary;
- friend class IntlEngineInterfaceExtensionObject;
- friend class ChakraHostScriptContext;
- #ifdef ENABLE_PROJECTION
- friend class ProjectionExternalLibrary;
- friend class Projection::WinRTPromiseEngineInterfaceExtensionObject;
- friend class Projection::ProjectionContext;
- #endif
- static const char16* domBuiltinPropertyNames[];
- public:
- #if ENABLE_COPYONACCESS_ARRAY
- Field(CacheForCopyOnAccessArraySegments *) cacheForCopyOnAccessArraySegments;
- #endif
- static DWORD GetScriptContextOffset() { return offsetof(JavascriptLibrary, scriptContext); }
- static DWORD GetUndeclBlockVarOffset() { return offsetof(JavascriptLibrary, undeclBlockVarSentinel); }
- static DWORD GetEmptyStringOffset() { return offsetof(JavascriptLibrary, emptyString); }
- static DWORD GetUndefinedValueOffset() { return offsetof(JavascriptLibrary, undefinedValue); }
- static DWORD GetNullValueOffset() { return offsetof(JavascriptLibrary, nullValue); }
- static DWORD GetBooleanTrueOffset() { return offsetof(JavascriptLibrary, booleanTrue); }
- static DWORD GetBooleanFalseOffset() { return offsetof(JavascriptLibrary, booleanFalse); }
- static DWORD GetNegativeZeroOffset() { return offsetof(JavascriptLibrary, negativeZero); }
- static DWORD GetNumberTypeStaticOffset() { return offsetof(JavascriptLibrary, numberTypeStatic); }
- static DWORD GetStringTypeStaticOffset() { return offsetof(JavascriptLibrary, stringTypeStatic); }
- static DWORD GetObjectTypesOffset() { return offsetof(JavascriptLibrary, objectTypes); }
- static DWORD GetObjectHeaderInlinedTypesOffset() { return offsetof(JavascriptLibrary, objectHeaderInlinedTypes); }
- static DWORD GetRegexTypeOffset() { return offsetof(JavascriptLibrary, regexType); }
- static DWORD GetArrayConstructorOffset() { return offsetof(JavascriptLibrary, arrayConstructor); }
- static DWORD GetPositiveInfinityOffset() { return offsetof(JavascriptLibrary, positiveInfinite); }
- static DWORD GetNaNOffset() { return offsetof(JavascriptLibrary, nan); }
- static DWORD GetNativeIntArrayTypeOffset() { return offsetof(JavascriptLibrary, nativeIntArrayType); }
- #if ENABLE_COPYONACCESS_ARRAY
- static DWORD GetCopyOnAccessNativeIntArrayTypeOffset() { return offsetof(JavascriptLibrary, copyOnAccessNativeIntArrayType); }
- #endif
- static DWORD GetNativeFloatArrayTypeOffset() { return offsetof(JavascriptLibrary, nativeFloatArrayType); }
- static DWORD GetVTableAddressesOffset() { return offsetof(JavascriptLibrary, vtableAddresses); }
- static DWORD GetConstructorCacheDefaultInstanceOffset() { return offsetof(JavascriptLibrary, constructorCacheDefaultInstance); }
- static DWORD GetAbsDoubleCstOffset() { return offsetof(JavascriptLibrary, absDoubleCst); }
- static DWORD GetUintConvertConstOffset() { return offsetof(JavascriptLibrary, uintConvertConst); }
- static DWORD GetBuiltinFunctionsOffset() { return offsetof(JavascriptLibrary, builtinFunctions); }
- static DWORD GetCharStringCacheOffset() { return offsetof(JavascriptLibrary, charStringCache); }
- static DWORD GetCharStringCacheAOffset() { return GetCharStringCacheOffset() + CharStringCache::GetCharStringCacheAOffset(); }
- const JavascriptLibraryBase* GetLibraryBase() const { return static_cast<const JavascriptLibraryBase*>(this); }
- void SetGlobalObject(GlobalObject* globalObject) {this->globalObject = globalObject; }
- static DWORD GetRandSeed0Offset() { return offsetof(JavascriptLibrary, randSeed0); }
- static DWORD GetRandSeed1Offset() { return offsetof(JavascriptLibrary, randSeed1); }
- static DWORD GetTypeDisplayStringsOffset() { return offsetof(JavascriptLibrary, typeDisplayStrings); }
- typedef bool (CALLBACK *PromiseContinuationCallback)(Var task, void *callbackState);
- Var GetUndeclBlockVar() const { return undeclBlockVarSentinel; }
- bool IsUndeclBlockVar(Var var) const { return var == undeclBlockVarSentinel; }
- static bool IsTypedArrayConstructor(Var constructor, ScriptContext* scriptContext);
- private:
- FieldNoBarrier(Recycler *) recycler;
- Field(ExternalLibraryBase*) externalLibraryList;
- Field(UndeclaredBlockVariable*) undeclBlockVarSentinel;
- Field(DynamicType *) generatorConstructorPrototypeObjectType;
- Field(DynamicType *) constructorPrototypeObjectType;
- Field(DynamicType *) heapArgumentsType;
- Field(DynamicType *) activationObjectType;
- Field(DynamicType *) arrayType;
- Field(DynamicType *) nativeIntArrayType;
- #if ENABLE_COPYONACCESS_ARRAY
- Field(DynamicType *) copyOnAccessNativeIntArrayType;
- #endif
- Field(DynamicType *) nativeFloatArrayType;
- Field(DynamicType *) arrayBufferType;
- Field(DynamicType *) sharedArrayBufferType;
- Field(DynamicType *) dataViewType;
- Field(DynamicType *) typedArrayType;
- Field(DynamicType *) int8ArrayType;
- Field(DynamicType *) uint8ArrayType;
- Field(DynamicType *) uint8ClampedArrayType;
- Field(DynamicType *) int16ArrayType;
- Field(DynamicType *) uint16ArrayType;
- Field(DynamicType *) int32ArrayType;
- Field(DynamicType *) uint32ArrayType;
- Field(DynamicType *) float32ArrayType;
- Field(DynamicType *) float64ArrayType;
- Field(DynamicType *) int64ArrayType;
- Field(DynamicType *) uint64ArrayType;
- Field(DynamicType *) boolArrayType;
- Field(DynamicType *) charArrayType;
- Field(StaticType *) booleanTypeStatic;
- Field(DynamicType *) booleanTypeDynamic;
- Field(DynamicType *) dateType;
- Field(StaticType *) variantDateType;
- Field(DynamicType *) symbolTypeDynamic;
- Field(StaticType *) symbolTypeStatic;
- Field(DynamicType *) iteratorResultType;
- Field(DynamicType *) arrayIteratorType;
- Field(DynamicType *) mapIteratorType;
- Field(DynamicType *) setIteratorType;
- Field(DynamicType *) stringIteratorType;
- Field(DynamicType *) promiseType;
- Field(DynamicType *) listIteratorType;
- Field(JavascriptFunction*) builtinFunctions[BuiltinFunction::Count];
- Field(INT_PTR) vtableAddresses[VTableValue::Count];
- Field(JavascriptString*) typeDisplayStrings[TypeIds_Limit];
- Field(ConstructorCache *) constructorCacheDefaultInstance;
- __declspec(align(16)) Field(const BYTE *) absDoubleCst;
- Field(double const *) uintConvertConst;
- // Function Types
- Field(DynamicTypeHandler *) anonymousFunctionTypeHandler;
- Field(DynamicTypeHandler *) anonymousFunctionWithPrototypeTypeHandler;
- Field(DynamicTypeHandler *) functionTypeHandler;
- Field(DynamicTypeHandler *) functionWithPrototypeTypeHandler;
- Field(DynamicType *) externalFunctionWithDeferredPrototypeType;
- Field(DynamicType *) wrappedFunctionWithDeferredPrototypeType;
- Field(DynamicType *) stdCallFunctionWithDeferredPrototypeType;
- Field(DynamicType *) idMappedFunctionWithPrototypeType;
- Field(DynamicType *) externalConstructorFunctionWithDeferredPrototypeType;
- Field(DynamicType *) defaultExternalConstructorFunctionWithDeferredPrototypeType;
- Field(DynamicType *) boundFunctionType;
- Field(DynamicType *) regexConstructorType;
- Field(DynamicType *) crossSiteDeferredPrototypeFunctionType;
- Field(DynamicType *) crossSiteIdMappedFunctionWithPrototypeType;
- Field(DynamicType *) crossSiteExternalConstructFunctionWithPrototypeType;
- Field(StaticType *) enumeratorType;
- Field(DynamicType *) errorType;
- Field(DynamicType *) evalErrorType;
- Field(DynamicType *) rangeErrorType;
- Field(DynamicType *) referenceErrorType;
- Field(DynamicType *) syntaxErrorType;
- Field(DynamicType *) typeErrorType;
- Field(DynamicType *) uriErrorType;
- Field(DynamicType *) webAssemblyCompileErrorType;
- Field(DynamicType *) webAssemblyRuntimeErrorType;
- Field(DynamicType *) webAssemblyLinkErrorType;
- Field(StaticType *) numberTypeStatic;
- Field(StaticType *) int64NumberTypeStatic;
- Field(StaticType *) uint64NumberTypeStatic;
- Field(DynamicType *) webAssemblyModuleType;
- Field(DynamicType *) webAssemblyInstanceType;
- Field(DynamicType *) webAssemblyMemoryType;
- Field(DynamicType *) webAssemblyTableType;
- // SIMD_JS
- Field(DynamicType *) simdBool8x16TypeDynamic;
- Field(DynamicType *) simdBool16x8TypeDynamic;
- Field(DynamicType *) simdBool32x4TypeDynamic;
- Field(DynamicType *) simdInt8x16TypeDynamic;
- Field(DynamicType *) simdInt16x8TypeDynamic;
- Field(DynamicType *) simdInt32x4TypeDynamic;
- Field(DynamicType *) simdUint8x16TypeDynamic;
- Field(DynamicType *) simdUint16x8TypeDynamic;
- Field(DynamicType *) simdUint32x4TypeDynamic;
- Field(DynamicType *) simdFloat32x4TypeDynamic;
- Field(StaticType *) simdFloat32x4TypeStatic;
- Field(StaticType *) simdInt32x4TypeStatic;
- Field(StaticType *) simdInt8x16TypeStatic;
- Field(StaticType *) simdFloat64x2TypeStatic;
- Field(StaticType *) simdInt16x8TypeStatic;
- Field(StaticType *) simdBool32x4TypeStatic;
- Field(StaticType *) simdBool16x8TypeStatic;
- Field(StaticType *) simdBool8x16TypeStatic;
- Field(StaticType *) simdUint32x4TypeStatic;
- Field(StaticType *) simdUint16x8TypeStatic;
- Field(StaticType *) simdUint8x16TypeStatic;
- Field(DynamicType *) numberTypeDynamic;
- Field(DynamicType *) objectTypes[PreInitializedObjectTypeCount];
- Field(DynamicType *) objectHeaderInlinedTypes[PreInitializedObjectTypeCount];
- Field(DynamicType *) regexPrototypeType;
- Field(DynamicType *) regexType;
- Field(DynamicType *) regexResultType;
- Field(StaticType *) stringTypeStatic;
- Field(DynamicType *) stringTypeDynamic;
- Field(DynamicType *) mapType;
- Field(DynamicType *) setType;
- Field(DynamicType *) weakMapType;
- Field(DynamicType *) weakSetType;
- Field(DynamicType *) proxyType;
- Field(StaticType *) withType;
- Field(DynamicType *) SpreadArgumentType;
- Field(DynamicType *) moduleNamespaceType;
- Field(PropertyDescriptor) defaultPropertyDescriptor;
- Field(JavascriptString*) nullString;
- Field(JavascriptString*) emptyString;
- Field(JavascriptString*) quotesString;
- Field(JavascriptString*) whackString;
- Field(JavascriptString*) objectDisplayString;
- Field(JavascriptString*) stringTypeDisplayString;
- Field(JavascriptString*) errorDisplayString;
- Field(JavascriptString*) functionPrefixString;
- Field(JavascriptString*) generatorFunctionPrefixString;
- Field(JavascriptString*) asyncFunctionPrefixString;
- Field(JavascriptString*) functionDisplayString;
- Field(JavascriptString*) xDomainFunctionDisplayString;
- Field(JavascriptString*) undefinedDisplayString;
- Field(JavascriptString*) nanDisplayString;
- Field(JavascriptString*) nullDisplayString;
- Field(JavascriptString*) unknownDisplayString;
- Field(JavascriptString*) commaDisplayString;
- Field(JavascriptString*) commaSpaceDisplayString;
- Field(JavascriptString*) trueDisplayString;
- Field(JavascriptString*) falseDisplayString;
- Field(JavascriptString*) lengthDisplayString;
- Field(JavascriptString*) invalidDateString;
- Field(JavascriptString*) objectTypeDisplayString;
- Field(JavascriptString*) functionTypeDisplayString;
- Field(JavascriptString*) booleanTypeDisplayString;
- Field(JavascriptString*) numberTypeDisplayString;
- Field(JavascriptString*) moduleTypeDisplayString;
- Field(JavascriptString*) variantDateTypeDisplayString;
- // SIMD_JS
- Field(JavascriptString*) simdFloat32x4DisplayString;
- Field(JavascriptString*) simdFloat64x2DisplayString;
- Field(JavascriptString*) simdInt32x4DisplayString;
- Field(JavascriptString*) simdInt16x8DisplayString;
- Field(JavascriptString*) simdInt8x16DisplayString;
- Field(JavascriptString*) simdBool32x4DisplayString;
- Field(JavascriptString*) simdBool16x8DisplayString;
- Field(JavascriptString*) simdBool8x16DisplayString;
- Field(JavascriptString*) simdUint32x4DisplayString;
- Field(JavascriptString*) simdUint16x8DisplayString;
- Field(JavascriptString*) simdUint8x16DisplayString;
- Field(JavascriptString*) symbolTypeDisplayString;
- Field(JavascriptString*) debuggerDeadZoneBlockVariableString;
- Field(DynamicObject*) missingPropertyHolder;
- Field(StaticType*) throwErrorObjectType;
- Field(PropertyStringCacheMap*) propertyStringMap;
- Field(ConstructorCache*) builtInConstructorCache;
- #ifdef ENABLE_DEBUG_CONFIG_OPTIONS
- Field(JavascriptFunction*) debugObjectFaultInjectionCookieGetterFunction;
- Field(JavascriptFunction*) debugObjectFaultInjectionCookieSetterFunction;
- #endif
- Field(JavascriptFunction*) evalFunctionObject;
- Field(JavascriptFunction*) arrayPrototypeValuesFunction;
- Field(JavascriptFunction*) parseIntFunctionObject;
- Field(JavascriptFunction*) parseFloatFunctionObject;
- Field(JavascriptFunction*) arrayPrototypeToStringFunction;
- Field(JavascriptFunction*) arrayPrototypeToLocaleStringFunction;
- Field(JavascriptFunction*) identityFunction;
- Field(JavascriptFunction*) throwerFunction;
- Field(JavascriptFunction*) generatorNextFunction;
- Field(JavascriptFunction*) generatorThrowFunction;
- Field(JavascriptFunction*) objectValueOfFunction;
- Field(JavascriptFunction*) objectToStringFunction;
- #ifdef ENABLE_WASM
- Field(DynamicObject*) webAssemblyObject;
- #endif
- // SIMD_JS
- Field(JavascriptFunction*) simdFloat32x4ToStringFunction;
- Field(JavascriptFunction*) simdFloat64x2ToStringFunction;
- Field(JavascriptFunction*) simdInt32x4ToStringFunction;
- Field(JavascriptFunction*) simdInt16x8ToStringFunction;
- Field(JavascriptFunction*) simdInt8x16ToStringFunction;
- Field(JavascriptFunction*) simdBool32x4ToStringFunction;
- Field(JavascriptFunction*) simdBool16x8ToStringFunction;
- Field(JavascriptFunction*) simdBool8x16ToStringFunction;
- Field(JavascriptFunction*) simdUint32x4ToStringFunction;
- Field(JavascriptFunction*) simdUint16x8ToStringFunction;
- Field(JavascriptFunction*) simdUint8x16ToStringFunction;
- Field(JavascriptSymbol*) symbolMatch;
- Field(JavascriptSymbol*) symbolReplace;
- Field(JavascriptSymbol*) symbolSearch;
- Field(JavascriptSymbol*) symbolSplit;
- Field(UnifiedRegex::RegexPattern *) emptyRegexPattern;
- Field(JavascriptFunction*) regexExecFunction;
- Field(JavascriptFunction*) regexFlagsGetterFunction;
- Field(JavascriptFunction*) regexGlobalGetterFunction;
- Field(JavascriptFunction*) regexStickyGetterFunction;
- Field(JavascriptFunction*) regexUnicodeGetterFunction;
- Field(RuntimeFunction*) sharedArrayBufferConstructor;
- Field(DynamicObject*) sharedArrayBufferPrototype;
- Field(DynamicObject*) atomicsObject;
- Field(DynamicObject*) webAssemblyCompileErrorPrototype;
- Field(RuntimeFunction*) webAssemblyCompileErrorConstructor;
- Field(DynamicObject*) webAssemblyRuntimeErrorPrototype;
- Field(RuntimeFunction*) webAssemblyRuntimeErrorConstructor;
- Field(DynamicObject*) webAssemblyLinkErrorPrototype;
- Field(RuntimeFunction*) webAssemblyLinkErrorConstructor;
- Field(DynamicObject*) webAssemblyMemoryPrototype;
- Field(RuntimeFunction*) webAssemblyMemoryConstructor;
- Field(DynamicObject*) webAssemblyModulePrototype;
- Field(RuntimeFunction*) webAssemblyModuleConstructor;
- Field(DynamicObject*) webAssemblyInstancePrototype;
- Field(RuntimeFunction*) webAssemblyInstanceConstructor;
- Field(DynamicObject*) webAssemblyTablePrototype;
- Field(RuntimeFunction*) webAssemblyTableConstructor;
- Field(int) regexConstructorSlotIndex;
- Field(int) regexExecSlotIndex;
- Field(int) regexFlagsGetterSlotIndex;
- Field(int) regexGlobalGetterSlotIndex;
- Field(int) regexStickyGetterSlotIndex;
- Field(int) regexUnicodeGetterSlotIndex;
- mutable Field(CharStringCache) charStringCache;
- FieldNoBarrier(PromiseContinuationCallback) nativeHostPromiseContinuationFunction;
- Field(void *) nativeHostPromiseContinuationFunctionState;
- typedef SList<Js::FunctionProxy*, Recycler> FunctionReferenceList;
- typedef JsUtil::WeakReferenceDictionary<uintptr_t, DynamicType, DictionarySizePolicy<PowerOf2Policy, 1>> JsrtExternalTypesCache;
- Field(void *) bindRefChunkBegin;
- Field(Field(void*)*) bindRefChunkCurrent;
- Field(Field(void*)*) bindRefChunkEnd;
- Field(TypePath*) rootPath; // this should be in library instead of ScriptContext::Cache
- Field(Js::Cache) cache;
- Field(FunctionReferenceList*) dynamicFunctionReference;
- Field(uint) dynamicFunctionReferenceDepth;
- Field(FinalizableObject*) jsrtContextObject;
- Field(JsrtExternalTypesCache*) jsrtExternalTypesCache;
- Field(FunctionBody*) fakeGlobalFuncForUndefer;
- typedef JsUtil::BaseHashSet<RecyclerWeakReference<RecyclableObject>*, Recycler, PowerOf2SizePolicy, RecyclerWeakReference<RecyclableObject>*, StringTemplateCallsiteObjectComparer> StringTemplateCallsiteObjectList;
- // Used to store a list of template callsite objects.
- // We use the raw strings in the callsite object (or a string template parse node) to identify unique callsite objects in the list.
- // See abstract operation GetTemplateObject in ES6 Spec (RC1) 12.2.8.3
- Field(StringTemplateCallsiteObjectList*) stringTemplateCallsiteObjectList;
- Field(ModuleRecordList*) moduleRecordList;
- // This list contains types ensured to have only writable data properties in it and all objects in its prototype chain
- // (i.e., no readonly properties or accessors). Only prototype objects' types are stored in the list. When something
- // in the script context adds a readonly property or accessor to an object that is used as a prototype object, this
- // list is cleared. The list is also cleared before garbage collection so that it does not keep growing, and so, it can
- // hold strong references to the types.
- //
- // The cache is used by the type-without-property local inline cache. When setting a property on a type that doesn't
- // have the property, to determine whether to promote the object like an object of that type was last promoted, we need
- // to ensure that objects in the prototype chain have not acquired a readonly property or setter (ideally, only for that
- // property ID, but we just check for any such property). This cache is used to avoid doing this many times, especially
- // when the prototype chain is not short.
- //
- // This list is only used to invalidate the status of types. The type itself contains a boolean indicating whether it
- // and prototypes contain only writable data properties, which is reset upon invalidating the status.
- Field(JsUtil::List<Type *> *) typesEnsuredToHaveOnlyWritableDataPropertiesInItAndPrototypeChain;
- Field(uint64) randSeed0, randSeed1;
- Field(bool) isPRNGSeeded;
- Field(bool) inProfileMode;
- Field(bool) inDispatchProfileMode;
- Field(bool) arrayObjectHasUserDefinedSpecies;
- JavascriptFunction * AddFunctionToLibraryObjectWithPrototype(DynamicObject * object, PropertyId propertyId, FunctionInfo * functionInfo, int length, DynamicObject * prototype = nullptr, DynamicType * functionType = nullptr);
- JavascriptFunction * AddFunctionToLibraryObject(DynamicObject* object, PropertyId propertyId, FunctionInfo * functionInfo, int length, PropertyAttributes attributes = PropertyBuiltInMethodDefaults);
- JavascriptFunction * AddFunctionToLibraryObjectWithName(DynamicObject* object, PropertyId propertyId, PropertyId nameId, FunctionInfo * functionInfo, int length);
- RuntimeFunction* AddGetterToLibraryObject(DynamicObject* object, PropertyId propertyId, FunctionInfo* functionInfo);
- void AddAccessorsToLibraryObject(DynamicObject* object, PropertyId propertyId, FunctionInfo * getterFunctionInfo, FunctionInfo * setterFunctionInfo);
- void AddAccessorsToLibraryObject(DynamicObject* object, PropertyId propertyId, RecyclableObject * getterFunction, RecyclableObject * setterFunction);
- void AddAccessorsToLibraryObjectWithName(DynamicObject* object, PropertyId propertyId, PropertyId nameId, FunctionInfo * getterFunctionInfo, FunctionInfo * setterFunction);
- RuntimeFunction * CreateGetterFunction(PropertyId nameId, FunctionInfo* functionInfo);
- RuntimeFunction * CreateSetterFunction(PropertyId nameId, FunctionInfo* functionInfo);
- template <size_t N>
- JavascriptFunction * AddFunctionToLibraryObjectWithPropertyName(DynamicObject* object, const char16(&propertyName)[N], FunctionInfo * functionInfo, int length);
- static SimpleTypeHandler<1> SharedPrototypeTypeHandler;
- static SimpleTypeHandler<1> SharedFunctionWithoutPrototypeTypeHandler;
- static SimpleTypeHandler<1> SharedFunctionWithPrototypeTypeHandlerV11;
- static SimpleTypeHandler<2> SharedFunctionWithPrototypeTypeHandler;
- static SimpleTypeHandler<1> SharedFunctionWithLengthTypeHandler;
- static SimpleTypeHandler<2> SharedFunctionWithLengthAndNameTypeHandler;
- static SimpleTypeHandler<1> SharedIdMappedFunctionWithPrototypeTypeHandler;
- static SimpleTypeHandler<2> SharedNamespaceSymbolTypeHandler;
- static MissingPropertyTypeHandler MissingPropertyHolderTypeHandler;
- static SimplePropertyDescriptor const SharedFunctionPropertyDescriptors[2];
- static SimplePropertyDescriptor const HeapArgumentsPropertyDescriptors[3];
- static SimplePropertyDescriptor const FunctionWithLengthAndPrototypeTypeDescriptors[2];
- static SimplePropertyDescriptor const FunctionWithLengthAndNameTypeDescriptors[2];
- static SimplePropertyDescriptor const ModuleNamespaceTypeDescriptors[2];
- public:
- static const ObjectInfoBits EnumFunctionClass = EnumClass_1_Bit;
- static void InitializeProperties(ThreadContext * threadContext);
- JavascriptLibrary(GlobalObject* globalObject) :
- JavascriptLibraryBase(globalObject),
- inProfileMode(false),
- inDispatchProfileMode(false),
- propertyStringMap(nullptr),
- parseIntFunctionObject(nullptr),
- evalFunctionObject(nullptr),
- parseFloatFunctionObject(nullptr),
- arrayPrototypeToLocaleStringFunction(nullptr),
- arrayPrototypeToStringFunction(nullptr),
- identityFunction(nullptr),
- throwerFunction(nullptr),
- jsrtContextObject(nullptr),
- jsrtExternalTypesCache(nullptr),
- fakeGlobalFuncForUndefer(nullptr),
- externalLibraryList(nullptr),
- #if ENABLE_COPYONACCESS_ARRAY
- cacheForCopyOnAccessArraySegments(nullptr),
- #endif
- referencedPropertyRecords(nullptr),
- stringTemplateCallsiteObjectList(nullptr),
- moduleRecordList(nullptr),
- rootPath(nullptr),
- bindRefChunkBegin(nullptr),
- bindRefChunkCurrent(nullptr),
- bindRefChunkEnd(nullptr),
- dynamicFunctionReference(nullptr)
- {
- this->globalObject = globalObject;
- }
- void Initialize(ScriptContext* scriptContext, GlobalObject * globalObject);
- void Uninitialize();
- GlobalObject* GetGlobalObject() const { return globalObject; }
- ScriptContext* GetScriptContext() const { return scriptContext; }
- Recycler * GetRecycler() const { return recycler; }
- Var GetTrueOrFalse(BOOL value) { return value ? booleanTrue : booleanFalse; }
- JavascriptSymbol* GetSymbolMatch() { return symbolMatch; }
- JavascriptSymbol* GetSymbolReplace() { return symbolReplace; }
- JavascriptSymbol* GetSymbolSearch() { return symbolSearch; }
- JavascriptSymbol* GetSymbolSplit() { return symbolSplit; }
- JavascriptSymbol* GetSymbolSpecies() { return symbolSpecies; }
- JavascriptString* GetNullString() { return nullString; }
- JavascriptString* GetEmptyString() const;
- JavascriptString* GetWhackString() { return whackString; }
- JavascriptString* GetUndefinedDisplayString() { return undefinedDisplayString; }
- JavascriptString* GetNaNDisplayString() { return nanDisplayString; }
- JavascriptString* GetQuotesString() { return quotesString; }
- JavascriptString* GetNullDisplayString() { return nullDisplayString; }
- JavascriptString* GetUnknownDisplayString() { return unknownDisplayString; }
- JavascriptString* GetCommaDisplayString() { return commaDisplayString; }
- JavascriptString* GetCommaSpaceDisplayString() { return commaSpaceDisplayString; }
- JavascriptString* GetTrueDisplayString() { return trueDisplayString; }
- JavascriptString* GetFalseDisplayString() { return falseDisplayString; }
- JavascriptString* GetLengthDisplayString() { return lengthDisplayString; }
- JavascriptString* GetObjectDisplayString() { return objectDisplayString; }
- JavascriptString* GetStringTypeDisplayString() { return stringTypeDisplayString; }
- JavascriptString* GetErrorDisplayString() const { return errorDisplayString; }
- JavascriptString* GetFunctionPrefixString() { return functionPrefixString; }
- JavascriptString* GetGeneratorFunctionPrefixString() { return generatorFunctionPrefixString; }
- JavascriptString* GetAsyncFunctionPrefixString() { return asyncFunctionPrefixString; }
- JavascriptString* GetFunctionDisplayString() { return functionDisplayString; }
- JavascriptString* GetXDomainFunctionDisplayString() { return xDomainFunctionDisplayString; }
- JavascriptString* GetInvalidDateString() { return invalidDateString; }
- JavascriptString* GetObjectTypeDisplayString() const { return objectTypeDisplayString; }
- JavascriptString* GetFunctionTypeDisplayString() const { return functionTypeDisplayString; }
- JavascriptString* GetBooleanTypeDisplayString() const { return booleanTypeDisplayString; }
- JavascriptString* GetNumberTypeDisplayString() const { return numberTypeDisplayString; }
- JavascriptString* GetModuleTypeDisplayString() const { return moduleTypeDisplayString; }
- JavascriptString* GetVariantDateTypeDisplayString() const { return variantDateTypeDisplayString; }
- // SIMD_JS
- JavascriptString* GetSIMDFloat32x4DisplayString() const { return simdFloat32x4DisplayString; }
- JavascriptString* GetSIMDFloat64x2DisplayString() const { return simdFloat64x2DisplayString; }
- JavascriptString* GetSIMDInt32x4DisplayString() const { return simdInt32x4DisplayString; }
- JavascriptString* GetSIMDInt16x8DisplayString() const { return simdInt16x8DisplayString; }
- JavascriptString* GetSIMDInt8x16DisplayString() const { return simdInt8x16DisplayString; }
- JavascriptString* GetSIMDBool32x4DisplayString() const { return simdBool32x4DisplayString; }
- JavascriptString* GetSIMDBool16x8DisplayString() const { return simdBool16x8DisplayString; }
- JavascriptString* GetSIMDBool8x16DisplayString() const { return simdBool8x16DisplayString; }
- JavascriptString* GetSIMDUint32x4DisplayString() const { return simdUint32x4DisplayString; }
- JavascriptString* GetSIMDUint16x8DisplayString() const { return simdUint16x8DisplayString; }
- JavascriptString* GetSIMDUint8x16DisplayString() const { return simdUint8x16DisplayString; }
- JavascriptString* GetSymbolTypeDisplayString() const { return symbolTypeDisplayString; }
- JavascriptString* GetDebuggerDeadZoneBlockVariableString() { Assert(debuggerDeadZoneBlockVariableString); return debuggerDeadZoneBlockVariableString; }
- JavascriptRegExp* CreateEmptyRegExp();
- JavascriptFunction* GetEvalFunctionObject() { return evalFunctionObject; }
- JavascriptFunction* GetArrayPrototypeValuesFunction() { return EnsureArrayPrototypeValuesFunction(); }
- JavascriptFunction* GetArrayIteratorPrototypeBuiltinNextFunction() { return arrayIteratorPrototypeBuiltinNextFunction; }
- DynamicObject* GetReflectObject() const { return reflectObject; }
- const PropertyDescriptor* GetDefaultPropertyDescriptor() const { return &defaultPropertyDescriptor; }
- DynamicObject* GetMissingPropertyHolder() const { return missingPropertyHolder; }
- JavascriptFunction* GetSharedArrayBufferConstructor() { return sharedArrayBufferConstructor; }
- DynamicObject* GetAtomicsObject() { return atomicsObject; }
- DynamicObject* GetWebAssemblyCompileErrorPrototype() const { return webAssemblyCompileErrorPrototype; }
- DynamicObject* GetWebAssemblyCompileErrorConstructor() const { return webAssemblyCompileErrorConstructor; }
- DynamicObject* GetWebAssemblyRuntimeErrorPrototype() const { return webAssemblyRuntimeErrorPrototype; }
- DynamicObject* GetWebAssemblyRuntimeErrorConstructor() const { return webAssemblyRuntimeErrorConstructor; }
- DynamicObject* GetWebAssemblyLinkErrorPrototype() const { return webAssemblyLinkErrorPrototype; }
- DynamicObject* GetWebAssemblyLinkErrorConstructor() const { return webAssemblyLinkErrorConstructor; }
- #if ENABLE_TTD
- Js::PropertyId ExtractPrimitveSymbolId_TTD(Var value);
- Js::RecyclableObject* CreatePrimitveSymbol_TTD(Js::PropertyId pid);
- Js::RecyclableObject* CreatePrimitveSymbol_TTD(Js::JavascriptString* str);
- Js::RecyclableObject* CreateDefaultBoxedObject_TTD(Js::TypeId kind);
- void SetBoxedObjectValue_TTD(Js::RecyclableObject* obj, Js::Var value);
- Js::RecyclableObject* CreateDate_TTD(double value);
- Js::RecyclableObject* CreateRegex_TTD(const char16* patternSource, uint32 patternLength, UnifiedRegex::RegexFlags flags, CharCount lastIndex, Js::Var lastVar);
- Js::RecyclableObject* CreateError_TTD();
- Js::RecyclableObject* CreateES5Array_TTD();
- static void SetLengthWritableES5Array_TTD(Js::RecyclableObject* es5Array, bool isLengthWritable);
- Js::RecyclableObject* CreateSet_TTD();
- Js::RecyclableObject* CreateWeakSet_TTD();
- static void AddSetElementInflate_TTD(Js::JavascriptSet* set, Var value);
- static void AddWeakSetElementInflate_TTD(Js::JavascriptWeakSet* set, Var value);
- Js::RecyclableObject* CreateMap_TTD();
- Js::RecyclableObject* CreateWeakMap_TTD();
- static void AddMapElementInflate_TTD(Js::JavascriptMap* map, Var key, Var value);
- static void AddWeakMapElementInflate_TTD(Js::JavascriptWeakMap* map, Var key, Var value);
- Js::RecyclableObject* CreateExternalFunction_TTD(Js::Var fname);
- Js::RecyclableObject* CreateBoundFunction_TTD(RecyclableObject* function, Var bThis, uint32 ct, Var* args);
- Js::RecyclableObject* CreateProxy_TTD(RecyclableObject* handler, RecyclableObject* target);
- Js::RecyclableObject* CreateRevokeFunction_TTD(RecyclableObject* proxy);
- Js::RecyclableObject* CreateHeapArguments_TTD(uint32 numOfArguments, uint32 formalCount, ActivationObject* frameObject, byte* deletedArray);
- Js::RecyclableObject* CreateES5HeapArguments_TTD(uint32 numOfArguments, uint32 formalCount, ActivationObject* frameObject, byte* deletedArray);
- Js::JavascriptPromiseCapability* CreatePromiseCapability_TTD(Var promise, Var resolve, Var reject);
- Js::JavascriptPromiseReaction* CreatePromiseReaction_TTD(RecyclableObject* handler, JavascriptPromiseCapability* capabilities);
- Js::RecyclableObject* CreatePromise_TTD(uint32 status, Var result, JsUtil::List<Js::JavascriptPromiseReaction*, HeapAllocator>& resolveReactions, JsUtil::List<Js::JavascriptPromiseReaction*, HeapAllocator>& rejectReactions);
- JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* CreateAlreadyDefinedWrapper_TTD(bool alreadyDefined);
- Js::RecyclableObject* CreatePromiseResolveOrRejectFunction_TTD(RecyclableObject* promise, bool isReject, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyResolved);
- Js::RecyclableObject* CreatePromiseReactionTaskFunction_TTD(JavascriptPromiseReaction* reaction, Var argument);
- Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* CreateRemainingElementsWrapper_TTD(Js::ScriptContext* ctx, uint32 value);
- Js::RecyclableObject* CreatePromiseAllResolveElementFunction_TTD(Js::JavascriptPromiseCapability* capabilities, uint32 index, Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* wrapper, Js::RecyclableObject* values, bool alreadyCalled);
- #endif
- #ifdef ENABLE_INTL_OBJECT
- void ResetIntlObject();
- void EnsureIntlObjectReady();
- template <class Fn>
- void InitializeIntlForPrototypes(Fn fn);
- void InitializeIntlForStringPrototype();
- void InitializeIntlForDatePrototype();
- void InitializeIntlForNumberPrototype();
- #endif
- #ifdef ENABLE_DEBUG_CONFIG_OPTIONS
- DynamicType * GetDebugDisposableObjectType() { return debugDisposableObjectType; }
- DynamicType * GetDebugFuncExecutorInDisposeObjectType() { return debugFuncExecutorInDisposeObjectType; }
- #endif
- DynamicType* GetErrorType(ErrorTypeEnum typeToCreate) const;
- StaticType * GetBooleanTypeStatic() const { return booleanTypeStatic; }
- DynamicType * GetBooleanTypeDynamic() const { return booleanTypeDynamic; }
- DynamicType * GetDateType() const { return dateType; }
- DynamicType * GetBoundFunctionType() const { return boundFunctionType; }
- DynamicType * GetRegExpConstructorType() const { return regexConstructorType; }
- StaticType * GetEnumeratorType() const { return enumeratorType; }
- DynamicType * GetSpreadArgumentType() const { return SpreadArgumentType; }
- StaticType * GetWithType() const { return withType; }
- DynamicType * GetErrorType() const { return errorType; }
- DynamicType * GetEvalErrorType() const { return evalErrorType; }
- DynamicType * GetRangeErrorType() const { return rangeErrorType; }
- DynamicType * GetReferenceErrorType() const { return referenceErrorType; }
- DynamicType * GetSyntaxErrorType() const { return syntaxErrorType; }
- DynamicType * GetTypeErrorType() const { return typeErrorType; }
- DynamicType * GetURIErrorType() const { return uriErrorType; }
- DynamicType * GetWebAssemblyCompileErrorType() const { return webAssemblyCompileErrorType; }
- DynamicType * GetWebAssemblyRuntimeErrorType() const { return webAssemblyRuntimeErrorType; }
- DynamicType * GetWebAssemblyLinkErrorType() const { return webAssemblyLinkErrorType; }
- StaticType * GetNumberTypeStatic() const { return numberTypeStatic; }
- StaticType * GetInt64TypeStatic() const { return int64NumberTypeStatic; }
- StaticType * GetUInt64TypeStatic() const { return uint64NumberTypeStatic; }
- DynamicType * GetNumberTypeDynamic() const { return numberTypeDynamic; }
- DynamicType * GetPromiseType() const { return promiseType; }
- DynamicType * GetWebAssemblyModuleType() const { return webAssemblyModuleType; }
- DynamicType * GetWebAssemblyInstanceType() const { return webAssemblyInstanceType; }
- DynamicType * GetWebAssemblyMemoryType() const { return webAssemblyMemoryType; }
- DynamicType * GetWebAssemblyTableType() const { return webAssemblyTableType; }
- // SIMD_JS
- DynamicType * GetSIMDBool8x16TypeDynamic() const { return simdBool8x16TypeDynamic; }
- DynamicType * GetSIMDBool16x8TypeDynamic() const { return simdBool16x8TypeDynamic; }
- DynamicType * GetSIMDBool32x4TypeDynamic() const { return simdBool32x4TypeDynamic; }
- DynamicType * GetSIMDInt8x16TypeDynamic() const { return simdInt8x16TypeDynamic; }
- DynamicType * GetSIMDInt16x8TypeDynamic() const { return simdInt16x8TypeDynamic; }
- DynamicType * GetSIMDInt32x4TypeDynamic() const { return simdInt32x4TypeDynamic; }
- DynamicType * GetSIMDUint8x16TypeDynamic() const { return simdUint8x16TypeDynamic; }
- DynamicType * GetSIMDUint16x8TypeDynamic() const { return simdUint16x8TypeDynamic; }
- DynamicType * GetSIMDUint32x4TypeDynamic() const { return simdUint32x4TypeDynamic; }
- DynamicType * GetSIMDFloat32x4TypeDynamic() const { return simdFloat32x4TypeDynamic; }
- StaticType* GetSIMDFloat32x4TypeStatic() const { return simdFloat32x4TypeStatic; }
- StaticType* GetSIMDFloat64x2TypeStatic() const { return simdFloat64x2TypeStatic; }
- StaticType* GetSIMDInt32x4TypeStatic() const { return simdInt32x4TypeStatic; }
- StaticType* GetSIMDInt16x8TypeStatic() const { return simdInt16x8TypeStatic; }
- StaticType* GetSIMDInt8x16TypeStatic() const { return simdInt8x16TypeStatic; }
- StaticType* GetSIMDBool32x4TypeStatic() const { return simdBool32x4TypeStatic; }
- StaticType* GetSIMDBool16x8TypeStatic() const { return simdBool16x8TypeStatic; }
- StaticType* GetSIMDBool8x16TypeStatic() const { return simdBool8x16TypeStatic; }
- StaticType* GetSIMDUInt32x4TypeStatic() const { return simdUint32x4TypeStatic; }
- StaticType* GetSIMDUint16x8TypeStatic() const { return simdUint16x8TypeStatic; }
- StaticType* GetSIMDUint8x16TypeStatic() const { return simdUint8x16TypeStatic; }
- DynamicType * GetObjectLiteralType(uint16 requestedInlineSlotCapacity);
- DynamicType * GetObjectHeaderInlinedLiteralType(uint16 requestedInlineSlotCapacity);
- DynamicType * GetObjectType() const { return objectTypes[0]; }
- DynamicType * GetObjectHeaderInlinedType() const { return objectHeaderInlinedTypes[0]; }
- StaticType * GetSymbolTypeStatic() const { return symbolTypeStatic; }
- DynamicType * GetSymbolTypeDynamic() const { return symbolTypeDynamic; }
- DynamicType * GetProxyType() const { return proxyType; }
- DynamicType * GetHeapArgumentsObjectType() const { return heapArgumentsType; }
- DynamicType * GetActivationObjectType() const { return activationObjectType; }
- DynamicType * GetModuleNamespaceType() const { return moduleNamespaceType; }
- DynamicType * GetArrayType() const { return arrayType; }
- DynamicType * GetNativeIntArrayType() const { return nativeIntArrayType; }
- #if ENABLE_COPYONACCESS_ARRAY
- DynamicType * GetCopyOnAccessNativeIntArrayType() const { return copyOnAccessNativeIntArrayType; }
- #endif
- DynamicType * GetNativeFloatArrayType() const { return nativeFloatArrayType; }
- DynamicType * GetRegexPrototypeType() const { return regexPrototypeType; }
- DynamicType * GetRegexType() const { return regexType; }
- DynamicType * GetRegexResultType() const { return regexResultType; }
- DynamicType * GetArrayBufferType() const { return arrayBufferType; }
- StaticType * GetStringTypeStatic() const { AssertMsg(stringTypeStatic, "Where's stringTypeStatic?"); return stringTypeStatic; }
- DynamicType * GetStringTypeDynamic() const { return stringTypeDynamic; }
- StaticType * GetVariantDateType() const { return variantDateType; }
- void EnsureDebugObject(DynamicObject* newDebugObject);
- DynamicObject* GetDebugObject() const { Assert(debugObject != nullptr); return debugObject; }
- DynamicType * GetMapType() const { return mapType; }
- DynamicType * GetSetType() const { return setType; }
- DynamicType * GetWeakMapType() const { return weakMapType; }
- DynamicType * GetWeakSetType() const { return weakSetType; }
- DynamicType * GetArrayIteratorType() const { return arrayIteratorType; }
- DynamicType * GetMapIteratorType() const { return mapIteratorType; }
- DynamicType * GetSetIteratorType() const { return setIteratorType; }
- DynamicType * GetStringIteratorType() const { return stringIteratorType; }
- DynamicType * GetListIteratorType() const { return listIteratorType; }
- JavascriptFunction* GetDefaultAccessorFunction() const { return defaultAccessorFunction; }
- JavascriptFunction* GetStackTraceAccessorFunction() const { return stackTraceAccessorFunction; }
- JavascriptFunction* GetThrowTypeErrorRestrictedPropertyAccessorFunction() const { return throwTypeErrorRestrictedPropertyAccessorFunction; }
- JavascriptFunction* Get__proto__getterFunction() const { return __proto__getterFunction; }
- JavascriptFunction* Get__proto__setterFunction() const { return __proto__setterFunction; }
- JavascriptFunction* GetObjectValueOfFunction() const { return objectValueOfFunction; }
- JavascriptFunction* GetObjectToStringFunction() const { return objectToStringFunction; }
- // SIMD_JS
- JavascriptFunction* GetSIMDFloat32x4ToStringFunction() const { return simdFloat32x4ToStringFunction; }
- JavascriptFunction* GetSIMDFloat64x2ToStringFunction() const { return simdFloat64x2ToStringFunction; }
- JavascriptFunction* GetSIMDInt32x4ToStringFunction() const { return simdInt32x4ToStringFunction; }
- JavascriptFunction* GetSIMDInt16x8ToStringFunction() const { return simdInt16x8ToStringFunction; }
- JavascriptFunction* GetSIMDInt8x16ToStringFunction() const { return simdInt8x16ToStringFunction; }
- JavascriptFunction* GetSIMDBool32x4ToStringFunction() const { return simdBool32x4ToStringFunction; }
- JavascriptFunction* GetSIMDBool16x8ToStringFunction() const { return simdBool16x8ToStringFunction; }
- JavascriptFunction* GetSIMDBool8x16ToStringFunction() const { return simdBool8x16ToStringFunction; }
- JavascriptFunction* GetSIMDUint32x4ToStringFunction() const { return simdUint32x4ToStringFunction; }
- JavascriptFunction* GetSIMDUint16x8ToStringFunction() const { return simdUint16x8ToStringFunction; }
- JavascriptFunction* GetSIMDUint8x16ToStringFunction() const { return simdUint8x16ToStringFunction; }
- JavascriptFunction* GetDebugObjectNonUserGetterFunction() const { return debugObjectNonUserGetterFunction; }
- JavascriptFunction* GetDebugObjectNonUserSetterFunction() const { return debugObjectNonUserSetterFunction; }
- UnifiedRegex::RegexPattern * GetEmptyRegexPattern() const { return emptyRegexPattern; }
- JavascriptFunction* GetRegexExecFunction() const { return regexExecFunction; }
- JavascriptFunction* GetRegexFlagsGetterFunction() const { return regexFlagsGetterFunction; }
- JavascriptFunction* GetRegexGlobalGetterFunction() const { return regexGlobalGetterFunction; }
- JavascriptFunction* GetRegexStickyGetterFunction() const { return regexStickyGetterFunction; }
- JavascriptFunction* GetRegexUnicodeGetterFunction() const { return regexUnicodeGetterFunction; }
- int GetRegexConstructorSlotIndex() const { return regexConstructorSlotIndex; }
- int GetRegexExecSlotIndex() const { return regexExecSlotIndex; }
- int GetRegexFlagsGetterSlotIndex() const { return regexFlagsGetterSlotIndex; }
- int GetRegexGlobalGetterSlotIndex() const { return regexGlobalGetterSlotIndex; }
- int GetRegexStickyGetterSlotIndex() const { return regexStickyGetterSlotIndex; }
- int GetRegexUnicodeGetterSlotIndex() const { return regexUnicodeGetterSlotIndex; }
- TypePath* GetRootPath() const { return rootPath; }
- void BindReference(void * addr);
- void CleanupForClose();
- void BeginDynamicFunctionReferences();
- void EndDynamicFunctionReferences();
- void RegisterDynamicFunctionReference(FunctionProxy* func);
- void SetDebugObjectNonUserAccessor(FunctionInfo *funcGetter, FunctionInfo *funcSetter);
- JavascriptFunction* GetDebugObjectDebugModeGetterFunction() const { return debugObjectDebugModeGetterFunction; }
- void SetDebugObjectDebugModeAccessor(FunctionInfo *funcGetter);
- #ifdef ENABLE_DEBUG_CONFIG_OPTIONS
- JavascriptFunction* GetDebugObjectFaultInjectionCookieGetterFunction() const { return debugObjectFaultInjectionCookieGetterFunction; }
- JavascriptFunction* GetDebugObjectFaultInjectionCookieSetterFunction() const { return debugObjectFaultInjectionCookieSetterFunction; }
- void SetDebugObjectFaultInjectionCookieGetterAccessor(FunctionInfo *funcGetter, FunctionInfo *funcSetter);
- #endif
- JavascriptFunction* GetArrayPrototypeToStringFunction() const { return arrayPrototypeToStringFunction; }
- JavascriptFunction* GetArrayPrototypeToLocaleStringFunction() const { return arrayPrototypeToLocaleStringFunction; }
- JavascriptFunction* GetIdentityFunction() const { return identityFunction; }
- JavascriptFunction* GetThrowerFunction() const { return throwerFunction; }
- void SetNativeHostPromiseContinuationFunction(PromiseContinuationCallback function, void *state);
- void SetJsrtContext(FinalizableObject* jsrtContext);
- FinalizableObject* GetJsrtContext();
- void EnqueueTask(Var taskVar);
- HeapArgumentsObject* CreateHeapArguments(Var frameObj, uint formalCount, bool isStrictMode = false);
- JavascriptArray* CreateArray();
- JavascriptArray* CreateArray(uint32 length);
- JavascriptArray *CreateArrayOnStack(void *const stackAllocationPointer);
- JavascriptNativeIntArray* CreateNativeIntArray();
- JavascriptNativeIntArray* CreateNativeIntArray(uint32 length);
- #if ENABLE_COPYONACCESS_ARRAY
- JavascriptCopyOnAccessNativeIntArray* CreateCopyOnAccessNativeIntArray();
- JavascriptCopyOnAccessNativeIntArray* CreateCopyOnAccessNativeIntArray(uint32 length);
- #endif
- JavascriptNativeFloatArray* CreateNativeFloatArray();
- JavascriptNativeFloatArray* CreateNativeFloatArray(uint32 length);
- JavascriptArray* CreateArray(uint32 length, uint32 size);
- ArrayBuffer* CreateArrayBuffer(uint32 length);
- ArrayBuffer* CreateArrayBuffer(byte* buffer, uint32 length);
- ArrayBuffer* CreateWebAssemblyArrayBuffer(uint32 length);
- ArrayBuffer* CreateWebAssemblyArrayBuffer(byte* buffer, uint32 length);
- SharedArrayBuffer* CreateSharedArrayBuffer(uint32 length);
- SharedArrayBuffer* CreateSharedArrayBuffer(SharedContents *contents);
- ArrayBuffer* CreateProjectionArraybuffer(uint32 length);
- ArrayBuffer* CreateProjectionArraybuffer(byte* buffer, uint32 length);
- DataView* CreateDataView(ArrayBufferBase* arrayBuffer, uint32 offSet, uint32 mappedLength);
- template <typename TypeName, bool clamped>
- inline DynamicType* GetTypedArrayType(TypeName);
- template<> inline DynamicType* GetTypedArrayType<int8,false>(int8) { return int8ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<uint8,false>(uint8) { return uint8ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<uint8,true>(uint8) { return uint8ClampedArrayType; };
- template<> inline DynamicType* GetTypedArrayType<int16,false>(int16) { return int16ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<uint16,false>(uint16) { return uint16ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<int32,false>(int32) { return int32ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<uint32,false>(uint32) { return uint32ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<float,false>(float) { return float32ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<double,false>(double) { return float64ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<int64,false>(int64) { return int64ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<uint64,false>(uint64) { return uint64ArrayType; };
- template<> inline DynamicType* GetTypedArrayType<bool,false>(bool) { return boolArrayType; };
- DynamicType* GetCharArrayType() { return charArrayType; };
- //
- // This method would be used for creating array literals, when we really need to create a huge array
- // Avoids checks at runtime.
- //
- JavascriptArray* CreateArrayLiteral(uint32 length);
- JavascriptNativeIntArray* CreateNativeIntArrayLiteral(uint32 length);
- #if ENABLE_PROFILE_INFO
- JavascriptNativeIntArray* CreateCopyOnAccessNativeIntArrayLiteral(ArrayCallSiteInfo *arrayInfo, FunctionBody *functionBody, const Js::AuxArray<int32> *ints);
- #endif
- JavascriptNativeFloatArray* CreateNativeFloatArrayLiteral(uint32 length);
- JavascriptBoolean* CreateBoolean(BOOL value);
- JavascriptDate* CreateDate();
- JavascriptDate* CreateDate(double value);
- JavascriptDate* CreateDate(SYSTEMTIME* pst);
- JavascriptMap* CreateMap();
- JavascriptSet* CreateSet();
- JavascriptWeakMap* CreateWeakMap();
- JavascriptWeakSet* CreateWeakSet();
- JavascriptError* CreateError();
- JavascriptError* CreateError(DynamicType* errorType, BOOL isExternal = FALSE);
- JavascriptError* CreateExternalError(ErrorTypeEnum errorTypeEnum);
- JavascriptError* CreateEvalError();
- JavascriptError* CreateRangeError();
- JavascriptError* CreateReferenceError();
- JavascriptError* CreateSyntaxError();
- JavascriptError* CreateTypeError();
- JavascriptError* CreateURIError();
- JavascriptError* CreateStackOverflowError();
- JavascriptError* CreateOutOfMemoryError();
- JavascriptError* CreateWebAssemblyCompileError();
- JavascriptError* CreateWebAssemblyRuntimeError();
- JavascriptError* CreateWebAssemblyLinkError();
- JavascriptSymbol* CreateSymbol(JavascriptString* description);
- JavascriptSymbol* CreateSymbol(const char16* description, int descriptionLength);
- JavascriptSymbol* CreateSymbol(const PropertyRecord* propertyRecord);
- JavascriptPromise* CreatePromise();
- JavascriptGenerator* CreateGenerator(Arguments& args, ScriptFunction* scriptFunction, RecyclableObject* prototype);
- JavascriptFunction* CreateNonProfiledFunction(FunctionInfo * functionInfo);
- template <class MethodType>
- JavascriptExternalFunction* CreateIdMappedExternalFunction(MethodType entryPoint, DynamicType *pPrototypeType);
- JavascriptExternalFunction* CreateExternalConstructor(Js::ExternalMethod entryPoint, PropertyId nameId, RecyclableObject * prototype);
- JavascriptExternalFunction* CreateExternalConstructor(Js::ExternalMethod entryPoint, PropertyId nameId, InitializeMethod method, unsigned short deferredTypeSlots, bool hasAccessors);
- DynamicType* GetCachedJsrtExternalType(uintptr_t finalizeCallback);
- void CacheJsrtExternalType(uintptr_t finalizeCallback, DynamicType* dynamicType);
- static DynamicTypeHandler * GetDeferredPrototypeGeneratorFunctionTypeHandler(ScriptContext* scriptContext);
- static DynamicTypeHandler * GetDeferredPrototypeAsyncFunctionTypeHandler(ScriptContext* scriptContext);
- DynamicType * CreateDeferredPrototypeGeneratorFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared = false);
- DynamicType * CreateDeferredPrototypeAsyncFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared = false);
- static DynamicTypeHandler * GetDeferredPrototypeFunctionTypeHandler(ScriptContext* scriptContext);
- static DynamicTypeHandler * GetDeferredAnonymousPrototypeFunctionTypeHandler();
- static DynamicTypeHandler * GetDeferredAnonymousPrototypeGeneratorFunctionTypeHandler();
- static DynamicTypeHandler * GetDeferredAnonymousPrototypeAsyncFunctionTypeHandler();
- DynamicTypeHandler * GetDeferredFunctionTypeHandler();
- DynamicTypeHandler * ScriptFunctionTypeHandler(bool noPrototypeProperty, bool isAnonymousFunction);
- DynamicTypeHandler * GetDeferredAnonymousFunctionTypeHandler();
- template<bool isNameAvailable, bool isPrototypeAvailable = true>
- static DynamicTypeHandler * GetDeferredFunctionTypeHandlerBase();
- template<bool isNameAvailable, bool isPrototypeAvailable = true>
- static DynamicTypeHandler * GetDeferredGeneratorFunctionTypeHandlerBase();
- template<bool isNameAvailable>
- static DynamicTypeHandler * GetDeferredAsyncFunctionTypeHandlerBase();
- DynamicType * CreateDeferredPrototypeFunctionType(JavascriptMethod entrypoint);
- DynamicType * CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared = false);
- DynamicType * CreateFunctionType(JavascriptMethod entrypoint, RecyclableObject* prototype = nullptr);
- DynamicType * CreateFunctionWithLengthType(FunctionInfo * functionInfo);
- DynamicType * CreateFunctionWithLengthAndNameType(FunctionInfo * functionInfo);
- DynamicType * CreateFunctionWithLengthAndPrototypeType(FunctionInfo * functionInfo);
- DynamicType * CreateFunctionWithLengthType(DynamicObject * prototype, FunctionInfo * functionInfo);
- DynamicType * CreateFunctionWithLengthAndNameType(DynamicObject * prototype, FunctionInfo * functionInfo);
- DynamicType * CreateFunctionWithLengthAndPrototypeType(DynamicObject * prototype, FunctionInfo * functionInfo);
- ScriptFunction * CreateScriptFunction(FunctionProxy* proxy);
- AsmJsScriptFunction * CreateAsmJsScriptFunction(FunctionProxy* proxy);
- ScriptFunctionWithInlineCache * CreateScriptFunctionWithInlineCache(FunctionProxy* proxy);
- GeneratorVirtualScriptFunction * CreateGeneratorVirtualScriptFunction(FunctionProxy* proxy);
- DynamicType * CreateGeneratorType(RecyclableObject* prototype);
- #if 0
- JavascriptNumber* CreateNumber(double value);
- #endif
- JavascriptNumber* CreateNumber(double value, RecyclerJavascriptNumberAllocator * numberAllocator);
- JavascriptGeneratorFunction* CreateGeneratorFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction);
- JavascriptAsyncFunction* CreateAsyncFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction);
- JavascriptExternalFunction* CreateExternalFunction(ExternalMethod entryPointer, PropertyId nameId, Var signature, JavascriptTypeId prototypeTypeId, UINT64 flags);
- JavascriptExternalFunction* CreateExternalFunction(ExternalMethod entryPointer, Var nameId, Var signature, JavascriptTypeId prototypeTypeId, UINT64 flags);
- JavascriptExternalFunction* CreateStdCallExternalFunction(StdCallJavascriptMethod entryPointer, PropertyId nameId, void *callbackState);
- JavascriptExternalFunction* CreateStdCallExternalFunction(StdCallJavascriptMethod entryPointer, Var nameId, void *callbackState);
- JavascriptPromiseAsyncSpawnExecutorFunction* CreatePromiseAsyncSpawnExecutorFunction(JavascriptMethod entryPoint, JavascriptGenerator* generator, Var target);
- JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* CreatePromiseAsyncSpawnStepArgumentExecutorFunction(JavascriptMethod entryPoint, JavascriptGenerator* generator, Var argument, Var resolve = nullptr, Var reject = nullptr, bool isReject = false);
- JavascriptPromiseCapabilitiesExecutorFunction* CreatePromiseCapabilitiesExecutorFunction(JavascriptMethod entryPoint, JavascriptPromiseCapability* capability);
- JavascriptPromiseResolveOrRejectFunction* CreatePromiseResolveOrRejectFunction(JavascriptMethod entryPoint, JavascriptPromise* promise, bool isReject, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyResolvedRecord);
- JavascriptPromiseReactionTaskFunction* CreatePromiseReactionTaskFunction(JavascriptMethod entryPoint, JavascriptPromiseReaction* reaction, Var argument);
- JavascriptPromiseResolveThenableTaskFunction* CreatePromiseResolveThenableTaskFunction(JavascriptMethod entryPoint, JavascriptPromise* promise, RecyclableObject* thenable, RecyclableObject* thenFunction);
- JavascriptPromiseAllResolveElementFunction* CreatePromiseAllResolveElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements);
- JavascriptExternalFunction* CreateWrappedExternalFunction(JavascriptExternalFunction* wrappedFunction);
- #if ENABLE_NATIVE_CODEGEN
- #if !FLOATVAR
- JavascriptNumber* CreateCodeGenNumber(CodeGenNumberAllocator *alloc, double value);
- #endif
- #endif
- DynamicObject* CreateGeneratorConstructorPrototypeObject();
- DynamicObject* CreateConstructorPrototypeObject(JavascriptFunction * constructor);
- DynamicObject* CreateObject(const bool allowObjectHeaderInlining = false, const PropertyIndex requestedInlineSlotCapacity = 0);
- DynamicObject* CreateObject(DynamicTypeHandler * typeHandler);
- DynamicObject* CreateActivationObject();
- DynamicObject* CreatePseudoActivationObject();
- DynamicObject* CreateBlockActivationObject();
- DynamicObject* CreateConsoleScopeActivationObject();
- DynamicType* CreateObjectType(RecyclableObject* prototype, Js::TypeId typeId, uint16 requestedInlineSlotCapacity);
- DynamicType* CreateObjectTypeNoCache(RecyclableObject* prototype, Js::TypeId typeId);
- DynamicType* CreateObjectType(RecyclableObject* prototype, uint16 requestedInlineSlotCapacity);
- DynamicObject* CreateObject(RecyclableObject* prototype, uint16 requestedInlineSlotCapacity = 0);
- typedef JavascriptString* LibStringType; // used by diagnostics template
- template< size_t N > JavascriptString* CreateStringFromCppLiteral(const char16 (&value)[N]) const;
- template<> JavascriptString* CreateStringFromCppLiteral(const char16 (&value)[1]) const; // Specialization for empty string
- template<> JavascriptString* CreateStringFromCppLiteral(const char16 (&value)[2]) const; // Specialization for single-char strings
- PropertyString* CreatePropertyString(const Js::PropertyRecord* propertyRecord);
- PropertyString* CreatePropertyString(const Js::PropertyRecord* propertyRecord, ArenaAllocator *arena);
- JavascriptVariantDate* CreateVariantDate(const double value);
- JavascriptBooleanObject* CreateBooleanObject(BOOL value);
- JavascriptBooleanObject* CreateBooleanObject();
- JavascriptNumberObject* CreateNumberObjectWithCheck(double value);
- JavascriptNumberObject* CreateNumberObject(Var number);
- JavascriptSIMDObject* CreateSIMDObject(Var simdValue, TypeId typeDescriptor);
- JavascriptStringObject* CreateStringObject(JavascriptString* value);
- JavascriptStringObject* CreateStringObject(const char16* value, charcount_t length);
- JavascriptSymbolObject* CreateSymbolObject(JavascriptSymbol* value);
- JavascriptArrayIterator* CreateArrayIterator(Var iterable, JavascriptArrayIteratorKind kind);
- JavascriptMapIterator* CreateMapIterator(JavascriptMap* map, JavascriptMapIteratorKind kind);
- JavascriptSetIterator* CreateSetIterator(JavascriptSet* set, JavascriptSetIteratorKind kind);
- JavascriptStringIterator* CreateStringIterator(JavascriptString* string);
- JavascriptListIterator* CreateListIterator(ListForListIterator* list);
- JavascriptRegExp* CreateRegExp(UnifiedRegex::RegexPattern* pattern);
- DynamicObject* CreateIteratorResultObject(Var value, Var done);
- DynamicObject* CreateIteratorResultObjectValueFalse(Var value);
- DynamicObject* CreateIteratorResultObjectUndefinedTrue();
- RecyclableObject* CreateThrowErrorObject(JavascriptError* error);
- JavascriptFunction* EnsurePromiseResolveFunction();
- JavascriptFunction* EnsurePromiseThenFunction();
- JavascriptFunction* EnsureGeneratorNextFunction();
- JavascriptFunction* EnsureGeneratorThrowFunction();
- JavascriptFunction* EnsureJSONStringifyFunction();
- JavascriptFunction* EnsureObjectFreezeFunction();
- void SetCrossSiteForSharedFunctionType(JavascriptFunction * function);
- bool IsPRNGSeeded() { return isPRNGSeeded; }
- uint64 GetRandSeed0() { return randSeed0; }
- uint64 GetRandSeed1() { return randSeed1; }
- void SetIsPRNGSeeded(bool val);
- void SetRandSeed0(uint64 rs) { randSeed0 = rs;}
- void SetRandSeed1(uint64 rs) { randSeed1 = rs; }
- void SetProfileMode(bool fSet);
- void SetDispatchProfile(bool fSet, JavascriptMethod dispatchInvoke);
- HRESULT ProfilerRegisterBuiltIns();
- #if ENABLE_COPYONACCESS_ARRAY
- static bool IsCopyOnAccessArrayCallSite(JavascriptLibrary *lib, ArrayCallSiteInfo *arrayInfo, uint32 length);
- static bool IsCachedCopyOnAccessArrayCallSite(const JavascriptLibrary *lib, ArrayCallSiteInfo *arrayInfo);
- template <typename T>
- static void CheckAndConvertCopyOnAccessNativeIntArray(const T instance);
- #endif
- void EnsureStringTemplateCallsiteObjectList();
- void AddStringTemplateCallsiteObject(RecyclableObject* callsite);
- RecyclableObject* TryGetStringTemplateCallsiteObject(ParseNodePtr pnode);
- RecyclableObject* TryGetStringTemplateCallsiteObject(RecyclableObject* callsite);
- static void CheckAndInvalidateIsConcatSpreadableCache(PropertyId propertyId, ScriptContext *scriptContext);
- #if DBG_DUMP
- static const char16* GetStringTemplateCallsiteObjectKey(Var callsite);
- #endif
- Field(JavascriptFunction*)* GetBuiltinFunctions();
- INT_PTR* GetVTableAddresses();
- static BuiltinFunction GetBuiltinFunctionForPropId(PropertyId id);
- static BuiltinFunction GetBuiltInForFuncInfo(intptr_t funcInfoAddr, ThreadContextInfo *context);
- #if DBG
- static void CheckRegisteredBuiltIns(Field(JavascriptFunction*)* builtInFuncs, ScriptContext *scriptContext);
- #endif
- static BOOL CanFloatPreferenceFunc(BuiltinFunction index);
- static BOOL IsFltFunc(BuiltinFunction index);
- static bool IsFloatFunctionCallsite(BuiltinFunction index, size_t argc);
- static bool IsFltBuiltInConst(PropertyId id);
- static size_t GetArgCForBuiltIn(BuiltinFunction index)
- {
- Assert(index < _countof(JavascriptLibrary::LibraryFunctionArgC));
- return JavascriptLibrary::LibraryFunctionArgC[index];
- }
- static BuiltInFlags GetFlagsForBuiltIn(BuiltinFunction index)
- {
- Assert(index < _countof(JavascriptLibrary::LibraryFunctionFlags));
- return (BuiltInFlags)JavascriptLibrary::LibraryFunctionFlags[index];
- }
- static BuiltinFunction GetBuiltInInlineCandidateId(Js::OpCode opCode);
- static BuiltInArgSpecializationType GetBuiltInArgType(BuiltInFlags flags, BuiltInArgShift argGroup);
- static bool IsTypeSpecRequired(BuiltInFlags flags)
- {
- return GetBuiltInArgType(flags, BuiltInArgShift::BIAS_Src1) || GetBuiltInArgType(flags, BuiltInArgShift::BIAS_Src2) || GetBuiltInArgType(flags, BuiltInArgShift::BIAS_Dst);
- }
- #if ENABLE_DEBUG_CONFIG_OPTIONS
- static char16 const * GetNameForBuiltIn(BuiltinFunction index)
- {
- Assert(index < _countof(JavascriptLibrary::LibraryFunctionName));
- return JavascriptLibrary::LibraryFunctionName[index];
- }
- #endif
- PropertyStringCacheMap* EnsurePropertyStringMap();
- PropertyStringCacheMap* GetPropertyStringMap() { return this->propertyStringMap; }
- void TypeAndPrototypesAreEnsuredToHaveOnlyWritableDataProperties(Type *const type);
- void NoPrototypeChainsAreEnsuredToHaveOnlyWritableDataProperties();
- static bool ArrayIteratorPrototypeHasUserDefinedNext(ScriptContext *scriptContext);
- CharStringCache& GetCharStringCache() { return charStringCache; }
- static JavascriptLibrary * FromCharStringCache(CharStringCache * cache)
- {
- return (JavascriptLibrary *)((uintptr_t)cache - offsetof(JavascriptLibrary, charStringCache));
- }
- bool GetArrayObjectHasUserDefinedSpecies() const { return arrayObjectHasUserDefinedSpecies; }
- void SetArrayObjectHasUserDefinedSpecies(bool val) { arrayObjectHasUserDefinedSpecies = val; }
- FunctionBody* GetFakeGlobalFuncForUndefer()const { return this->fakeGlobalFuncForUndefer; }
- void SetFakeGlobalFuncForUndefer(FunctionBody* functionBody) { this->fakeGlobalFuncForUndefer = functionBody; }
- ModuleRecordList* EnsureModuleRecordList();
- SourceTextModuleRecord* GetModuleRecord(uint moduleId);
- private:
- #ifdef ENABLE_DEBUG_CONFIG_OPTIONS
- // Declare fretest/debug properties here since otherwise it can cause
- // a mismatch between fre mshtml and fretest jscript9 causing undefined behavior
- Field(DynamicType *) debugDisposableObjectType;
- Field(DynamicType *) debugFuncExecutorInDisposeObjectType;
- #endif
- void InitializePrototypes();
- void InitializeTypes();
- void InitializeGlobal(GlobalObject * globalObject);
- static void PrecalculateArrayAllocationBuckets();
- #define STANDARD_INIT(name) \
- static void __cdecl Initialize##name##Constructor(DynamicObject* arrayConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); \
- static void __cdecl Initialize##name##Prototype(DynamicObject* arrayPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- STANDARD_INIT(Array);
- STANDARD_INIT(SharedArrayBuffer);
- STANDARD_INIT(ArrayBuffer);
- STANDARD_INIT(DataView);
- STANDARD_INIT(Error);
- STANDARD_INIT(EvalError);
- STANDARD_INIT(RangeError);
- STANDARD_INIT(ReferenceError);
- STANDARD_INIT(SyntaxError);
- STANDARD_INIT(TypeError);
- STANDARD_INIT(URIError);
- STANDARD_INIT(RuntimeError);
- STANDARD_INIT(TypedArray);
- STANDARD_INIT(Int8Array);
- STANDARD_INIT(Uint8Array);
- STANDARD_INIT(Uint8ClampedArray);
- STANDARD_INIT(Int16Array);
- STANDARD_INIT(Uint16Array);
- STANDARD_INIT(Int32Array);
- STANDARD_INIT(Uint32Array);
- STANDARD_INIT(Float32Array);
- STANDARD_INIT(Float64Array);
- STANDARD_INIT(Boolean);
- STANDARD_INIT(Symbol);
- STANDARD_INIT(Date);
- STANDARD_INIT(Proxy);
- STANDARD_INIT(Function);
- STANDARD_INIT(Number);
- STANDARD_INIT(Object);
- STANDARD_INIT(Regex);
- STANDARD_INIT(String);
- STANDARD_INIT(Map);
- STANDARD_INIT(Set);
- STANDARD_INIT(WeakMap);
- STANDARD_INIT(WeakSet);
- STANDARD_INIT(Promise);
- STANDARD_INIT(GeneratorFunction);
- STANDARD_INIT(AsyncFunction);
- STANDARD_INIT(WebAssemblyCompileError);
- STANDARD_INIT(WebAssemblyRuntimeError);
- STANDARD_INIT(WebAssemblyLinkError);
- STANDARD_INIT(WebAssemblyMemory);
- STANDARD_INIT(WebAssemblyModule);
- STANDARD_INIT(WebAssemblyInstance);
- STANDARD_INIT(WebAssemblyTable);
- #undef STANDARD_INIT
- static void __cdecl InitializeAtomicsObject(DynamicObject* atomicsObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeInt64ArrayPrototype(DynamicObject* prototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeUint64ArrayPrototype(DynamicObject* prototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeBoolArrayPrototype(DynamicObject* prototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeCharArrayPrototype(DynamicObject* prototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- void InitializeComplexThings();
- void InitializeStaticValues();
- static void __cdecl InitializeMathObject(DynamicObject* mathObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- #ifdef ENABLE_WASM
- static void __cdecl InitializeWebAssemblyObject(DynamicObject* WasmObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- #endif
- // SIMD_JS
- static void __cdecl InitializeSIMDObject(DynamicObject* simdObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDOpCodeMaps();
- template<typename SIMDTypeName>
- static void SIMDPrototypeInitHelper(DynamicObject* simdPrototype, JavascriptLibrary* library, JavascriptFunction* constructorFn, JavascriptString* strLiteral);
- static void __cdecl InitializeSIMDBool8x16Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDBool16x8Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDBool32x4Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDInt8x16Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDInt16x8Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDInt32x4Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDUint8x16Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDUint16x8Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDUint32x4Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDFloat32x4Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSIMDFloat64x2Prototype(DynamicObject* simdPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeJSONObject(DynamicObject* JSONObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeEngineInterfaceObject(DynamicObject* engineInterface, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeReflectObject(DynamicObject* reflectObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- #ifdef ENABLE_INTL_OBJECT
- static void __cdecl InitializeIntlObject(DynamicObject* IntlEngineObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- #endif
- #ifdef ENABLE_PROJECTION
- void InitializeWinRTPromiseConstructor();
- #endif
- static void __cdecl InitializeIteratorPrototype(DynamicObject* iteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeArrayIteratorPrototype(DynamicObject* arrayIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeMapIteratorPrototype(DynamicObject* mapIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeSetIteratorPrototype(DynamicObject* setIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeStringIteratorPrototype(DynamicObject* stringIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeGeneratorPrototype(DynamicObject* generatorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static void __cdecl InitializeAsyncFunction(DynamicObject *function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- RuntimeFunction* CreateBuiltinConstructor(FunctionInfo * functionInfo, DynamicTypeHandler * typeHandler, DynamicObject* prototype = nullptr);
- RuntimeFunction* DefaultCreateFunction(FunctionInfo * functionInfo, int length, DynamicObject * prototype, DynamicType * functionType, PropertyId nameId);
- RuntimeFunction* DefaultCreateFunction(FunctionInfo * functionInfo, int length, DynamicObject * prototype, DynamicType * functionType, Var nameId);
- JavascriptFunction* AddFunction(DynamicObject* object, PropertyId propertyId, RuntimeFunction* function);
- void AddMember(DynamicObject* object, PropertyId propertyId, Var value);
- void AddMember(DynamicObject* object, PropertyId propertyId, Var value, PropertyAttributes attributes);
- JavascriptString* CreateEmptyString();
- static void __cdecl InitializeGeneratorFunction(DynamicObject* function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- template<bool addPrototype>
- static void __cdecl InitializeFunction(DynamicObject* function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
- static size_t const LibraryFunctionArgC[BuiltinFunction::Count + 1];
- static int const LibraryFunctionFlags[BuiltinFunction::Count + 1]; // returns enum BuiltInFlags.
- #if ENABLE_DEBUG_CONFIG_OPTIONS
- static char16 const * const LibraryFunctionName[BuiltinFunction::Count + 1];
- #endif
- JavascriptFunction* EnsureArrayPrototypeValuesFunction();
- public:
- virtual void Finalize(bool isShutdown) override;
- #if DBG
- void DumpLibraryByteCode();
- #endif
- private:
- typedef JsUtil::BaseHashSet<Js::PropertyRecord const *, Recycler, PowerOf2SizePolicy> ReferencedPropertyRecordHashSet;
- Field(ReferencedPropertyRecordHashSet*) referencedPropertyRecords;
- ReferencedPropertyRecordHashSet * EnsureReferencedPropertyRecordList()
- {
- ReferencedPropertyRecordHashSet* pidList = this->referencedPropertyRecords;
- if (pidList == nullptr)
- {
- pidList = RecyclerNew(this->recycler, ReferencedPropertyRecordHashSet, this->recycler, 173);
- this->referencedPropertyRecords = pidList;
- }
- return pidList;
- }
- ReferencedPropertyRecordHashSet * GetReferencedPropertyRecordList() const
- {
- return this->referencedPropertyRecords;
- }
- HRESULT ProfilerRegisterObject();
- HRESULT ProfilerRegisterArray();
- HRESULT ProfilerRegisterBoolean();
- HRESULT ProfilerRegisterDate();
- HRESULT ProfilerRegisterFunction();
- HRESULT ProfilerRegisterMath();
- HRESULT ProfilerRegisterNumber();
- HRESULT ProfilerRegisterString();
- HRESULT ProfilerRegisterRegExp();
- HRESULT ProfilerRegisterJSON();
- HRESULT ProfilerRegisterMap();
- HRESULT ProfilerRegisterSet();
- HRESULT ProfilerRegisterWeakMap();
- HRESULT ProfilerRegisterWeakSet();
- HRESULT ProfilerRegisterSymbol();
- HRESULT ProfilerRegisterIterator();
- HRESULT ProfilerRegisterArrayIterator();
- HRESULT ProfilerRegisterMapIterator();
- HRESULT ProfilerRegisterSetIterator();
- HRESULT ProfilerRegisterStringIterator();
- HRESULT ProfilerRegisterTypedArray();
- HRESULT ProfilerRegisterPromise();
- HRESULT ProfilerRegisterProxy();
- HRESULT ProfilerRegisterReflect();
- HRESULT ProfilerRegisterGenerator();
- HRESULT ProfilerRegisterSIMD();
- HRESULT ProfilerRegisterAtomics();
- #ifdef IR_VIEWER
- HRESULT ProfilerRegisterIRViewer();
- #endif /* IR_VIEWER */
- };
- }
|