2
0

Runtime.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved.
  4. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  5. //-------------------------------------------------------------------------------------------------------
  6. #pragma once
  7. #include "Common.h"
  8. //========================
  9. // Parser includes
  10. //========================
  11. #include "Parser.h"
  12. #include "ParserCommon.h"
  13. #include "ParseFlags.h"
  14. #include "rterror.h"
  15. // Parser forward decl
  16. class FuncInfo;
  17. class Scope;
  18. class Symbol;
  19. struct Ident;
  20. typedef Ident *IdentPtr;
  21. enum SymbolType : byte;
  22. // Regex forward decl
  23. namespace UnifiedRegex
  24. {
  25. struct RegexPattern;
  26. template <typename T> class StandardChars; // Used by ThreadContext.h
  27. struct TrigramAlphabet;
  28. struct RegexStacks;
  29. #if ENABLE_REGEX_CONFIG_OPTIONS
  30. class DebugWriter;
  31. struct RegexStats;
  32. class RegexStatsDatabase;
  33. #endif
  34. };
  35. //========================
  36. #include "RuntimeCommon.h"
  37. #include <intsafe.h>
  38. #if !defined(UNREFERENCED_PARAMETER)
  39. #define UNREFERENCED_PARAMETER(x) (x)
  40. #endif
  41. class SRCINFO;
  42. class Lowerer;
  43. class LowererMD;
  44. class LowererMDArch;
  45. class ByteCodeGenerator;
  46. interface IActiveScriptDataCache;
  47. class ActiveScriptProfilerHeapEnum;
  48. class JITJavascriptString;
  49. ////////
  50. #include "Debug/TTSupport.h"
  51. #include "Debug/TTSerialize.h"
  52. ////////
  53. namespace Js
  54. {
  55. //
  56. // Forward declarations
  57. //
  58. class CharClassifier;
  59. typedef int32 MessageId;
  60. /* enum */ struct PropertyIds;
  61. class DebugDocument;
  62. struct Utf8SourceInfo;
  63. struct CallInfo;
  64. struct InlineeCallInfo;
  65. struct InlineCache;
  66. class PolymorphicInlineCache;
  67. struct Arguments;
  68. class StringDictionaryWrapper;
  69. struct ByteCodeDumper;
  70. struct ByteCodeReader;
  71. struct ByteCodeWriter;
  72. enum class EnumeratorFlags : byte;
  73. struct EnumeratorCache;
  74. class JavascriptStaticEnumerator;
  75. class ForInObjectEnumerator;
  76. class JavascriptConversion;
  77. class JavascriptDate;
  78. class DateImplementation;
  79. class BufferString;
  80. class BufferStringBuilder;
  81. class ConcatString;
  82. class CompoundString;
  83. class JavascriptBoolean;
  84. class JavascriptBooleanObject;
  85. class JavascriptSymbol;
  86. class JavascriptSymbolObject;
  87. #ifdef _CHAKRACOREBUILD
  88. class CustomExternalWrapperObject;
  89. #endif
  90. class JavascriptProxy;
  91. class JavascriptReflect;
  92. class JavascriptEnumeratorIterator;
  93. class JavascriptArrayIterator;
  94. enum class JavascriptArrayIteratorKind;
  95. class JavascriptAsyncFromSyncIterator;
  96. class JavascriptMapIterator;
  97. enum class JavascriptMapIteratorKind;
  98. class JavascriptSetIterator;
  99. enum class JavascriptSetIteratorKind;
  100. class JavascriptStringIterator;
  101. class JavascriptListIterator;
  102. class JavascriptPromise;
  103. class JavascriptPromiseCapability;
  104. class JavascriptPromiseReaction;
  105. class JavascriptPromiseCapabilitiesExecutorFunction;
  106. class JavascriptPromiseResolveOrRejectFunction;
  107. class JavascriptPromiseReactionTaskFunction;
  108. class JavascriptPromiseThenFinallyFunction;
  109. class JavascriptPromiseThunkFinallyFunction;
  110. class JavascriptPromiseResolveThenableTaskFunction;
  111. class JavascriptPromiseAllResolveElementFunction;
  112. class JavascriptPromiseAllSettledResolveOrRejectElementFunction;
  113. class JavascriptPromiseAnyRejectElementFunction;
  114. struct JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper;
  115. struct JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper;
  116. class JavascriptAsyncSpawnExecutorFunction;
  117. class JavascriptAsyncSpawnStepFunction;
  118. class JavascriptGenerator;
  119. class LiteralString;
  120. class JavascriptStringObject;
  121. class JavascriptBigIntObject;
  122. struct PropertyDescriptor;
  123. class Type;
  124. class DynamicType;
  125. class ScriptFunctionType;
  126. class DynamicTypeHandler;
  127. class DeferredTypeHandlerBase;
  128. template <bool IsPrototype> class NullTypeHandler;
  129. template<size_t size> class SimpleTypeHandler;
  130. class PathTypeHandlerBase;
  131. class IndexPropertyDescriptor;
  132. class DynamicObject;
  133. class ArrayObject;
  134. class UnscopablesWrapperObject;
  135. class SpreadArgument;
  136. class JavascriptString;
  137. class JavascriptBigInt;
  138. class StringCopyInfo;
  139. class StringCopyInfoStack;
  140. class ObjectPrototypeObject;
  141. class PropertyString;
  142. class PropertyRecordUsageCache;
  143. class ArgumentsObject;
  144. class HeapArgumentsObject;
  145. class ActivationObject;
  146. class JavascriptNumber;
  147. class JavascriptNumberObject;
  148. class ScriptContextProfiler;
  149. struct RestrictedErrorStrings;
  150. class JavascriptError;
  151. class JavascriptAggregateError;
  152. class RecyclableObject;
  153. class JavascriptRegExp;
  154. class JavascriptRegularExpressionResult;
  155. template<typename T> class SparseArraySegment;
  156. enum class DynamicObjectFlags : uint16;
  157. class JavascriptArray;
  158. class JavascriptNativeIntArray;
  159. #if ENABLE_COPYONACCESS_ARRAY
  160. class JavascriptCopyOnAccessNativeIntArray;
  161. #endif
  162. class JavascriptNativeFloatArray;
  163. class ES5Array;
  164. class JavascriptFunction;
  165. class ScriptFunction;
  166. class ScriptFunctionWithInlineCache;
  167. class StackScriptFunction;
  168. class GeneratorVirtualScriptFunction;
  169. class JavascriptGeneratorFunction;
  170. class JavascriptAsyncGeneratorFunction;
  171. class JavascriptAsyncFunction;
  172. class AsmJsScriptFunction;
  173. class WasmScriptFunction;
  174. class JavascriptRegExpConstructor;
  175. class JavascriptRegExpEnumerator;
  176. class BoundFunction;
  177. class JavascriptMap;
  178. class JavascriptSet;
  179. class JavascriptWeakMap;
  180. class JavascriptWeakSet;
  181. class DynamicObject;
  182. class HostObjectBase;
  183. class RootObjectBase;
  184. class ModuleRoot;
  185. class GlobalObject;
  186. class Math;
  187. class JavascriptOperators;
  188. class JavascriptLibrary;
  189. class JavascriptEncodeURI;
  190. class JavascriptEncodeURIComponent;
  191. class JavascriptDecodeURI;
  192. class JavascriptDecodeURIComponent;
  193. class DataView;
  194. struct ConstructorCache;
  195. enum class OpCode : ushort;
  196. enum class OpCodeAsmJs : ushort;
  197. /* enum */ struct OpLayoutType;
  198. /* enum */ struct OpLayoutTypeAsmJs;
  199. class ExceptionBase;
  200. class OutOfMemoryException;
  201. class ScriptDebug;
  202. class ScriptContext;
  203. struct NativeModule;
  204. template <class T> class RcRef;
  205. class TaggedInt;
  206. class TaggedNumber;
  207. struct InterpreterStackFrame;
  208. struct ScriptEntryExitRecord;
  209. class JavascriptStackWalker;
  210. struct AsmJsCallStackLayout;
  211. class JavascriptCallStackLayout;
  212. class Throw;
  213. struct Tick;
  214. struct TickDelta;
  215. class ByteBlock;
  216. class FunctionInfo;
  217. class FunctionProxy;
  218. class FunctionBody;
  219. class ParseableFunctionInfo;
  220. struct StatementLocation;
  221. class EntryPointInfo;
  222. struct LoopHeader;
  223. class InternalString;
  224. enum class JavascriptHint;
  225. /* enum */ struct BuiltinFunction;
  226. class EnterScriptObject;
  227. class PropertyRecord;
  228. struct IsInstInlineCache;
  229. class EntryPointInfo;
  230. class PolymorphicInlineCacheInfo;
  231. class PropertyGuard;
  232. class DetachedStateBase;
  233. // asm.js
  234. namespace ArrayBufferView
  235. {
  236. enum ViewType: uint8;
  237. }
  238. struct EmitExpressionInfo;
  239. struct AsmJsModuleMemory;
  240. namespace AsmJsLookupSource
  241. {
  242. enum Source: int;
  243. }
  244. struct AsmJsByteCodeWriter;
  245. class AsmJsArrayView;
  246. class AsmJsType;
  247. class AsmJsRetType;
  248. class AsmJsVarType;
  249. class AsmJsSymbol;
  250. class AsmJsVarBase;
  251. class AsmJsVar;
  252. class AsmJsConstantImport;
  253. class AsmJsArgument;
  254. class AsmJsFunc;
  255. class AsmJsFunctionDeclaration;
  256. class AsmJsFunctionInfo;
  257. class AsmJsModuleInfo;
  258. class AsmJsGlobals;
  259. class AsmJsImportFunction;
  260. class AsmJsTypedArrayFunction;
  261. class AsmJsMathFunction;
  262. class AsmJsMathConst;
  263. #ifdef ASMJS_PLAT
  264. Var AsmJsExternalEntryPoint(Js::RecyclableObject* entryObject, Js::CallInfo callInfo, ...);
  265. class AsmJsCodeGenerator;
  266. class AsmJsEncoder;
  267. #endif
  268. struct MathBuiltin;
  269. struct ExclusiveContext;
  270. class AsmJsModuleCompiler;
  271. class AsmJSCompiler;
  272. class AsmJSByteCodeGenerator;
  273. enum AsmJSMathBuiltinFunction: int;
  274. //////////////////////////////////////////////////////////////////////////
  275. #if ENABLE_WEAK_REFERENCE_REGIONS
  276. template <typename T> using WeakPropertyIdMap = JsUtil::WeakReferenceRegionDictionary<PropertyId, T*, PrimeSizePolicy>;
  277. #else
  278. template <typename T> using WeakPropertyIdMap = JsUtil::WeakReferenceDictionary<PropertyId, T, PrimeSizePolicy>;
  279. #endif
  280. typedef WeakPropertyIdMap<PropertyString> PropertyStringCacheMap;
  281. typedef WeakPropertyIdMap<JavascriptSymbol> SymbolCacheMap;
  282. extern const FrameDisplay NullFrameDisplay;
  283. extern const FrameDisplay StrictNullFrameDisplay;
  284. enum ImplicitCallFlags : BYTE
  285. {
  286. ImplicitCall_HasNoInfo = 0x00,
  287. ImplicitCall_None = 0x01,
  288. ImplicitCall_ToPrimitive = 0x02 | ImplicitCall_None,
  289. ImplicitCall_Accessor = 0x04 | ImplicitCall_None,
  290. ImplicitCall_NonProfiledAccessor = 0x08 | ImplicitCall_None,
  291. ImplicitCall_External = 0x10 | ImplicitCall_None,
  292. ImplicitCall_Exception = 0x20 | ImplicitCall_None,
  293. ImplicitCall_NoOpSet = 0x40 | ImplicitCall_None,
  294. ImplicitCall_All = 0x7F,
  295. // Implicit call that is not caused by operations for the instruction (e.g. QC and GC dispose)
  296. // where we left script and enter script again. (Also see BEGIN_LEAVE_SCRIPT_INTERNAL)
  297. // This doesn't count as an implicit call on the recorded profile, but if it happens on JIT'ed code
  298. // it will still cause a bailout. Should happen very rarely.
  299. ImplicitCall_AsyncHostOperation = 0x80
  300. };
  301. }
  302. namespace TTD
  303. {
  304. //typedef for a pin set (ensure that objects are kept live).
  305. typedef JsUtil::BaseHashSet<Js::PropertyRecord*, Recycler> PropertyRecordPinSet;
  306. typedef JsUtil::BaseHashSet<Js::FunctionBody*, Recycler> FunctionBodyPinSet;
  307. typedef JsUtil::BaseHashSet<Js::RecyclableObject*, Recycler> ObjectPinSet;
  308. typedef JsUtil::BaseHashSet<Js::FrameDisplay*, Recycler> EnvironmentPinSet;
  309. typedef JsUtil::BaseHashSet<Js::Var, Recycler> SlotArrayPinSet;
  310. }
  311. #include "PlatformAgnostic/ChakraPlatform.h"
  312. bool IsMathLibraryId(Js::PropertyId propertyId);
  313. #include "ByteCode/PropertyIdArray.h"
  314. #include "ByteCode/AuxArray.h"
  315. #include "ByteCode/VarArrayVarCount.h"
  316. // module id
  317. const Js::ModuleID kmodGlobal = 0;
  318. class SourceContextInfo;
  319. #if defined(ENABLE_SCRIPT_DEBUGGING) && defined(_WIN32)
  320. #include "activdbg100.h"
  321. #else
  322. #define SCRIPT_E_RECORDED _HRESULT_TYPEDEF_(0x86664004L)
  323. #define NEED_DEBUG_EVENT_INFO_TYPE
  324. #endif
  325. #ifndef NTDDI_WIN10
  326. // These are only defined for the Win10 SDK and above
  327. #define NEED_DEBUG_EVENT_INFO_TYPE
  328. #define SDO_ENABLE_LIBRARY_STACK_FRAME ((SCRIPT_DEBUGGER_OPTIONS)0x8)
  329. #define DBGPROP_ATTRIB_VALUE_IS_RETURN_VALUE 0x8000000
  330. #define DBGPROP_ATTRIB_VALUE_PENDING_MUTATION 0x10000000
  331. #endif
  332. #ifdef NEED_DEBUG_EVENT_INFO_TYPE
  333. // Consider: Refactor to avoid needing these?
  334. typedef
  335. enum tagDEBUG_EVENT_INFO_TYPE
  336. {
  337. DEIT_GENERAL = 0,
  338. DEIT_ASMJS_IN_DEBUGGING = (DEIT_GENERAL + 1),
  339. DEIT_ASMJS_SUCCEEDED = (DEIT_ASMJS_IN_DEBUGGING + 1),
  340. DEIT_ASMJS_FAILED = (DEIT_ASMJS_SUCCEEDED + 1)
  341. } DEBUG_EVENT_INFO_TYPE;
  342. #endif
  343. #include "../JITIDL/JITTypes.h"
  344. #include "../JITClient/JITManager.h"
  345. #include "Base/SourceHolder.h"
  346. #include "Base/LineOffsetCache.h"
  347. #include "Base/Utf8SourceInfo.h"
  348. #include "Base/PropertyRecord.h"
  349. #ifdef ENABLE_GLOBALIZATION
  350. #include "Base/DelayLoadLibrary.h"
  351. #endif
  352. #include "Base/CallInfo.h"
  353. #include "Language/ExecutionMode.h"
  354. #include "Types/TypeId.h"
  355. #include "Base/Constants.h"
  356. #include "BackendApi.h"
  357. #include "Language/PropertyGuard.h"
  358. #include "Language/ConstructorCache.h"
  359. #include "ByteCode/OpLayoutsCommon.h"
  360. #include "ByteCode/OpLayouts.h"
  361. #include "ByteCode/OpLayoutsAsmJs.h"
  362. #include "ByteCode/OpCodeUtil.h"
  363. #include "Language/Arguments.h"
  364. #include "Types/RecyclableObject.h"
  365. #include "Base/ExpirableObject.h"
  366. #include "Types/Type.h"
  367. #include "Types/StaticType.h"
  368. #include "Base/CrossSite.h"
  369. #include "Base/CrossSiteObject.h"
  370. #include "Types/JavascriptEnumerator.h"
  371. #include "Types/DynamicObject.h"
  372. #include "Types/ArrayObject.h"
  373. #include "Types/TypePath.h"
  374. #include "Types/TypeHandler.h"
  375. #include "Types/SimplePropertyDescriptor.h"
  376. #include "Types/DynamicType.h"
  377. #include "Language/StackTraceArguments.h"
  378. #include "Types/PropertyDescriptor.h"
  379. #include "Types/ActivationObject.h"
  380. #include "Base/TempArenaAllocatorObject.h"
  381. #include "Language/ValueType.h"
  382. #include "Language/DynamicProfileInfo.h"
  383. #include "Base/SourceContextInfo.h"
  384. #include "Language/InlineCache.h"
  385. #include "Language/InlineCachePointerArray.h"
  386. #include "Base/FunctionInfo.h"
  387. #include "Base/FunctionBody.h"
  388. #include "Language/JavascriptExceptionContext.h"
  389. #include "Language/JavascriptExceptionObject.h"
  390. #include "Base/PerfHint.h"
  391. #include "ByteCode/ByteBlock.h"
  392. #include "Library/JavascriptBuiltInFunctions.h"
  393. #include "Library/JavascriptString.h"
  394. #include "Library/StringCopyInfo.h"
  395. #include "Library/JavascriptNumber.h"
  396. #include "Library/JavascriptFunction.h"
  397. #include "Library/BoundFunction.h"
  398. #include "Library/RuntimeFunction.h"
  399. #include "Library/JavascriptExternalFunction.h"
  400. #include "Library/CustomExternalIterator.h"
  401. #include "Base/CharStringCache.h"
  402. #include "Language/PrototypeChainCache.h"
  403. #include "Library/JavascriptObject.h"
  404. #include "Library/BuiltInFlags.h"
  405. #include "Types/DynamicObjectPropertyEnumerator.h"
  406. #include "Types/JavascriptStaticEnumerator.h"
  407. #include "Library/ExternalLibraryBase.h"
  408. #include "Library/JavascriptLibraryBase.h"
  409. #include "Library/MathLibrary.h"
  410. #include "Base/ThreadContextInfo.h"
  411. #include "DataStructures/EvalMapString.h"
  412. #include "Language/EvalMapRecord.h"
  413. #include "Base/RegexPatternMruMap.h"
  414. #include "Library/JavascriptLibrary.h"
  415. #include "Language/JavascriptExceptionOperators.h"
  416. #include "Language/JavascriptOperators.h"
  417. #include "Library/WasmLibrary.h"
  418. #include "Library/WabtInterface.h"
  419. // xplat-todo: We should get rid of this altogether and move the functionality it
  420. // encapsulates to the Platform Agnostic Interface
  421. #ifdef _WIN32
  422. #if defined(ENABLE_GLOBALIZATION) || ENABLE_UNICODE_API
  423. #include "Base/WindowsGlobalizationAdapter.h"
  424. #include "Base/WindowsFoundationAdapter.h"
  425. #endif
  426. #endif
  427. #include "Base/Debug.h"
  428. #ifdef _M_X64
  429. #include "Language/amd64/StackFrame.h"
  430. #endif
  431. #include "Base/Entropy.h"
  432. #ifdef ENABLE_BASIC_TELEMETRY
  433. #include "DirectCall.h"
  434. #include "ScriptContext/ScriptContextTelemetry.h"
  435. #else
  436. #define CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(builtin)
  437. #define CHAKRATEL_LANGSTATS_INC_LANGFEATURECOUNT(esVersion, feature, m_scriptContext)
  438. #endif
  439. #include "Library/DelayFreeArrayBufferHelper.h"
  440. #include "Base/ThreadContext.h"
  441. #include "Base/StackProber.h"
  442. #include "Base/ScriptContextProfiler.h"
  443. #include "Language/JavascriptConversion.h"
  444. #include "Base/ScriptContextOptimizationOverrideInfo.h"
  445. #include "Base/ScriptContextBase.h"
  446. #include "Base/ScriptContextInfo.h"
  447. #include "Base/ScriptContext.h"
  448. #include "Base/LeaveScriptObject.h"
  449. #include "Base/PropertyRecord.h"
  450. #include "ByteCode/ByteCodeReader.h"
  451. #include "Language/TaggedInt.h"
  452. #include "Library/RootObjectBase.h"
  453. #include "Library/GlobalObject.h"
  454. #include "Library/LiteralString.h"
  455. #include "Library/ConcatString.h"
  456. #include "Library/CompoundString.h"
  457. #include "Library/PropertyRecordUsageCache.h"
  458. #include "Library/PropertyString.h"
  459. #include "Library/SingleCharString.h"
  460. #include "Library/JavascriptTypedNumber.h"
  461. #include "Library/SparseArraySegment.h"
  462. #include "Library/JavascriptError.h"
  463. #include "Library/JavascriptArray.h"
  464. #include "Library/JavascriptSymbol.h"
  465. #include "Library/AtomicsObject.h"
  466. #include "DetachedStateBase.h"
  467. #include "Library/ArrayBuffer.h"
  468. #include "Library/SharedArrayBuffer.h"
  469. #include "Library/TypedArray.h"
  470. #include "Library/JavascriptBoolean.h"
  471. #include "Library/JavascriptBigInt.h"
  472. #include "Library/WebAssemblyEnvironment.h"
  473. #include "Library/WebAssemblyTable.h"
  474. #include "Library/WebAssemblyMemory.h"
  475. #include "Library/WebAssemblyModule.h"
  476. #include "Library/WebAssembly.h"
  477. #include "Language/ModuleRecordBase.h"
  478. #include "Language/SourceTextModuleRecord.h"
  479. //#include "Language/ModuleNamespace.h"
  480. #include "Types/ScriptFunctionType.h"
  481. #include "Library/ScriptFunction.h"
  482. #include "Library/StackScriptFunction.h"
  483. #ifdef _CHAKRACOREBUILD
  484. #include "Library/CustomExternalWrapperObject.h"
  485. #endif
  486. #include "Library/JavascriptProxy.h"
  487. #if ENABLE_TTD
  488. #include "screrror.h"
  489. #include "Debug/TTRuntimeInfoTracker.h"
  490. #include "Debug/TTExecutionInfo.h"
  491. #include "Debug/TTInflateMap.h"
  492. #include "Debug/TTSnapTypes.h"
  493. #include "Debug/TTSnapValues.h"
  494. #include "Debug/TTSnapObjects.h"
  495. #include "Debug/TTSnapshot.h"
  496. #include "Debug/TTSnapshotExtractor.h"
  497. #include "Debug/TTEvents.h"
  498. #include "Debug/TTActionEvents.h"
  499. #include "Debug/TTEventLog.h"
  500. #endif
  501. #include "Library/JavascriptGeneratorFunction.h"
  502. #include "Library/JavascriptAsyncFunction.h"
  503. #include "Library/JavascriptAsyncGeneratorFunction.h"
  504. #include "../WasmReader/WasmReader.h"
  505. #include "Language/AsmJsTypes.h"
  506. #include "Language/AsmJsModule.h"
  507. #include "Language/AsmJs.h"
  508. #include "Core/JitHelperUtils.h"
  509. //
  510. // .inl files
  511. //
  512. #include "CommonInl.h"
  513. #include "Language/JavascriptConversion.inl"
  514. #include "Types/RecyclableObject.inl"
  515. #include "Types/DynamicObject.inl"
  516. #include "Library/JavascriptArray.inl"
  517. #include "Library/SparseArraySegment.inl"
  518. #include "Library/JavascriptNumber.inl"
  519. #include "Library/JavascriptLibrary.inl"
  520. #include "Language/InlineCache.inl"
  521. #include "Language/InlineCachePointerArray.inl"
  522. #include "Language/JavascriptOperators.inl"
  523. #include "Language/TaggedInt.inl"
  524. #ifndef USED_IN_STATIC_LIB
  525. #ifdef ENABLE_INTL_OBJECT
  526. #ifdef INTL_WINGLOB
  527. //The "helper" methods below are to resolve external symbol references to our delay-loaded libraries.
  528. inline HRESULT WindowsCreateString(_In_reads_opt_(length) const WCHAR * sourceString, UINT32 length, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING * string)
  529. {
  530. return ThreadContext::GetContextForCurrentThread()->GetWindowsGlobalizationLibrary()->WindowsCreateString(sourceString, length, string);
  531. }
  532. inline HRESULT WindowsCreateStringReference(_In_reads_opt_(length + 1) const WCHAR * sourceString, UINT32 length, _Out_ HSTRING_HEADER * header, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING * string)
  533. {
  534. return ThreadContext::GetContextForCurrentThread()->GetWindowsGlobalizationLibrary()->WindowsCreateStringReference(sourceString, length, header, string);
  535. }
  536. inline HRESULT WindowsDeleteString(_In_opt_ HSTRING string)
  537. {
  538. return ThreadContext::GetContextForCurrentThread()->GetWindowsGlobalizationLibrary()->WindowsDeleteString(string);
  539. }
  540. inline PCWSTR WindowsGetStringRawBuffer(_In_opt_ HSTRING string, _Out_opt_ UINT32 * length)
  541. {
  542. return ThreadContext::GetContextForCurrentThread()->GetWindowsGlobalizationLibrary()->WindowsGetStringRawBuffer(string, length);
  543. }
  544. inline HRESULT WindowsCompareStringOrdinal(_In_opt_ HSTRING string1, _In_opt_ HSTRING string2, _Out_ INT32 * result)
  545. {
  546. return ThreadContext::GetContextForCurrentThread()->GetWindowsGlobalizationLibrary()->WindowsCompareStringOrdinal(string1, string2, result);
  547. }
  548. inline HRESULT WindowsDuplicateString(_In_opt_ HSTRING original, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING *newString)
  549. {
  550. return ThreadContext::GetContextForCurrentThread()->GetWindowsGlobalizationLibrary()->WindowsDuplicateString(original, newString);
  551. }
  552. #endif // INTL_WINGLOB
  553. #endif // ENABLE_INTL_OBJECT
  554. #endif // #ifndef USED_IN_STATIC_LIB