IntlEngineInterfaceExtensionObject.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. #ifdef ENABLE_INTL_OBJECT
  7. namespace Js
  8. {
  9. enum IntlInitializationType : USHORT
  10. {
  11. Intl = 0,
  12. StringPrototype,
  13. DatePrototype,
  14. NumberPrototype,
  15. Classifier
  16. };
  17. class IntlEngineInterfaceExtensionObject : public EngineExtensionObjectBase
  18. {
  19. public:
  20. IntlEngineInterfaceExtensionObject(ScriptContext* scriptContext);
  21. void Initialize();
  22. void InjectIntlLibraryCode(_In_ ScriptContext * scriptContext, DynamicObject* intlObject, IntlInitializationType intlInitializationType);
  23. JavascriptFunction* GetDateToLocaleString() { return dateToLocaleString; }
  24. JavascriptFunction* GetDateToLocaleTimeString() { return dateToLocaleTimeString; }
  25. JavascriptFunction* GetDateToLocaleDateString() { return dateToLocaleDateString; }
  26. JavascriptFunction* GetNumberToLocaleString() { return numberToLocaleString; }
  27. JavascriptFunction* GetStringLocaleCompare() { return stringLocaleCompare; }
  28. static void __cdecl InitializeIntlNativeInterfaces(DynamicObject* intlNativeInterfaces, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
  29. #if DBG
  30. void DumpByteCode() override;
  31. #endif
  32. class EntryInfo
  33. {
  34. public:
  35. static NoProfileFunctionInfo Intl_RaiseAssert;
  36. static NoProfileFunctionInfo Intl_IsWellFormedLanguageTag;
  37. static NoProfileFunctionInfo Intl_NormalizeLanguageTag;
  38. static NoProfileFunctionInfo Intl_ResolveLocaleLookup;
  39. static NoProfileFunctionInfo Intl_ResolveLocaleBestFit;
  40. static NoProfileFunctionInfo Intl_GetDefaultLocale;
  41. static NoProfileFunctionInfo Intl_GetExtensions;
  42. static NoProfileFunctionInfo Intl_CompareString;
  43. static NoProfileFunctionInfo Intl_CurrencyDigits;
  44. static NoProfileFunctionInfo Intl_FormatNumber;
  45. static NoProfileFunctionInfo Intl_CacheNumberFormat;
  46. static NoProfileFunctionInfo Intl_CreateDateTimeFormat;
  47. static NoProfileFunctionInfo Intl_BestFitFormatter;
  48. static NoProfileFunctionInfo Intl_LookupMatcher;
  49. static NoProfileFunctionInfo Intl_FormatDateTime;
  50. static NoProfileFunctionInfo Intl_ValidateAndCanonicalizeTimeZone;
  51. static NoProfileFunctionInfo Intl_GetDefaultTimeZone;
  52. static NoProfileFunctionInfo Intl_GetPatternForLocale;
  53. static NoProfileFunctionInfo Intl_RegisterBuiltInFunction;
  54. static NoProfileFunctionInfo Intl_GetHiddenObject;
  55. static NoProfileFunctionInfo Intl_SetHiddenObject;
  56. static NoProfileFunctionInfo Intl_BuiltIn_SetPrototype;
  57. static NoProfileFunctionInfo Intl_BuiltIn_GetArrayLength;
  58. static NoProfileFunctionInfo Intl_BuiltIn_RegexMatch;
  59. static NoProfileFunctionInfo Intl_BuiltIn_CallInstanceFunction;
  60. };
  61. static Var EntryIntl_RaiseAssert(RecyclableObject* function, CallInfo callInfo, ...);
  62. static Var EntryIntl_IsWellFormedLanguageTag(RecyclableObject* function, CallInfo callInfo, ...);
  63. static Var EntryIntl_NormalizeLanguageTag(RecyclableObject* function, CallInfo callInfo, ...);
  64. static Var EntryIntl_ResolveLocaleLookup(RecyclableObject* function, CallInfo callInfo, ...);
  65. static Var EntryIntl_ResolveLocaleBestFit(RecyclableObject* function, CallInfo callInfo, ...);
  66. static Var EntryIntl_GetDefaultLocale(RecyclableObject* function, CallInfo callInfo, ...);
  67. static Var EntryIntl_GetExtensions(RecyclableObject* function, CallInfo callInfo, ...);
  68. static Var EntryIntl_CompareString(RecyclableObject* function, CallInfo callInfo, ...);
  69. static Var EntryIntl_CurrencyDigits(RecyclableObject* function, CallInfo callInfo, ...);
  70. static Var EntryIntl_FormatNumber(RecyclableObject* function, CallInfo callInfo, ...);
  71. static Var EntryIntl_CacheNumberFormat(RecyclableObject* function, CallInfo callInfo, ...);
  72. static Var EntryIntl_CreateDateTimeFormat(RecyclableObject* function, CallInfo callInfo, ...);
  73. static Var EntryIntl_FormatDateTime(RecyclableObject* function, CallInfo callInfo, ...);
  74. static Var EntryIntl_ValidateAndCanonicalizeTimeZone(RecyclableObject* function, CallInfo callInfo, ...);
  75. static Var EntryIntl_GetDefaultTimeZone(RecyclableObject* function, CallInfo callInfo, ...);
  76. static Var EntryIntl_RegisterBuiltInFunction(RecyclableObject* function, CallInfo callInfo, ...);
  77. static Var EntryIntl_GetHiddenObject(RecyclableObject* function, CallInfo callInfo, ...);
  78. static Var EntryIntl_SetHiddenObject(RecyclableObject* function, CallInfo callInfo, ...);
  79. static Var EntryIntl_BuiltIn_SetPrototype(RecyclableObject *function, CallInfo callInfo, ...);
  80. static Var EntryIntl_BuiltIn_GetArrayLength(RecyclableObject *function, CallInfo callInfo, ...);
  81. static Var EntryIntl_BuiltIn_RegexMatch(RecyclableObject *function, CallInfo callInfo, ...);
  82. static Var EntryIntl_BuiltIn_CallInstanceFunction(RecyclableObject *function, CallInfo callInfo, ...);
  83. private:
  84. JavascriptFunction* dateToLocaleString;
  85. JavascriptFunction* dateToLocaleTimeString;
  86. JavascriptFunction* dateToLocaleDateString;
  87. JavascriptFunction* numberToLocaleString;
  88. JavascriptFunction* stringLocaleCompare;
  89. DynamicObject* intlNativeInterfaces;
  90. FunctionBody* intlByteCode;
  91. bool wasInitialized;
  92. void EnsureIntlByteCode(_In_ ScriptContext * scriptContext);
  93. static void deletePrototypePropertyHelper(ScriptContext* scriptContext, DynamicObject* intlObject, Js::PropertyId objectPropertyId, Js::PropertyId getterFunctionId);
  94. static WindowsGlobalizationAdapter* GetWindowsGlobalizationAdapter(_In_ ScriptContext*);
  95. static void prepareWithFractionIntegerDigits(ScriptContext* scriptContext, Windows::Globalization::NumberFormatting::INumberRounderOption* rounderOptions,
  96. Windows::Globalization::NumberFormatting::INumberFormatterOptions* formatterOptions, uint16 minFractionDigits, uint16 maxFractionDigits, uint16 minIntegerDigits);
  97. static void prepareWithSignificantDigits(ScriptContext* scriptContext, Windows::Globalization::NumberFormatting::INumberRounderOption* rounderOptions, Windows::Globalization::NumberFormatting::INumberFormatter *numberFormatter,
  98. Windows::Globalization::NumberFormatting::INumberFormatterOptions* formatterOptions, uint16 minSignificantDigits, uint16 maxSignificantDigits);
  99. void cleanUpIntl(ScriptContext* scriptContext, DynamicObject* intlObject);
  100. };
  101. }
  102. #endif