| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- // JavascriptLibraryBase.h is used by static lib shared between Trident and Chakra. We need to keep
- // the size consistent and try not to change its size. We need to have matching mshtml.dll
- // if the size changed here.
- #pragma once
- class ChakraEngine;
- namespace Js
- {
- class EngineInterfaceObject;
- class JavascriptLibraryBase : public FinalizableObject
- {
- friend class JavascriptLibrary;
- friend class ScriptSite;
- public:
- JavascriptLibraryBase(GlobalObject* globalObject):
- globalObject(globalObject),
- chakraEngine(nullptr)
- {
- }
- Var GetPI() { return pi; }
- Var GetNaN() { return nan; }
- Var GetNegativeInfinite() { return negativeInfinite; }
- Var GetPositiveInfinite() { return positiveInfinite; }
- Var GetMaxValue() { return maxValue; }
- Var GetMinValue() { return minValue; }
- Var GetNegativeZero() { return negativeZero; }
- RecyclableObject* GetUndefined() { return undefinedValue; }
- RecyclableObject* GetNull() { return nullValue; }
- JavascriptBoolean* GetTrue() { return booleanTrue; }
- JavascriptBoolean* GetFalse() { return booleanFalse; }
- JavascriptSymbol* GetSymbolHasInstance() { return symbolHasInstance; }
- JavascriptSymbol* GetSymbolIsConcatSpreadable() { return symbolIsConcatSpreadable; }
- JavascriptSymbol* GetSymbolAsyncIterator() { return symbolAsyncIterator; }
- JavascriptSymbol* GetSymbolIterator() { return symbolIterator; }
- JavascriptSymbol* GetSymbolToPrimitive() { return symbolToPrimitive; }
- JavascriptSymbol* GetSymbolToStringTag() { return symbolToStringTag; }
- JavascriptSymbol* GetSymbolUnscopables() { return symbolUnscopables; }
- JavascriptFunction* GetObjectConstructor() { return objectConstructor; }
- JavascriptFunction* GetArrayConstructor() { return arrayConstructor; }
- JavascriptFunction* GetBooleanConstructor() { return booleanConstructor; }
- JavascriptFunction* GetDateConstructor() { return dateConstructor; }
- JavascriptFunction* GetFunctionConstructor() { return functionConstructor; }
- JavascriptFunction* GetNumberConstructor() { return numberConstructor; }
- JavascriptFunction* GetBigIntConstructor() { return bigIntConstructor; }
- JavascriptRegExpConstructor* GetRegExpConstructor() { return regexConstructor; }
- JavascriptFunction* GetStringConstructor() { return stringConstructor; }
- JavascriptFunction* GetArrayBufferConstructor() { return arrayBufferConstructor; }
- JavascriptFunction* GetPixelArrayConstructor() { return pixelArrayConstructor; }
- JavascriptFunction* GetTypedArrayConstructor() const { return typedArrayConstructor; }
- JavascriptFunction* GetInt8ArrayConstructor() { return Int8ArrayConstructor; }
- JavascriptFunction* GetUint8ArrayConstructor() { return Uint8ArrayConstructor; }
- JavascriptFunction* GetUint8ClampedArrayConstructor() { return Uint8ClampedArrayConstructor; }
- JavascriptFunction* GetInt16ArrayConstructor() { return Int16ArrayConstructor; }
- JavascriptFunction* GetUint16ArrayConstructor() { return Uint16ArrayConstructor; }
- JavascriptFunction* GetInt32ArrayConstructor() { return Int32ArrayConstructor; }
- JavascriptFunction* GetUint32ArrayConstructor() { return Uint32ArrayConstructor; }
- JavascriptFunction* GetFloat32ArrayConstructor() { return Float32ArrayConstructor; }
- JavascriptFunction* GetFloat64ArrayConstructor() { return Float64ArrayConstructor; }
- JavascriptFunction* GetMapConstructor() { return mapConstructor; }
- JavascriptFunction* GetSetConstructor() { return setConstructor; }
- JavascriptFunction* GetWeakMapConstructor() { return weakMapConstructor; }
- JavascriptFunction* GetWeakSetConstructor() { return weakSetConstructor; }
- JavascriptFunction* GetSymbolConstructor() { return symbolConstructor; }
- JavascriptFunction* GetProxyConstructor() const { return proxyConstructor; }
- JavascriptFunction* GetPromiseConstructor() const { return promiseConstructor; }
- JavascriptFunction* GetGeneratorFunctionConstructor() const { return generatorFunctionConstructor; }
- JavascriptFunction* GetAsyncFunctionConstructor() const { return asyncFunctionConstructor; }
- JavascriptFunction* GetAsyncGeneratorFunctionConstructor() const { return asyncGeneratorFunctionConstructor; }
- JavascriptFunction* GetErrorConstructor() const { return errorConstructor; }
- JavascriptFunction* GetEvalErrorConstructor() const { return evalErrorConstructor; }
- JavascriptFunction* GetRangeErrorConstructor() const { return rangeErrorConstructor; }
- JavascriptFunction* GetReferenceErrorConstructor() const { return referenceErrorConstructor; }
- JavascriptFunction* GetSyntaxErrorConstructor() const { return syntaxErrorConstructor; }
- JavascriptFunction* GetTypeErrorConstructor() const { return typeErrorConstructor; }
- JavascriptFunction* GetURIErrorConstructor() const { return uriErrorConstructor; }
- JavascriptFunction* GetPromiseResolve() const { return promiseResolveFunction; }
- JavascriptFunction* GetPromiseThen() const { return promiseThenFunction; }
- JavascriptFunction* GetJSONStringify() const { return jsonStringifyFunction; }
- JavascriptFunction* GetObjectFreeze() const { return objectFreezeFunction; }
- JavascriptFunction* GetDebugEval() const { return debugEval; }
- JavascriptFunction* GetStackTraceFunction() const { return getStackTrace; }
- #ifdef EDIT_AND_CONTINUE
- JavascriptFunction* GetEditSource() const { return editSource; }
- #endif
- JavascriptFunction* GetArrayPrototypeForEachFunction() const { return arrayPrototypeForEachFunction; }
- JavascriptFunction* GetArrayPrototypeKeysFunction() const { return arrayPrototypeKeysFunction; }
- JavascriptFunction* GetArrayPrototypeValuesFunction() const { return arrayPrototypeValuesFunction; }
- JavascriptFunction* GetArrayPrototypeEntriesFunction() const { return arrayPrototypeEntriesFunction; }
- DynamicObject* GetMathObject() { return mathObject; }
- DynamicObject* GetJSONObject() { return JSONObject; }
- #ifdef ENABLE_INTL_OBJECT
- DynamicObject* GetIntlObject() { return IntlObject; }
- #endif
- #if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS)
- EngineInterfaceObject* GetEngineInterfaceObject() { return engineInterfaceObject; }
- #endif
- DynamicObject* GetArrayPrototype() { return arrayPrototype; }
- DynamicObject* GetBooleanPrototype() { return booleanPrototype; }
- DynamicObject* GetDatePrototype() { return datePrototype; }
- DynamicObject* GetFunctionPrototype() { return functionPrototype; }
- DynamicObject* GetNumberPrototype() { return numberPrototype; }
- DynamicObject* GetBigIntPrototype() { return bigintPrototype; }
- DynamicObject* GetSIMDBool8x16Prototype() { return simdBool8x16Prototype; }
- DynamicObject* GetSIMDBool16x8Prototype() { return simdBool16x8Prototype; }
- DynamicObject* GetSIMDBool32x4Prototype() { return simdBool32x4Prototype; }
- DynamicObject* GetSIMDInt8x16Prototype() { return simdInt8x16Prototype; }
- DynamicObject* GetSIMDInt16x8Prototype() { return simdInt16x8Prototype; }
- DynamicObject* GetSIMDInt32x4Prototype() { return simdInt32x4Prototype; }
- DynamicObject* GetSIMDUint8x16Prototype() { return simdUint8x16Prototype; }
- DynamicObject* GetSIMDUint16x8Prototype() { return simdUint16x8Prototype; }
- DynamicObject* GetSIMDUint32x4Prototype() { return simdUint32x4Prototype; }
- DynamicObject* GetSIMDFloat32x4Prototype() { return simdFloat32x4Prototype; }
- DynamicObject* GetSIMDFloat64x2Prototype() { return simdFloat64x2Prototype; }
- ObjectPrototypeObject* GetObjectPrototypeObject() { return objectPrototype; }
- DynamicObject* GetObjectPrototype();
- DynamicObject* GetRegExpPrototype() { return regexPrototype; }
- DynamicObject* GetStringPrototype() { return stringPrototype; }
- DynamicObject* GetMapPrototype() { return mapPrototype; }
- DynamicObject* GetSetPrototype() { return setPrototype; }
- DynamicObject* GetWeakMapPrototype() { return weakMapPrototype; }
- DynamicObject* GetWeakSetPrototype() { return weakSetPrototype; }
- DynamicObject* GetSymbolPrototype() { return symbolPrototype; }
- DynamicObject* GetAsyncIteratorPrototype() const { return asyncIteratorPrototype; }
- DynamicObject* GetArrayIteratorPrototype() const { return arrayIteratorPrototype; }
- DynamicObject* GetMapIteratorPrototype() const { return mapIteratorPrototype; }
- DynamicObject* GetSetIteratorPrototype() const { return setIteratorPrototype; }
- DynamicObject* GetStringIteratorPrototype() const { return stringIteratorPrototype; }
- DynamicObject* GetIteratorPrototype() const { return iteratorPrototype; }
- DynamicObject* GetPromisePrototype() const { return promisePrototype; }
- DynamicObject* GetGeneratorFunctionPrototype() const { return generatorFunctionPrototype; }
- DynamicObject* GetGeneratorPrototype() const { return generatorPrototype; }
- DynamicObject* GetAsyncFunctionPrototype() const { return asyncFunctionPrototype; }
- DynamicObject* GetAsyncGeneratorFunctionPrototype() const { return asyncGeneratorFunctionPrototype; }
- DynamicObject* GetErrorPrototype() const { return errorPrototype; }
- DynamicObject* GetEvalErrorPrototype() const { return evalErrorPrototype; }
- DynamicObject* GetRangeErrorPrototype() const { return rangeErrorPrototype; }
- DynamicObject* GetReferenceErrorPrototype() const { return referenceErrorPrototype; }
- DynamicObject* GetSyntaxErrorPrototype() const { return syntaxErrorPrototype; }
- DynamicObject* GetTypeErrorPrototype() const { return typeErrorPrototype; }
- DynamicObject* GetURIErrorPrototype() const { return uriErrorPrototype; }
- PropertyId GetPropertyIdSymbolIterator() { return PropertyIds::_symbolIterator; };
- PropertyId GetPropertyIdSymbolToStringTag() { return PropertyIds::_symbolToStringTag; };
- PropertyId GetPropertyIdSymbolUnscopables() { return PropertyIds::_symbolUnscopables; };
- bool IsChakraEngine() const { return chakraEngine != nullptr; }
- protected:
- Field(GlobalObject*) globalObject;
- Field(RuntimeFunction*) mapConstructor;
- Field(RuntimeFunction*) setConstructor;
- Field(RuntimeFunction*) weakMapConstructor;
- Field(RuntimeFunction*) weakSetConstructor;
- Field(RuntimeFunction*) arrayConstructor;
- Field(RuntimeFunction*) typedArrayConstructor;
- Field(RuntimeFunction*) Int8ArrayConstructor;
- Field(RuntimeFunction*) Uint8ArrayConstructor;
- Field(RuntimeFunction*) Uint8ClampedArrayConstructor;
- Field(RuntimeFunction*) Int16ArrayConstructor;
- Field(RuntimeFunction*) Uint16ArrayConstructor;
- Field(RuntimeFunction*) Int32ArrayConstructor;
- Field(RuntimeFunction*) Uint32ArrayConstructor;
- Field(RuntimeFunction*) Float32ArrayConstructor;
- Field(RuntimeFunction*) Float64ArrayConstructor;
- Field(RuntimeFunction*) arrayBufferConstructor;
- Field(RuntimeFunction*) dataViewConstructor;
- Field(RuntimeFunction*) booleanConstructor;
- Field(RuntimeFunction*) dateConstructor;
- Field(RuntimeFunction*) functionConstructor;
- Field(RuntimeFunction*) numberConstructor;
- Field(RuntimeFunction*) bigIntConstructor;
- Field(RuntimeFunction*) objectConstructor;
- Field(RuntimeFunction*) symbolConstructor;
- Field(JavascriptRegExpConstructor*) regexConstructor;
- Field(RuntimeFunction*) stringConstructor;
- Field(RuntimeFunction*) pixelArrayConstructor;
- Field(RuntimeFunction*) errorConstructor;
- Field(RuntimeFunction*) evalErrorConstructor;
- Field(RuntimeFunction*) rangeErrorConstructor;
- Field(RuntimeFunction*) referenceErrorConstructor;
- Field(RuntimeFunction*) syntaxErrorConstructor;
- Field(RuntimeFunction*) typeErrorConstructor;
- Field(RuntimeFunction*) uriErrorConstructor;
- Field(RuntimeFunction*) proxyConstructor;
- Field(RuntimeFunction*) promiseConstructor;
- Field(RuntimeFunction*) generatorFunctionConstructor;
- Field(RuntimeFunction*) asyncFunctionConstructor;
- Field(RuntimeFunction*) asyncGeneratorFunctionConstructor;
- Field(JavascriptFunction*) defaultAccessorFunction;
- Field(JavascriptFunction*) stackTraceAccessorFunction;
- Field(JavascriptFunction*) throwTypeErrorRestrictedPropertyAccessorFunction;
- Field(JavascriptFunction*) debugObjectNonUserGetterFunction;
- Field(JavascriptFunction*) debugObjectNonUserSetterFunction;
- Field(JavascriptFunction*) debugObjectDebugModeGetterFunction;
- Field(JavascriptFunction*) __proto__getterFunction;
- Field(JavascriptFunction*) __proto__setterFunction;
- Field(JavascriptFunction*) arrayIteratorPrototypeBuiltinNextFunction;
- Field(JavascriptFunction*) promiseResolveFunction;
- Field(JavascriptFunction*) promiseThenFunction;
- Field(JavascriptFunction*) jsonStringifyFunction;
- Field(JavascriptFunction*) objectFreezeFunction;
- Field(DynamicObject*) mathObject;
- // SIMD_JS
- Field(DynamicObject*) simdObject;
- Field(DynamicObject*) debugObject;
- Field(DynamicObject*) JSONObject;
- #ifdef ENABLE_INTL_OBJECT
- Field(DynamicObject*) IntlObject;
- #endif
- #if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS)
- Field(EngineInterfaceObject*) engineInterfaceObject;
- #endif
- Field(DynamicObject*) reflectObject;
- Field(DynamicObject*) arrayPrototype;
- Field(DynamicObject*) typedArrayPrototype;
- Field(DynamicObject*) Int8ArrayPrototype;
- Field(DynamicObject*) Uint8ArrayPrototype;
- Field(DynamicObject*) Uint8ClampedArrayPrototype;
- Field(DynamicObject*) Int16ArrayPrototype;
- Field(DynamicObject*) Uint16ArrayPrototype;
- Field(DynamicObject*) Int32ArrayPrototype;
- Field(DynamicObject*) Uint32ArrayPrototype;
- Field(DynamicObject*) Float32ArrayPrototype;
- Field(DynamicObject*) Float64ArrayPrototype;
- Field(DynamicObject*) Int64ArrayPrototype;
- Field(DynamicObject*) Uint64ArrayPrototype;
- Field(DynamicObject*) BoolArrayPrototype;
- Field(DynamicObject*) CharArrayPrototype;
- Field(DynamicObject*) arrayBufferPrototype;
- Field(DynamicObject*) dataViewPrototype;
- Field(DynamicObject*) pixelArrayPrototype;
- Field(DynamicObject*) booleanPrototype;
- Field(DynamicObject*) datePrototype;
- Field(DynamicObject*) functionPrototype;
- Field(DynamicObject*) numberPrototype;
- Field(DynamicObject*) bigintPrototype;
- Field(ObjectPrototypeObject*) objectPrototype;
- Field(DynamicObject*) regexPrototype;
- Field(DynamicObject*) stringPrototype;
- Field(DynamicObject*) mapPrototype;
- Field(DynamicObject*) setPrototype;
- Field(DynamicObject*) weakMapPrototype;
- Field(DynamicObject*) weakSetPrototype;
- Field(DynamicObject*) symbolPrototype;
- Field(DynamicObject*) asyncIteratorPrototype; // aka %AsyncIteratorPrototype%
- Field(DynamicObject*) iteratorPrototype; // aka %IteratorPrototype%
- Field(DynamicObject*) arrayIteratorPrototype;
- Field(DynamicObject*) mapIteratorPrototype;
- Field(DynamicObject*) setIteratorPrototype;
- Field(DynamicObject*) stringIteratorPrototype;
- Field(DynamicObject*) promisePrototype;
- Field(DynamicObject*) generatorFunctionPrototype; // aka %Generator%
- Field(DynamicObject*) generatorPrototype; // aka %GeneratorPrototype%
- Field(DynamicObject*) asyncFunctionPrototype; // aka %AsyncFunctionPrototype%
- Field(DynamicObject*) asyncGeneratorPrototype; // aka %AsyncGeneratorPrototype%
- Field(DynamicObject*) asyncGeneratorFunctionPrototype; // aka %AsyncGeneratorFunctionPrototype%
- Field(DynamicObject*) asyncFromSyncIteratorProtototype;
- Field(DynamicObject*) errorPrototype;
- Field(DynamicObject*) evalErrorPrototype;
- Field(DynamicObject*) rangeErrorPrototype;
- Field(DynamicObject*) referenceErrorPrototype;
- Field(DynamicObject*) syntaxErrorPrototype;
- Field(DynamicObject*) typeErrorPrototype;
- Field(DynamicObject*) uriErrorPrototype;
- //SIMD Prototypes
- Field(DynamicObject*) simdBool8x16Prototype;
- Field(DynamicObject*) simdBool16x8Prototype;
- Field(DynamicObject*) simdBool32x4Prototype;
- Field(DynamicObject*) simdInt8x16Prototype;
- Field(DynamicObject*) simdInt16x8Prototype;
- Field(DynamicObject*) simdInt32x4Prototype;
- Field(DynamicObject*) simdUint8x16Prototype;
- Field(DynamicObject*) simdUint16x8Prototype;
- Field(DynamicObject*) simdUint32x4Prototype;
- Field(DynamicObject*) simdFloat32x4Prototype;
- Field(DynamicObject*) simdFloat64x2Prototype;
- Field(JavascriptBoolean*) booleanTrue;
- Field(JavascriptBoolean*) booleanFalse;
- Field(Var) nan;
- Field(Var) negativeInfinite;
- Field(Var) positiveInfinite;
- Field(Var) pi;
- Field(Var) minValue;
- Field(Var) maxValue;
- Field(Var) negativeZero;
- Field(RecyclableObject*) undefinedValue;
- Field(RecyclableObject*) nullValue;
- Field(JavascriptSymbol*) symbolAsyncIterator;
- Field(JavascriptSymbol*) symbolHasInstance;
- Field(JavascriptSymbol*) symbolIsConcatSpreadable;
- Field(JavascriptSymbol*) symbolIterator;
- Field(JavascriptSymbol*) symbolSpecies;
- Field(JavascriptSymbol*) symbolToPrimitive;
- Field(JavascriptSymbol*) symbolToStringTag;
- Field(JavascriptSymbol*) symbolUnscopables;
- public:
- typedef void (CALLBACK *HostPromiseRejectionTrackerCallback)(Var promise, Var reason, bool handled, void *callbackState);
- void SetNativeHostPromiseRejectionTrackerCallback(HostPromiseRejectionTrackerCallback function, void *state)
- {
- this->nativeHostPromiseRejectionTracker = function;
- this->nativeHostPromiseRejectionTrackerState = state;
- }
- private:
- FieldNoBarrier(HostPromiseRejectionTrackerCallback) nativeHostPromiseRejectionTracker = nullptr;
- Field(void *) nativeHostPromiseRejectionTrackerState = nullptr;
- public:
- Field(ScriptContext*) scriptContext;
- Field(ChakraEngine*) chakraEngine;
- private:
- virtual void Dispose(bool isShutdown) override;
- virtual void Finalize(bool isShutdown) override;
- virtual void Mark(Recycler *recycler) override { AssertMsg(false, "Mark called on object that isn't TrackableObject"); }
- protected:
- Field(JavascriptFunction*) arrayPrototypeForEachFunction;
- Field(JavascriptFunction*) arrayPrototypeKeysFunction;
- Field(JavascriptFunction*) arrayPrototypeValuesFunction;
- Field(JavascriptFunction*) arrayPrototypeEntriesFunction;
- Field(JavascriptFunction*) debugEval;
- Field(JavascriptFunction*) getStackTrace;
- #ifdef EDIT_AND_CONTINUE
- Field(JavascriptFunction*) editSource;
- #endif
- Field(JavascriptFunction*) mathMin;
- Field(JavascriptFunction*) mathMax;
- #ifdef ENABLE_JS_BUILTINS
- public:
- JavascriptFunction* GetMathMinFunction() const { return mathMin; }
- JavascriptFunction* GetMathMaxFunction() const { return mathMax; }
- #endif
- };
- }
|