Browse Source

Merge branch 'master' into users/leish/wb3merge

# Conflicts:
#	lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h
#	lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h
#	lib/Runtime/Library/IteratorObjectEnumerator.cpp
#	lib/Runtime/Library/IteratorObjectEnumerator.h
Lei Shi 9 năm trước cách đây
mục cha
commit
f63759b145
85 tập tin đã thay đổi với 1226 bổ sung993 xóa
  1. 5 6
      bin/External/catch.hpp
  2. 13 13
      bin/NativeTests/JsRTApiTest.cpp
  3. 6 1
      bin/ch/CMakeLists.txt
  4. 70 39
      bin/ch/Helpers.cpp
  5. 1 1
      bin/ch/ch.cpp
  6. 0 6
      bin/ch/stdafx.h
  7. 1 0
      lib/Backend/FlowGraph.cpp
  8. 13 0
      lib/Backend/Inline.cpp
  9. 1 0
      lib/Backend/JnHelperMethodList.h
  10. 5 0
      lib/Backend/Lower.cpp
  11. 1 0
      lib/Backend/LowerMDShared.cpp
  12. 1 0
      lib/Backend/arm/LowerMD.cpp
  13. 6 2
      lib/Common/Codex/Utf8Codex.cpp
  14. 0 1
      lib/Common/Common.h
  15. 1 3
      lib/Common/CommonPal.h
  16. 0 1
      lib/Common/Exceptions/Chakra.Common.Exceptions.vcxproj
  17. 1 3
      lib/Common/Exceptions/Throw.cpp
  18. 32 7
      lib/Common/Exceptions/Throw.h
  19. 1 2
      lib/Common/Memory/PageAllocator.h
  20. 2 2
      lib/JITIDL/JITTypes.h
  21. 2 7
      lib/JITServer/JITServer.cpp
  22. 1 0
      lib/Jsrt/ChakraCommon.h
  23. 1 1
      lib/Jsrt/ChakraCommonWindows.h
  24. 1 1
      lib/Jsrt/ChakraDebug.h
  25. 34 34
      lib/Jsrt/Jsrt.cpp
  26. 1 1
      lib/Jsrt/JsrtDiag.cpp
  27. 3 2
      lib/Jsrt/JsrtHelper.cpp
  28. 5 5
      lib/Jsrt/JsrtSourceHolder.cpp
  29. 3 3
      lib/Jsrt/JsrtSourceHolder.h
  30. 5 1
      lib/Parser/HashFunc.cpp
  31. 1 16
      lib/Runtime/Base/FunctionBody.cpp
  32. 4 1
      lib/Runtime/Base/FunctionInfo.h
  33. 4 4
      lib/Runtime/Base/ittnotify_config.h
  34. 18 9
      lib/Runtime/ByteCode/ByteCodeEmitter.cpp
  35. 1 1
      lib/Runtime/ByteCode/ByteCodeGenerator.cpp
  36. 1 0
      lib/Runtime/ByteCode/OpCodes.h
  37. 2 0
      lib/Runtime/Debug/TTRuntmeInfoTracker.cpp
  38. 5 11
      lib/Runtime/Debug/TTSerialize.cpp
  39. 1 1
      lib/Runtime/Debug/TTSnapValues.cpp
  40. 1 0
      lib/Runtime/Language/CMakeLists.txt
  41. 1 0
      lib/Runtime/Language/InterpreterHandler.inl
  42. 5 0
      lib/Runtime/Language/InterpreterStackFrame.cpp
  43. 1 0
      lib/Runtime/Language/InterpreterStackFrame.h
  44. 12 1
      lib/Runtime/Language/JavascriptOperators.cpp
  45. 1 0
      lib/Runtime/Language/JavascriptOperators.h
  46. 45 0
      lib/Runtime/Language/arm/arm_Thunks.S
  47. 1 1
      lib/Runtime/Library/ArrayBuffer.cpp
  48. 17 32
      lib/Runtime/Library/DataView.cpp
  49. 2 32
      lib/Runtime/Library/GlobalObject.cpp
  50. 34 34
      lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h
  51. 34 34
      lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h
  52. 32 32
      lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.32b.h
  53. 32 32
      lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.64b.h
  54. 6 1
      lib/Runtime/Library/IteratorObjectEnumerator.cpp
  55. 2 0
      lib/Runtime/Library/IteratorObjectEnumerator.h
  56. 1 1
      lib/Runtime/Library/JavascriptArray.cpp
  57. 1 1
      lib/Runtime/Library/JavascriptFunction.cpp
  58. 7 5
      lib/Runtime/Library/JavascriptObject.cpp
  59. 1 1
      lib/Runtime/Library/JavascriptProxy.cpp
  60. 5 1
      lib/Runtime/Library/TypedArray.cpp
  61. 3 3
      lib/Runtime/PlatformAgnostic/Platform/Common/UnicodeText.Common.cpp
  62. 10 0
      lib/Runtime/Types/PathTypeHandler.cpp
  63. 22 165
      pal/inc/pal.h
  64. 1 9
      pal/inc/pal_mstypes.h
  65. 3 15
      pal/inc/safemath.h
  66. 33 32
      pal/src/cruntime/filecrt.cpp
  67. 21 14
      pal/src/include/pal/palinternal.h
  68. 52 46
      pal/src/include/pal/printfcpp.hpp
  69. 4 1
      pal/src/safecrt/mbusafecrt_internal.h
  70. 1 0
      test/Array/shift_unshift.baseline
  71. 8 1
      test/Array/shift_unshift.js
  72. 2 0
      test/Bugs/bug8554038.baseline
  73. 23 13
      test/Bugs/bug8554038.js
  74. 7 0
      test/Bugs/rlexe.xml
  75. 3 0
      test/Prototypes/ChangePrototype.baseline
  76. 23 1
      test/Prototypes/ChangePrototype.js
  77. 64 0
      test/es6/ES6Class_BaseClassConstruction.js
  78. 100 73
      test/es6/proxybug.js
  79. 54 0
      test/typedarray/TypedArrayBuiltins.js
  80. 112 112
      test/typedarray/dataview.baseline
  81. 1 2
      test/typedarray/dataview.js
  82. 4 0
      test/typedarray/dataview1.baseline
  83. 56 1
      test/typedarray/dataview1.js
  84. 112 112
      test/typedarray/samethread.baseline
  85. 13 0
      test/typedarray/transfer.js

+ 5 - 6
bin/External/catch.hpp

@@ -1571,8 +1571,8 @@ std::string toString( std::string const& value );
 std::string toString( std::wstring const& value );
 std::string toString( const char* const value );
 std::string toString( char* const value );
-std::string toString( const wchar_t* const value );
-std::string toString( wchar_t* const value );
+std::string toString( const WCHAR* const value );
+std::string toString( WCHAR* const value );
 std::string toString( int value );
 std::string toString( unsigned long value );
 std::string toString( unsigned int value );
@@ -8095,14 +8095,14 @@ std::string toString( char* const value ) {
     return Catch::toString( static_cast<const char*>( value ) );
 }
 
-std::string toString( const wchar_t* const value )
+std::string toString( const WCHAR* const value )
 {
 	return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" );
 }
 
-std::string toString( wchar_t* const value )
+std::string toString( WCHAR* const value )
 {
-	return Catch::toString( static_cast<const wchar_t*>( value ) );
+	return Catch::toString( static_cast<const WCHAR*>( value ) );
 }
 
 std::string toString( int value ) {
@@ -10506,4 +10506,3 @@ int main (int argc, char * const argv[]) {
 using Catch::Detail::Approx;
 
 #endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
-

+ 13 - 13
bin/NativeTests/JsRTApiTest.cpp

@@ -108,7 +108,7 @@ namespace JsRTApiTest
         REQUIRE(JsCreateObject(&object) == JsNoError);
 
         JsPropertyIdRef name1 = JS_INVALID_REFERENCE;
-        const wchar_t* name = nullptr;
+        const WCHAR* name = nullptr;
         REQUIRE(JsGetPropertyIdFromName(_u("stringProperty1"), &name1) == JsNoError);
         REQUIRE(JsGetPropertyNameFromId(name1, &name) == JsNoError);
         CHECK(!wcscmp(name, _u("stringProperty1")));
@@ -582,7 +582,7 @@ namespace JsRTApiTest
     JsValueRef CALLBACK ExternalFunctionPreScriptAbortionCallback(JsValueRef /* function */, bool /* isConstructCall */, JsValueRef * args /* args */, USHORT /* cargs */, void * /* callbackState */)
     {
         JsValueRef result = JS_INVALID_REFERENCE;
-        const wchar_t *scriptText = nullptr;
+        const WCHAR *scriptText = nullptr;
         size_t scriptTextLen;
 
         REQUIRE(JsStringToPointer(args[0], &scriptText, &scriptTextLen) == JsNoError);
@@ -593,7 +593,7 @@ namespace JsRTApiTest
     JsValueRef CALLBACK ExternalFunctionPostScriptAbortionCallback(JsValueRef /* function */, bool /* isConstructCall */, JsValueRef * args /* args */, USHORT /* cargs */, void * /* callbackState */)
     {
         JsValueRef result = JS_INVALID_REFERENCE;
-        const wchar_t *scriptText = nullptr;
+        const WCHAR *scriptText = nullptr;
         size_t scriptTextLen;
 
         REQUIRE(JsStringToPointer(args[0], &scriptText, &scriptTextLen) == JsNoError);
@@ -656,7 +656,7 @@ namespace JsRTApiTest
         REQUIRE(JsCreateFunction(ExternalFunctionCallback, nullptr, &function) == JsNoError);
         testConstructorName(function, _u(""), 0);
 
-        wchar_t name[] = _u("FooName");
+        WCHAR name[] = _u("FooName");
         JsValueRef nameString = JS_INVALID_REFERENCE;
         REQUIRE(JsPointerToString(name, _countof(name) - 1, &nameString) == JsNoError);
         REQUIRE(JsCreateNamedFunction(nameString, ExternalFunctionCallback, nullptr, &function) == JsNoError);
@@ -688,7 +688,7 @@ namespace JsRTApiTest
 
         JsValueRef args[] = { GetUndefined() };
 
-        // throw from script, handle in host        
+        // throw from script, handle in host
         REQUIRE(JsGetPropertyIdFromName(_u("throwAtHost"), &name) == JsNoError);
         REQUIRE(JsGetProperty(global, name, &function) == JsNoError);
         REQUIRE(JsCallFunction(function, args, _countof(args), &result) == JsErrorScriptException);
@@ -701,12 +701,12 @@ namespace JsRTApiTest
         REQUIRE(JsGetPropertyIdFromName(_u("callHost"), &name) == JsNoError);
         REQUIRE(JsSetProperty(global, name, result, true) == JsNoError);
 
-        // throw from host callback, catch in script        
+        // throw from host callback, catch in script
         REQUIRE(JsGetPropertyIdFromName(_u("callHostWithTryCatch"), &name) == JsNoError);
         REQUIRE(JsGetProperty(global, name, &function) == JsNoError);
         REQUIRE(JsCallFunction(function, args, _countof(args), &result) == JsNoError);
 
-        // throw from host callback, through script, handle in host        
+        // throw from host callback, through script, handle in host
         REQUIRE(JsGetPropertyIdFromName(_u("callHostWithNoTryCatch"), &name) == JsNoError);
         REQUIRE(JsGetProperty(global, name, &function) == JsNoError);
         REQUIRE(JsCallFunction(function, args, _countof(args), &result) == JsErrorScriptException);
@@ -855,7 +855,7 @@ namespace JsRTApiTest
             JsValueRef nameValue = JS_INVALID_REFERENCE;
             REQUIRE(JsGetIndexedProperty(propertyNames, indexValue, &nameValue) == JsNoError);
 
-            const wchar_t *name = nullptr;
+            const WCHAR *name = nullptr;
             size_t length;
             REQUIRE(JsStringToPointer(nameValue, &name, &length) == JsNoError);
 
@@ -879,7 +879,7 @@ namespace JsRTApiTest
         JsPropertyIdRef propertyId = JS_INVALID_REFERENCE;
         JsValueRef outValue = JS_INVALID_REFERENCE;
         JsValueRef propertySymbols = JS_INVALID_REFERENCE;
-        const wchar_t* name = nullptr;
+        const WCHAR* name = nullptr;
         JsPropertyIdType propertyIdType;
 
         REQUIRE(JsCreateObject(&object) == JsNoError);
@@ -1003,7 +1003,7 @@ namespace JsRTApiTest
         bool boolValue;
         BYTE *compiledScript = nullptr;
         unsigned int scriptSize = 0;
-        const wchar_t *stringValue;
+        const WCHAR *stringValue;
         size_t stringLength;
         ByteCodeCallbackTracker tracker = {};
 
@@ -1030,7 +1030,7 @@ namespace JsRTApiTest
 
         tracker.script = script;
         REQUIRE(JsRunSerializedScriptWithCallback(
-            [](JsSourceContext sourceContext, const wchar_t** scriptBuffer)
+            [](JsSourceContext sourceContext, const WCHAR** scriptBuffer)
         {
             ((ByteCodeCallbackTracker*)sourceContext)->loadedScript = true;
             *scriptBuffer = ((ByteCodeCallbackTracker*)sourceContext)->script;
@@ -1079,7 +1079,7 @@ namespace JsRTApiTest
         REQUIRE(oldProtect == PAGE_READWRITE);
         tracker.script = scriptFnToString;
         REQUIRE(JsRunSerializedScriptWithCallback(
-            [](JsSourceContext sourceContext, const wchar_t** scriptBuffer)
+            [](JsSourceContext sourceContext, const WCHAR** scriptBuffer)
         {
             ((ByteCodeCallbackTracker*)sourceContext)->loadedScript = true;
             *scriptBuffer = ((ByteCodeCallbackTracker*)sourceContext)->script;
@@ -1619,7 +1619,7 @@ namespace JsRTApiTest
             REQUIRE(JsCreateFunction(ExternalFunctionPostScriptAbortionCallback, nullptr, &postScriptAbortFunction) == JsNoError);
             JsValueRef scriptTextArg = JS_INVALID_REFERENCE;
 
-            wchar_t *scriptText = const_cast<wchar_t *>(terminationTests[i]);
+            WCHAR *scriptText = const_cast<WCHAR *>(terminationTests[i]);
             REQUIRE(JsPointerToString(scriptText, wcslen(scriptText), &scriptTextArg) == JsNoError);
             JsValueRef args[] = { scriptTextArg };
 

+ 6 - 1
bin/ch/CMakeLists.txt

@@ -35,7 +35,12 @@ target_include_directories (ch
 if(STATIC_LIBRARY)
   if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
     set(LINKER_START_GROUP -pie -Wl,--start-group)
-    set(LINKER_END_GROUP -Wl,--end-group -static-libstdc++)
+    set(LINKER_END_GROUP -Wl,--end-group)
+    if (CC_TARGET_OS_LINUX) # do not embed libstdc++ statically on Android
+      set(LINKER_END_GROUP "${LINKER_END_GROUP} -static-libstdc++")
+    else()
+      set(LINKER_END_GROUP "${LINKER_END_GROUP} -llog")
+    endif()
   elseif(CC_TARGET_OS_OSX)
     set(LINKER_START_GROUP -Wl,-force_load,)
   endif()

+ 70 - 39
bin/ch/Helpers.cpp

@@ -35,36 +35,51 @@ void TTDHostInitFromUriBytes(TTDHostCharType* dst, const byte* uriBytes, size_t
     AssertMsg(wcslen(dst) == (uriBytesLength / sizeof(TTDHostCharType)), "We have an null in the uri or our math is wrong somewhere.");
 }
 
-void TTDHostAppend(TTDHostCharType* dst, const TTDHostCharType* src)
+void TTDHostAppend(TTDHostCharType* dst, size_t dstLength, const TTDHostCharType* src)
 {
-    size_t dpos = TTDHostStringLength(dst);
     size_t srcLength = TTDHostStringLength(src);
+    size_t dpos = TTDHostStringLength(dst);
+    Helpers::TTReportLastIOErrorAsNeeded(dpos < dstLength, "The end of the string already exceeds the buffer");
+
     size_t srcByteLength = srcLength * sizeof(TTDHostCharType);
+    size_t dstRemainingByteLength = (dstLength - dpos - 1) * sizeof(TTDHostCharType);
+    Helpers::TTReportLastIOErrorAsNeeded(srcByteLength <= dstRemainingByteLength, "The source string must be able to fit within the destination buffer");
 
-    memcpy_s(dst + dpos, srcByteLength, src, srcByteLength);
+    memcpy_s(dst + dpos, dstRemainingByteLength, src, srcByteLength);
     dst[dpos + srcLength] = _u('\0');
 }
 
-void TTDHostAppendWChar(TTDHostCharType* dst, const wchar* src)
+void TTDHostAppendWChar(TTDHostCharType* dst, size_t dstLength, const wchar* src)
 {
-    size_t dpos = TTDHostStringLength(dst);
     size_t srcLength = wcslen(src);
+    size_t dpos = TTDHostStringLength(dst);
+    Helpers::TTReportLastIOErrorAsNeeded(dpos < dstLength, "The end of the string already exceeds the buffer");
+
+    size_t dstRemainingLength = dstLength - dpos - 1;
+    Helpers::TTReportLastIOErrorAsNeeded(srcLength <= dstRemainingLength, "The source string must be able to fit within the destination buffer");
 
     for(size_t i = 0; i < srcLength; ++i)
     {
         dst[dpos + i] = (char16)src[i];
     }
+
     dst[dpos + srcLength] = _u('\0');
 }
 
-void TTDHostAppendAscii(TTDHostCharType* dst, const char* src)
+void TTDHostAppendAscii(TTDHostCharType* dst, size_t dstLength, const char* src)
 {
-    size_t dpos = TTDHostStringLength(dst);
     size_t srcLength = strlen(src);
+    size_t dpos = TTDHostStringLength(dst);
+    Helpers::TTReportLastIOErrorAsNeeded(dpos < dstLength, "The end of the string already exceeds the buffer");
+
+    size_t dstRemainingLength = dstLength - dpos - 1;
+    Helpers::TTReportLastIOErrorAsNeeded(srcLength <= dstRemainingLength, "The source string must be able to fit within the destination buffer");
+
     for(size_t i = 0; i < srcLength; ++i)
     {
         dst[dpos + i] = (char16)src[i];
     }
+
     dst[dpos + srcLength] = _u('\0');
 }
 
@@ -80,7 +95,7 @@ void TTDHostBuildCurrentExeDirectory(TTDHostCharType* path, size_t pathBufferLen
     }
     exePath[i + 1] = _u('\0');
 
-    TTDHostAppendWChar(path, exePath);
+    TTDHostAppendWChar(path, pathBufferLength, exePath);
 }
 
 JsTTDStreamHandle TTDHostOpen(const TTDHostCharType* path, bool isWrite)
@@ -91,8 +106,8 @@ JsTTDStreamHandle TTDHostOpen(const TTDHostCharType* path, bool isWrite)
     return (JsTTDStreamHandle)res;
 }
 
-#define TTDHostCWD(dst) _wgetcwd(dst, MAX_PATH)
-#define TTDDoPathInit(dst)
+#define TTDHostCWD(dst, dstLength) _wgetcwd(dst, dstLength)
+#define TTDDoPathInit(dst, dstLength)
 #define TTDHostTok(opath, TTDHostPathSeparator, context) wcstok_s(opath, TTDHostPathSeparator, context)
 #define TTDHostStat(cpath, statVal) _wstat(cpath, statVal)
 
@@ -148,30 +163,44 @@ void TTDHostInitFromUriBytes(TTDHostCharType* dst, const byte* uriBytes, size_t
     AssertMsg(TTDHostStringLength(dst) == (uriBytesLength / sizeof(TTDHostCharType)), "We have an null in the uri or our math is wrong somewhere.");
 }
 
-void TTDHostAppend(TTDHostCharType* dst, const TTDHostCharType* src)
+void TTDHostAppend(TTDHostCharType* dst, size_t dstLength, const TTDHostCharType* src)
 {
-    size_t dpos = TTDHostStringLength(dst);
     size_t srcLength = TTDHostStringLength(src);
+    size_t dpos = TTDHostStringLength(dst);
+    Helpers::TTReportLastIOErrorAsNeeded(dpos < dstLength, "The end of the string already exceeds the buffer");
+
     size_t srcByteLength = srcLength * sizeof(TTDHostCharType);
+    size_t dstRemainingByteLength = (dstLength - dpos - 1) * sizeof(TTDHostCharType);
+    Helpers::TTReportLastIOErrorAsNeeded(srcByteLength <= dstRemainingByteLength, "The source string must be able to fit within the destination buffer");
 
-    memcpy_s(dst + dpos, srcByteLength, src, srcByteLength);
+    memcpy_s(dst + dpos, dstRemainingByteLength, src, srcByteLength);
     dst[dpos + srcLength] = '\0';
 }
 
-void TTDHostAppendWChar(TTDHostCharType* dst, const wchar* src)
+void TTDHostAppendWChar(TTDHostCharType* dst, size_t dstLength, const wchar* src)
 {
-    size_t dpos = TTDHostStringLength(dst);
     size_t srcLength = wcslen(src);
+    size_t dpos = TTDHostStringLength(dst);
+    Helpers::TTReportLastIOErrorAsNeeded(dpos < dstLength, "The end of the string already exceeds the buffer");
+
+    size_t dstRemainingLength = dstLength - dpos - 1;
+    Helpers::TTReportLastIOErrorAsNeeded(srcLength <= dstRemainingLength, "The source string must be able to fit within the destination buffer");
+
+    // TODO - analyze this function further
     utf8::EncodeIntoAndNullTerminate(dst + dpos, src, srcLength);
 }
 
-void TTDHostAppendAscii(TTDHostCharType* dst, const char* src)
+void TTDHostAppendAscii(TTDHostCharType* dst, size_t dstLength, const char* src)
 {
-    size_t dpos = TTDHostStringLength(dst);
     size_t srcLength = strlen(src);
+    size_t dpos = TTDHostStringLength(dst);
+    Helpers::TTReportLastIOErrorAsNeeded(dpos < dstLength, "The end of the string already exceeds the buffer");
+
     size_t srcByteLength = srcLength * sizeof(TTDHostCharType);
+    size_t dstRemainingByteLength = (dstLength - dpos - 1) * sizeof(TTDHostCharType);
+    Helpers::TTReportLastIOErrorAsNeeded(srcByteLength <= dstRemainingByteLength, "The source string must be able to fit within the destination buffer");
 
-    memcpy_s(dst + dpos, srcByteLength, src, srcByteLength);
+    memcpy_s(dst + dpos, dstRemainingByteLength, src, srcByteLength);
     dst[dpos + srcLength] = '\0';
 }
 
@@ -192,9 +221,10 @@ void TTDHostBuildCurrentExeDirectory(TTDHostCharType* path, size_t pathBufferLen
     {
         --i;
     }
+
     exePath[i + 1] = '\0';
 
-    TTDHostAppend(path, exePath);
+    TTDHostAppend(path, pathBufferLength, exePath);
 }
 
 JsTTDStreamHandle TTDHostOpen(const TTDHostCharType* path, bool isWrite)
@@ -202,8 +232,8 @@ JsTTDStreamHandle TTDHostOpen(const TTDHostCharType* path, bool isWrite)
     return (JsTTDStreamHandle)fopen(TTDHostCharConvert(path), isWrite ? "w+b" : "r+b");
 }
 
-#define TTDHostCWD(dst) TTDHostUtf8CharConvert(getcwd(TTDHostCharConvert(dst), MAX_PATH))
-#define TTDDoPathInit(dst) TTDHostAppend(dst, TTDHostPathSeparator)
+#define TTDHostCWD(dst, dstLength) TTDHostUtf8CharConvert(getcwd(TTDHostCharConvert(dst), dstLength))
+#define TTDDoPathInit(dst, dstLength) TTDHostAppend(dst, dstLength, TTDHostPathSeparator)
 #define TTDHostTok(opath, TTDHostPathSeparator, context) TTDHostUtf8CharConvert(strtok(TTDHostCharConvert(opath), TTDHostCharConvert(TTDHostPathSeparator)))
 #define TTDHostStat(cpath, statVal) stat(TTDHostCharConvert(cpath), statVal)
 
@@ -504,6 +534,7 @@ Error:
 
     return hr;
 }
+
 void Helpers::TTReportLastIOErrorAsNeeded(BOOL ok, const char* msg)
 {
     if(!ok)
@@ -530,19 +561,19 @@ void Helpers::CreateDirectoryIfNeeded(size_t uriByteLength, const byte* uriBytes
 
     TTDHostCharType cpath[MAX_PATH];
     TTDHostInitEmpty(cpath);
-    TTDDoPathInit(cpath);
+    TTDDoPathInit(cpath, MAX_PATH);
 
     TTDHostStatType statVal;
     TTDHostCharType* context = nullptr;
     TTDHostCharType* token = TTDHostTok(opath, TTDHostPathSeparator, &context);
-    TTDHostAppend(cpath, token);
+    TTDHostAppend(cpath, MAX_PATH, token);
 
     //At least 1 part of the path must exist so iterate until we find it
     while(TTDHostStat(cpath, &statVal) == -1)
     {
         token = TTDHostTok(nullptr, TTDHostPathSeparator, &context);
-        TTDHostAppend(cpath, TTDHostPathSeparator);
-        TTDHostAppend(cpath, token);
+        TTDHostAppend(cpath, MAX_PATH, TTDHostPathSeparator);
+        TTDHostAppend(cpath, MAX_PATH, token);
     }
 
     //Now continue until we hit the part that doesn't exist (or the end of the path)
@@ -551,8 +582,8 @@ void Helpers::CreateDirectoryIfNeeded(size_t uriByteLength, const byte* uriBytes
         token = TTDHostTok(nullptr, TTDHostPathSeparator, &context);
         if(token != nullptr)
         {
-            TTDHostAppend(cpath, TTDHostPathSeparator);
-            TTDHostAppend(cpath, token);
+            TTDHostAppend(cpath, MAX_PATH, TTDHostPathSeparator);
+            TTDHostAppend(cpath, MAX_PATH, token);
         }
     }
 
@@ -569,8 +600,8 @@ void Helpers::CreateDirectoryIfNeeded(size_t uriByteLength, const byte* uriBytes
         token = TTDHostTok(nullptr, TTDHostPathSeparator, &context);
         if(token != nullptr)
         {
-            TTDHostAppend(cpath, TTDHostPathSeparator);
-            TTDHostAppend(cpath, token);
+            TTDHostAppend(cpath, MAX_PATH, TTDHostPathSeparator);
+            TTDHostAppend(cpath, MAX_PATH, token);
         }
     }
 }
@@ -582,7 +613,7 @@ void Helpers::CleanDirectory(size_t uriByteLength, const byte* uriBytes)
 
     TTDHostCharType strPattern[MAX_PATH];
     TTDHostInitFromUriBytes(strPattern, uriBytes, uriByteLength);
-    TTDHostAppendAscii(strPattern, "*.*");
+    TTDHostAppendAscii(strPattern, MAX_PATH, "*.*");
 
     hFile = TTDHostFindFirst(strPattern, &FileInformation);
     if(hFile != TTDHostFindInvalid)
@@ -593,7 +624,7 @@ void Helpers::CleanDirectory(size_t uriByteLength, const byte* uriBytes)
             {
                 TTDHostCharType strFilePath[MAX_PATH];
                 TTDHostInitFromUriBytes(strFilePath, uriBytes, uriByteLength);
-                TTDHostAppend(strFilePath, TTDHostDirInfoName(FileInformation));
+                TTDHostAppend(strFilePath, MAX_PATH, TTDHostDirInfoName(FileInformation));
 
                 // Set file attributes
                 int statusch = TTDHostCHMod(strFilePath, S_IREAD | S_IWRITE);
@@ -616,27 +647,27 @@ void Helpers::GetTTDDirectory(const wchar* curi, size_t* uriByteLength, byte* ur
 
     if(curi[0] != _u('~'))
     {
-        TTDHostCharType* status = TTDHostCWD(turi);
+        TTDHostCharType* status = TTDHostCWD(turi, MAX_PATH);
         Helpers::TTReportLastIOErrorAsNeeded(status != nullptr, "Failed to chmod directory");
 
-        TTDHostAppend(turi, TTDHostPathSeparator);
+        TTDHostAppend(turi, MAX_PATH, TTDHostPathSeparator);
 
-        TTDHostAppendWChar(turi, curi);
+        TTDHostAppendWChar(turi, MAX_PATH, curi);
     }
     else
     {
         TTDHostBuildCurrentExeDirectory(turi, MAX_PATH);
 
-        TTDHostAppendAscii(turi, "_ttdlog");
-        TTDHostAppend(turi, TTDHostPathSeparator);
+        TTDHostAppendAscii(turi, MAX_PATH, "_ttdlog");
+        TTDHostAppend(turi, MAX_PATH, TTDHostPathSeparator);
 
-        TTDHostAppendWChar(turi, curi + 1);
+        TTDHostAppendWChar(turi, MAX_PATH, curi + 1);
     }
 
     //add a path separator if one is not already present
     if(curi[wcslen(curi) - 1] != (wchar)TTDHostPathSeparatorChar)
     {
-        TTDHostAppend(turi, TTDHostPathSeparator);
+        TTDHostAppend(turi, MAX_PATH, TTDHostPathSeparator);
     }
 
     size_t turiLength = TTDHostStringLength(turi);
@@ -665,7 +696,7 @@ JsTTDStreamHandle CALLBACK Helpers::TTCreateStreamCallback(size_t uriByteLength,
     void* res = nullptr;
     TTDHostCharType path[MAX_PATH];
     TTDHostInitFromUriBytes(path, uriBytes, uriByteLength);
-    TTDHostAppendAscii(path, asciiResourceName);
+    TTDHostAppendAscii(path, MAX_PATH, asciiResourceName);
 
     res = TTDHostOpen(path, write);
     if(res == nullptr)

+ 1 - 1
bin/ch/ch.cpp

@@ -21,7 +21,7 @@ JsRuntimeHandle chRuntime = JS_INVALID_RUNTIME_HANDLE;
 
 BOOL doTTRecord = false;
 BOOL doTTDebug = false;
-byte ttUri[MAX_PATH * sizeof(wchar_t)];
+byte ttUri[MAX_PATH * sizeof(WCHAR)];
 size_t ttUriByteLength = 0;
 UINT32 snapInterval = MAXUINT32;
 UINT32 snapHistoryLength = MAXUINT32;

+ 0 - 6
bin/ch/stdafx.h

@@ -257,9 +257,3 @@ inline JsErrorCode CreatePropertyIdFromString(const char* str, JsPropertyIdRef *
 {
     return ChakraRTInterface::JsCreatePropertyId(str, strlen(str), Id);
 }
-
-#ifdef __ANDROID__
-#define S_IREAD   0000400
-#define S_IWRITE  0000200
-#define S_IEXEC   0000100
-#endif

+ 1 - 0
lib/Backend/FlowGraph.cpp

@@ -323,6 +323,7 @@ FlowGraph::RunPeeps()
         case Js::OpCode::BrFncCachedScopeNeq:
         case Js::OpCode::BrOnObject_A:
         case Js::OpCode::BrOnClassConstructor:
+        case Js::OpCode::BrOnBaseConstructorKind:
             if (tryUnsignedCmpPeep)
             {
                 this->UnsignedCmpPeep(instr);

+ 13 - 0
lib/Backend/Inline.cpp

@@ -2442,6 +2442,14 @@ IR::Instr * Inline::InlineApplyWithArgumentsObject(IR::Instr * callInstr, IR::In
     IR::Instr* builtInStartInstr;
     InsertInlineeBuiltInStartEndTags(callInstr, 3, &builtInStartInstr); //3 args (implicit this + explicit this + arguments = 3)
 
+    // Move argouts close to call. Globopt expects this for arguments object tracking.
+    IR::Instr* argInsertInstr = builtInStartInstr;
+    builtInStartInstr->IterateArgInstrs([&](IR::Instr* argInstr) {
+        argInstr->Move(argInsertInstr);
+        argInsertInstr = argInstr;
+        return false;
+    });
+
     IR::Instr *startCall = IR::Instr::New(Js::OpCode::StartCall, callInstr->m_func);
     startCall->SetDst(IR::RegOpnd::New(TyVar, callInstr->m_func));
     startCall->SetSrc1(IR::IntConstOpnd::New(2, TyInt32, callInstr->m_func)); //2 args (this pointer & ArgOut_A_From_StackArgs for this direct call to init
@@ -4667,6 +4675,11 @@ Inline::MapFormals(Func *inlinee,
             {
                 break;
             }
+            if (instr->m_func != inlinee)
+            {
+                // this can happen only when we are inlining a function which has inlined an apply call with the arguments object
+                formalCount = instr->m_func->GetJITFunctionBody()->GetInParamsCount();
+            }
 
             IR::Opnd *restDst = instr->GetDst();
 

+ 1 - 0
lib/Backend/JnHelperMethodList.h

@@ -44,6 +44,7 @@ HELPERCALL(ScrObj_OP_IsInst, Js::JavascriptOperators::OP_IsInst, AttrCanThrow)
 HELPERCALL(Op_IsIn, Js::JavascriptOperators::IsIn, AttrCanThrow)
 HELPERCALL(Op_IsObject, Js::JavascriptOperators::IsObject, AttrCanThrow)
 HELPERCALL(Op_IsClassConstructor, Js::JavascriptOperators::IsClassConstructor, AttrCanThrow)
+HELPERCALL(Op_IsBaseConstructorKind, Js::JavascriptOperators::IsBaseConstructorKind, AttrCanThrow)
 HELPERCALL(Op_LoadHeapArguments, Js::JavascriptOperators::LoadHeapArguments, 0)
 HELPERCALL(Op_LoadHeapArgsCached, Js::JavascriptOperators::LoadHeapArgsCached, 0)
 HELPERCALL(OP_InitCachedScope, Js::JavascriptOperators::OP_InitCachedScope, 0)

+ 5 - 0
lib/Backend/Lower.cpp

@@ -2183,6 +2183,10 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa
             }
             break;
 
+        case Js::OpCode::BrOnBaseConstructorKind:
+            this->LowerBrOnClassConstructor(instr, IR::HelperOp_IsBaseConstructorKind);
+            break;
+
         case Js::OpCode::BrOnClassConstructor:
             this->LowerBrOnClassConstructor(instr, IR::HelperOp_IsClassConstructor);
             break;
@@ -10720,6 +10724,7 @@ Lowerer::LowerArgIn(IR::Instr *instrArgIn)
         }
         else
         {
+            Assert(instrArgIn->m_func == this->m_func);
             IR::Instr * instrCount = m_lowererMD.LoadInputParamCount(instrArgIn, -this->m_func->GetInParamsCount());
             IR::Opnd * excessOpnd = instrCount->GetDst();
 

+ 1 - 0
lib/Backend/LowerMDShared.cpp

@@ -960,6 +960,7 @@ LowererMD::LowerCondBranch(IR::Instr * instr)
     case Js::OpCode::BrNotNull_A:
     case Js::OpCode::BrOnObject_A:
     case Js::OpCode::BrOnClassConstructor:
+    case Js::OpCode::BrOnBaseConstructorKind:
         Assert(!opndSrc1->IsFloat64());
         AssertMsg(instr->GetSrc2() == nullptr, "Expected 1 src on boolean branch");
         instrPrev = IR::Instr::New(Js::OpCode::TEST, this->m_func);

+ 1 - 0
lib/Backend/arm/LowerMD.cpp

@@ -2716,6 +2716,7 @@ LowererMD::LowerCondBranch(IR::Instr * instr)
         case Js::OpCode::BrNotNull_A:
         case Js::OpCode::BrOnObject_A:
         case Js::OpCode::BrOnClassConstructor:
+        case Js::OpCode::BrOnBaseConstructorKind:
             Assert(!opndSrc1->IsFloat64());
             AssertMsg(opndSrc1->IsRegOpnd(),"NYI for other operands");
             AssertMsg(instr->GetSrc2() == nullptr, "Expected 1 src on boolean branch");

+ 6 - 2
lib/Common/Codex/Utf8Codex.cpp

@@ -397,7 +397,9 @@ LFastPath:
 LSlowPath:
         while (cch-- > 0)
         {
-            *buffer++ = Decode(ptr, ptr + 4, localOptions); // WARNING: Assume cch correct, suppress end-of-buffer checking
+            LPCUTF8 end = ptr + cch + 1; // WARNING: Assume cch correct, suppress end-of-buffer checking
+
+            *buffer++ = Decode(ptr, end, localOptions);
             if (ShouldFastPath(ptr, buffer)) goto LFastPath;
         }
     }
@@ -466,7 +468,9 @@ LSlowPath:
         DecodeOptions localOptions = options;
         while (cch-- > 0)
         {
-            if (*pch++ != utf8::Decode(bch, bch + 4, localOptions)) // WARNING: Assume cch correct, suppress end-of-buffer checking
+            LPCUTF8 end = bch + cch + 1; // WARNING: Assume cch correct, suppress end-of-buffer checking
+
+            if (*pch++ != utf8::Decode(bch, end, localOptions))
                 return false;
         }
         return true;

+ 0 - 1
lib/Common/Common.h

@@ -74,7 +74,6 @@ template<> struct IntMath<int64> { using Type = Int64Math; };
 
 // Exceptions
 #include "Exceptions/ExceptionBase.h"
-#include "Exceptions/InternalErrorException.h"
 #include "Exceptions/JavascriptException.h"
 #include "Exceptions/OutOfMemoryException.h"
 #include "Exceptions/OperationAbortedException.h"

+ 1 - 3
lib/Common/CommonPal.h

@@ -70,8 +70,6 @@
 #undef Yield /* winbase.h defines this but we want to use it for Js::OpCode::Yield; it is Win16 legacy, no harm undef'ing it */
 #pragma warning(pop)
 
-typedef wchar_t char16;
-
 // xplat-todo: get a better name for this macro
 #define _u(s) L##s
 #define INIT_PRIORITY(x)
@@ -636,7 +634,7 @@ void TryFinally(const TryFunc& tryFunc, const FinallyFunc& finallyFunc)
 #else
 #define __TRY_FINALLY_BEGIN __try
 #define __FINALLY   __finally
-#define __TRY_FINALLY_END 
+#define __TRY_FINALLY_END
 #endif
 
 namespace PlatformAgnostic

+ 0 - 1
lib/Common/Exceptions/Chakra.Common.Exceptions.vcxproj

@@ -45,7 +45,6 @@
     <ClInclude Include="EvalDisabledException.h" />
     <ClInclude Include="ExceptionBase.h" />
     <ClInclude Include="ExceptionCheck.h" />
-    <ClInclude Include="InternalErrorException.h" />
     <ClInclude Include="JavascriptException.h" />
     <ClInclude Include="NotImplementedException.h" />
     <ClInclude Include="OperationAbortedException.h" />

+ 1 - 3
lib/Common/Exceptions/Throw.cpp

@@ -15,7 +15,6 @@
 
 #include "StackOverflowException.h"
 #include "AsmJsParseException.h"
-#include "InternalErrorException.h"
 #include "OutOfMemoryException.h"
 #include "NotImplementedException.h"
 
@@ -85,8 +84,7 @@ namespace Js {
 
     void Throw::InternalError()
     {
-        AssertMsg(false, "Internal error!!");
-        throw InternalErrorException();
+        AssertOrFailFastMsg(false, "Internal error!!");
     }
 
     void Throw::OutOfMemory()

+ 32 - 7
lib/Common/Exceptions/Throw.h

@@ -110,10 +110,6 @@ namespace Js {
 
 #define END_TRANSLATE_KNOWN_EXCEPTION_TO_HRESULT(hr) \
     } \
-    catch (Js::InternalErrorException)   \
-    {   \
-        hr = E_FAIL;    \
-    }   \
     catch (Js::OutOfMemoryException) \
     {   \
         hr = E_OUTOFMEMORY; \
@@ -135,14 +131,43 @@ namespace Js {
         hr = JSERR_AsmJsCompileError; \
     }
 
+// This should be the inverse of END_TRANSLATE_KNOWN_EXCEPTION_TO_HRESULT, and catch all the same cases.
+#define THROW_KNOWN_HRESULT_EXCEPTIONS(hr, scriptContext) \
+    if (hr == E_OUTOFMEMORY) \
+    { \
+        JavascriptError::ThrowOutOfMemoryError(scriptContext); \
+    } \
+    else if (hr == VBSERR_OutOfStack) \
+    { \
+        JavascriptError::ThrowStackOverflowError(scriptContext); \
+    } \
+    else if (hr == E_NOTIMPL) \
+    { \
+        throw Js::NotImplementedException(); \
+    } \
+    else if (hr == E_ABORT) \
+    { \
+        throw Js::ScriptAbortException(); \
+    } \
+    else if (hr == JSERR_AsmJsCompileError) \
+    { \
+        throw Js::AsmJsParseException(); \
+    } \
+    else if (FAILED(hr)) \
+    { \
+        /* Intended to be the inverse of E_FAIL in CATCH_UNHANDLED_EXCEPTION */ \
+        AssertOrFailFast(false); \
+    }
+
 #define CATCH_UNHANDLED_EXCEPTION(hr) \
     catch (...) \
-    {   \
-        AssertMsg(FALSE, "invalid exception thrown and didn't get handled");    \
-        hr = E_FAIL;    \
+    { \
+        AssertOrFailFastMsg(FALSE, "invalid exception thrown and didn't get handled"); \
+        hr = E_FAIL; /* Suppress C4701 */ \
     } \
     }
 
+
 #define END_TRANSLATE_EXCEPTION_TO_HRESULT(hr) \
     END_TRANSLATE_KNOWN_EXCEPTION_TO_HRESULT(hr)\
     CATCH_UNHANDLED_EXCEPTION(hr)

+ 1 - 2
lib/Common/Memory/PageAllocator.h

@@ -5,7 +5,6 @@
 #pragma once
 #include "PageAllocatorDefines.h"
 #include "Exceptions/ExceptionBase.h"
-#include "Exceptions/InternalErrorException.h"
 
 #ifdef PROFILE_MEM
 struct PageMemoryData;
@@ -406,7 +405,7 @@ public:
         if (MemOpLastError == 0)
         {
             MemOpLastError = GetLastError();
-            throw Js::InternalErrorException();
+            AssertOrFailFast(false);
         }
 #endif
     }

+ 2 - 2
lib/JITIDL/JITTypes.h

@@ -456,7 +456,7 @@ typedef struct PropertyIdArrayIDL
 
 typedef struct JavascriptStringIDL
 {
-    IDL_DEF([size_is(m_charLength + 1)]) wchar_t* m_pszValue;
+    IDL_DEF([size_is(m_charLength + 1)]) WCHAR* m_pszValue;
     unsigned int m_charLength;
 } JavascriptStringIDL;
 
@@ -574,7 +574,7 @@ typedef struct FunctionBodyDataIDL
 
     IDL_DEF([size_is(referencedPropertyIdCount)]) int * referencedPropertyIdMap;
 
-    IDL_DEF([size_is(nameLength)]) wchar_t * displayName;
+    IDL_DEF([size_is(nameLength)]) WCHAR * displayName;
 
     IDL_DEF([size_is(literalRegexCount)]) CHAKRA_PTR * literalRegexes;
 

+ 2 - 7
lib/JITServer/JITServer.cpp

@@ -834,17 +834,12 @@ HRESULT ServerCallWrapper(ServerThreadContext* threadContextInfo, Fn fn)
     {
         hr = E_ABORT;
     }
-    catch (Js::InternalErrorException)
-    {
-        hr = E_FAIL;
-    }
     catch (...)
     {
-        AssertMsg(false, "Unknown exception caught in JIT server call.");
-        hr = E_FAIL;
+        AssertOrFailFastMsg(false, "Unknown exception caught in JIT server call.");
     }
 
-    if (hr == E_OUTOFMEMORY || hr == E_FAIL)
+    if (hr == E_OUTOFMEMORY)
     {
         if (HRESULT_FROM_WIN32(MemoryOperationLastError::GetLastError()) != S_OK)
         {

+ 1 - 0
lib/Jsrt/ChakraCommon.h

@@ -87,6 +87,7 @@ typedef void* HANDLE;
 typedef unsigned char BYTE;
 typedef BYTE byte;
 typedef UINT32 DWORD;
+typedef unsigned short WCHAR;
 #endif
 
 #endif //  defined(_WIN32) && defined(_MSC_VER)

+ 1 - 1
lib/Jsrt/ChakraCommonWindows.h

@@ -20,7 +20,7 @@
     /// <returns>
     ///     true if the operation succeeded, false otherwise.
     /// </returns>
-    typedef bool (CHAKRA_CALLBACK * JsSerializedScriptLoadSourceCallback)(_In_ JsSourceContext sourceContext, _Outptr_result_z_ const wchar_t** scriptBuffer);
+    typedef bool (CHAKRA_CALLBACK * JsSerializedScriptLoadSourceCallback)(_In_ JsSourceContext sourceContext, _Outptr_result_z_ const WCHAR** scriptBuffer);
 
     /// <summary>
     ///     Parses a script and returns a function representing the script.

+ 1 - 1
lib/Jsrt/ChakraDebug.h

@@ -591,7 +591,7 @@ typedef unsigned __int32 uint32_t;
     /// </remarks>
     CHAKRA_API
         JsDiagEvaluate(
-            _In_z_ const wchar_t *expression,
+            _In_z_ const WCHAR *expression,
             _In_ unsigned int stackFrameIndex,
             _Out_ JsValueRef *evalResult);
 

+ 34 - 34
lib/Jsrt/Jsrt.cpp

@@ -1149,7 +1149,7 @@ CHAKRA_API JsGetStringLength(_In_ JsValueRef value, _Out_ int *length)
     END_JSRT_NO_EXCEPTION
 }
 
-CHAKRA_API JsPointerToString(_In_reads_(stringLength) const wchar_t *stringValue, _In_ size_t stringLength, _Out_ JsValueRef *string)
+CHAKRA_API JsPointerToString(_In_reads_(stringLength) const WCHAR *stringValue, _In_ size_t stringLength, _Out_ JsValueRef *string)
 {
     return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode {
         PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTCreateString, stringValue, stringLength);
@@ -1173,7 +1173,7 @@ CHAKRA_API JsPointerToString(_In_reads_(stringLength) const wchar_t *stringValue
 // TODO: The annotation of stringPtr is wrong.  Need to fix definition in chakrart.h
 // The warning is '*stringPtr' could be '0' : this does not adhere to the specification for the function 'JsStringToPointer'.
 #pragma warning(suppress:6387)
-CHAKRA_API JsStringToPointer(_In_ JsValueRef stringValue, _Outptr_result_buffer_(*stringLength) const wchar_t **stringPtr, _Out_ size_t *stringLength)
+CHAKRA_API JsStringToPointer(_In_ JsValueRef stringValue, _Outptr_result_buffer_(*stringLength) const WCHAR **stringPtr, _Out_ size_t *stringLength)
 {
     VALIDATE_JSREF(stringValue);
     PARAM_NOT_NULL(stringPtr);
@@ -2704,7 +2704,7 @@ CHAKRA_API JsIsRuntimeExecutionDisabled(_In_ JsRuntimeHandle runtimeHandle, _Out
     return JsNoError;
 }
 
-CHAKRA_API JsGetPropertyIdFromName(_In_z_ const wchar_t *name, _Out_ JsPropertyIdRef *propertyId)
+CHAKRA_API JsGetPropertyIdFromName(_In_z_ const WCHAR *name, _Out_ JsPropertyIdRef *propertyId)
 {
     return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext * scriptContext) -> JsErrorCode {
         PARAM_NOT_NULL(name);
@@ -2767,7 +2767,7 @@ CHAKRA_API JsGetSymbolFromPropertyId(_In_ JsPropertyIdRef propertyId, _Out_ JsVa
 }
 
 #pragma prefast(suppress:6101, "Prefast doesn't see through the lambda")
-CHAKRA_API JsGetPropertyNameFromId(_In_ JsPropertyIdRef propertyId, _Outptr_result_z_ const wchar_t **name)
+CHAKRA_API JsGetPropertyNameFromId(_In_ JsPropertyIdRef propertyId, _Outptr_result_z_ const WCHAR **name)
 {
     return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode {
         VALIDATE_INCOMING_PROPERTYID(propertyId);
@@ -2868,7 +2868,7 @@ CHAKRA_API JsSetPromiseContinuationCallback(_In_ JsPromiseContinuationCallback p
 
 JsErrorCode RunScriptCore(JsValueRef scriptSource, const byte *script, size_t cb,
     LoadScriptFlag loadScriptFlag, JsSourceContext sourceContext,
-    const wchar_t *sourceUrl, bool parseOnly, JsParseScriptAttributes parseAttributes,
+    const WCHAR *sourceUrl, bool parseOnly, JsParseScriptAttributes parseAttributes,
     bool isSourceModule, JsValueRef *result)
 {
     Js::JavascriptFunction *scriptFunction;
@@ -2886,7 +2886,7 @@ JsErrorCode RunScriptCore(JsValueRef scriptSource, const byte *script, size_t cb
         }
 
         const int chsize = (loadScriptFlag & LoadScriptFlag_Utf8Source) ?
-                            sizeof(utf8char_t) : sizeof(wchar_t);
+                            sizeof(utf8char_t) : sizeof(WCHAR);
 
         SRCINFO si = {
             /* sourceContextInfo   */ sourceContextInfo,
@@ -3045,28 +3045,28 @@ JsErrorCode RunScriptCore(const char *script, JsSourceContext sourceContext,
         isSourceModule, result);
 }
 
-JsErrorCode RunScriptCore(const wchar_t *script, JsSourceContext sourceContext,
-    const wchar_t *sourceUrl, bool parseOnly, JsParseScriptAttributes parseAttributes,
+JsErrorCode RunScriptCore(const WCHAR *script, JsSourceContext sourceContext,
+    const WCHAR *sourceUrl, bool parseOnly, JsParseScriptAttributes parseAttributes,
     bool isSourceModule, JsValueRef *result)
 {
     return RunScriptCore(nullptr, reinterpret_cast<const byte*>(script),
-        wcslen(script) * sizeof(wchar_t),
+        wcslen(script) * sizeof(WCHAR),
         LoadScriptFlag_None, sourceContext, sourceUrl, parseOnly,
         parseAttributes, isSourceModule, result);
 }
 
 #ifdef _WIN32
-CHAKRA_API JsParseScript(_In_z_ const wchar_t * script, _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl, _Out_ JsValueRef * result)
+CHAKRA_API JsParseScript(_In_z_ const WCHAR * script, _In_ JsSourceContext sourceContext,
+    _In_z_ const WCHAR *sourceUrl, _Out_ JsValueRef * result)
 {
     return RunScriptCore(script, sourceContext, sourceUrl, true,
         JsParseScriptAttributeNone, false /*isModule*/, result);
 }
 
 CHAKRA_API JsParseScriptWithAttributes(
-    _In_z_ const wchar_t *script,
+    _In_z_ const WCHAR *script,
     _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl,
+    _In_z_ const WCHAR *sourceUrl,
     _In_ JsParseScriptAttributes parseAttributes,
     _Out_ JsValueRef *result)
 {
@@ -3074,15 +3074,15 @@ CHAKRA_API JsParseScriptWithAttributes(
         parseAttributes, false /*isModule*/, result);
 }
 
-CHAKRA_API JsRunScript(_In_z_ const wchar_t * script, _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl, _Out_ JsValueRef * result)
+CHAKRA_API JsRunScript(_In_z_ const WCHAR * script, _In_ JsSourceContext sourceContext,
+    _In_z_ const WCHAR *sourceUrl, _Out_ JsValueRef * result)
 {
     return RunScriptCore(script, sourceContext, sourceUrl, false,
         JsParseScriptAttributeNone, false /*isModule*/, result);
 }
 
-CHAKRA_API JsExperimentalApiRunModule(_In_z_ const wchar_t * script,
-    _In_ JsSourceContext sourceContext, _In_z_ const wchar_t *sourceUrl,
+CHAKRA_API JsExperimentalApiRunModule(_In_z_ const WCHAR * script,
+    _In_ JsSourceContext sourceContext, _In_z_ const WCHAR *sourceUrl,
     _Out_ JsValueRef * result)
 {
     return RunScriptCore(script, sourceContext, sourceUrl, false,
@@ -3115,7 +3115,7 @@ JsErrorCode JsSerializeScriptCore(const byte *script, size_t cb,
         SourceContextInfo * sourceContextInfo = scriptContext->GetSourceContextInfo(JS_SOURCE_CONTEXT_NONE, nullptr);
         Assert(sourceContextInfo != nullptr);
 
-        const int chsize = (loadScriptFlag & LoadScriptFlag_Utf8Source) ? sizeof(utf8char_t) : sizeof(wchar_t);
+        const int chsize = (loadScriptFlag & LoadScriptFlag_Utf8Source) ? sizeof(utf8char_t) : sizeof(WCHAR);
         SRCINFO si = {
             /* sourceContextInfo   */ sourceContextInfo,
             /* dlnHost             */ 0,
@@ -3200,11 +3200,11 @@ JsErrorCode JsSerializeScriptCore(const byte *script, size_t cb,
     });
 }
 
-CHAKRA_API JsSerializeScript(_In_z_ const wchar_t *script, _Out_writes_to_opt_(*bufferSize,
+CHAKRA_API JsSerializeScript(_In_z_ const WCHAR *script, _Out_writes_to_opt_(*bufferSize,
     *bufferSize) unsigned char *buffer,
     _Inout_ unsigned int *bufferSize)
 {
-    return JsSerializeScriptCore((const byte*)script, wcslen(script) * sizeof(wchar_t),
+    return JsSerializeScriptCore((const byte*)script, wcslen(script) * sizeof(WCHAR),
         LoadScriptFlag_None, nullptr, 0, buffer, bufferSize, nullptr);
 }
 
@@ -3213,7 +3213,7 @@ JsErrorCode RunSerializedScriptCore(
     TLoadCallback scriptLoadCallback, TUnloadCallback scriptUnloadCallback,
     JsSourceContext scriptLoadSourceContext, // only used by scriptLoadCallback
     unsigned char *buffer, JsValueRef bufferVal,
-    JsSourceContext sourceContext, const wchar_t *sourceUrl,
+    JsSourceContext sourceContext, const WCHAR *sourceUrl,
     bool parseOnly, JsValueRef *result)
 {
     Js::JavascriptFunction *function;
@@ -3312,16 +3312,16 @@ static void CHAKRA_CALLBACK DummyScriptUnloadCallback(_In_ JsSourceContext sourc
 }
 
 #ifdef _WIN32
-static bool CHAKRA_CALLBACK DummyScriptLoadSourceCallback(_In_ JsSourceContext sourceContext, _Outptr_result_z_ const wchar_t** scriptBuffer)
+static bool CHAKRA_CALLBACK DummyScriptLoadSourceCallback(_In_ JsSourceContext sourceContext, _Outptr_result_z_ const WCHAR** scriptBuffer)
 {
     // sourceContext is actually the script source pointer
-    *scriptBuffer = reinterpret_cast<const wchar_t*>(sourceContext);
+    *scriptBuffer = reinterpret_cast<const WCHAR*>(sourceContext);
     return true;
 }
 
-CHAKRA_API JsParseSerializedScript(_In_z_ const wchar_t * script, _In_ unsigned char *buffer,
+CHAKRA_API JsParseSerializedScript(_In_z_ const WCHAR * script, _In_ unsigned char *buffer,
     _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl,
+    _In_z_ const WCHAR *sourceUrl,
     _Out_ JsValueRef * result)
 {
     return RunSerializedScriptCore(
@@ -3330,9 +3330,9 @@ CHAKRA_API JsParseSerializedScript(_In_z_ const wchar_t * script, _In_ unsigned
         buffer, nullptr, sourceContext, sourceUrl, true, result);
 }
 
-CHAKRA_API JsRunSerializedScript(_In_z_ const wchar_t * script, _In_ unsigned char *buffer,
+CHAKRA_API JsRunSerializedScript(_In_z_ const WCHAR * script, _In_ unsigned char *buffer,
     _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl,
+    _In_z_ const WCHAR *sourceUrl,
     _Out_ JsValueRef * result)
 {
     return RunSerializedScriptCore(
@@ -3344,7 +3344,7 @@ CHAKRA_API JsRunSerializedScript(_In_z_ const wchar_t * script, _In_ unsigned ch
 CHAKRA_API JsParseSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSourceCallback scriptLoadCallback,
     _In_ JsSerializedScriptUnloadCallback scriptUnloadCallback,
     _In_ unsigned char *buffer, _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl, _Out_ JsValueRef * result)
+    _In_z_ const WCHAR *sourceUrl, _Out_ JsValueRef * result)
 {
     return RunSerializedScriptCore(
         scriptLoadCallback, scriptUnloadCallback,
@@ -3355,7 +3355,7 @@ CHAKRA_API JsParseSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSource
 CHAKRA_API JsRunSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSourceCallback scriptLoadCallback,
     _In_ JsSerializedScriptUnloadCallback scriptUnloadCallback,
     _In_ unsigned char *buffer, _In_ JsSourceContext sourceContext,
-    _In_z_ const wchar_t *sourceUrl, _Out_opt_ JsValueRef * result)
+    _In_z_ const WCHAR *sourceUrl, _Out_opt_ JsValueRef * result)
 {
     return RunSerializedScriptCore(
         scriptLoadCallback, scriptUnloadCallback,
@@ -4241,7 +4241,7 @@ _ALWAYSINLINE JsErrorCode CompileRun(
     LoadScriptFlag scriptFlag = LoadScriptFlag_None;
     const byte* script;
     size_t cb;
-    const wchar_t *url;
+    const WCHAR *url;
 
     if (isExternalArray)
     {
@@ -4268,8 +4268,8 @@ _ALWAYSINLINE JsErrorCode CompileRun(
             Js::JavascriptString* jsString = Js::JavascriptString::FromVar(scriptVal);
             script = (const byte*)jsString->GetSz();
 
-            // JavascriptString is 2 bytes (wchar_t/char16)
-            cb = jsString->GetLength() * sizeof(wchar_t);
+            // JavascriptString is 2 bytes (WCHAR/char16)
+            cb = jsString->GetLength() * sizeof(WCHAR);
         }
 
         if (!Js::JavascriptString::Is(sourceUrl))
@@ -4451,7 +4451,7 @@ CHAKRA_API JsParseSerialized(
     PARAM_NOT_NULL(bufferVal);
     PARAM_NOT_NULL(sourceUrl);
 
-    const wchar_t *url;
+    const WCHAR *url;
 
     if (Js::JavascriptString::Is(sourceUrl))
     {
@@ -4484,7 +4484,7 @@ CHAKRA_API JsRunSerialized(
     _Out_ JsValueRef *result)
 {
     PARAM_NOT_NULL(bufferVal);
-    const wchar_t *url;
+    const WCHAR *url;
 
     if (sourceUrl && Js::JavascriptString::Is(sourceUrl))
     {

+ 1 - 1
lib/Jsrt/JsrtDiag.cpp

@@ -670,7 +670,7 @@ CHAKRA_API JsDiagGetObjectFromHandle(
 }
 
 CHAKRA_API JsDiagEvaluate(
-    _In_z_ const wchar_t *expression,
+    _In_z_ const WCHAR *expression,
     _In_ unsigned int stackFrameIndex,
     _Out_ JsValueRef *evalResult)
 {

+ 3 - 2
lib/Jsrt/JsrtHelper.cpp

@@ -3,11 +3,12 @@
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
 
-#if !defined(_WIN32)
+#include "JsrtPch.h"
+
+#ifndef _WIN32
 #include <pthread.h>
 #endif
 
-#include "JsrtPch.h"
 #include "jsrtHelper.h"
 #include "Base/ThreadContextTlsEntry.h"
 

+ 5 - 5
lib/Jsrt/JsrtSourceHolder.cpp

@@ -17,14 +17,14 @@ namespace Js
     class JsrtSourceHolderPolicy<JsSerializedScriptLoadSourceCallback>
     {
     public:
-        typedef wchar_t TLoadCharType;
+        typedef WCHAR TLoadCharType;
 
         // Helper function for converting a Unicode script to utf8.
         // If heapAlloc is true the returned buffer must be freed with HeapDelete.
         // Otherwise scriptContext must be provided and GCed object is
         // returned.
         static void ScriptToUtf8(_When_(heapAlloc, _In_opt_) _When_(!heapAlloc, _In_) Js::ScriptContext *scriptContext,
-            _In_z_ const wchar_t *script, _Outptr_result_buffer_(*utf8Length) utf8char_t **utf8Script, _Out_ size_t *utf8Length,
+            _In_z_ const WCHAR *script, _Outptr_result_buffer_(*utf8Length) utf8char_t **utf8Script, _Out_ size_t *utf8Length,
             _Out_ size_t *scriptLength, _Out_opt_ size_t *utf8AllocLength, _In_ bool heapAlloc)
         {
             Assert(utf8Script != nullptr);
@@ -81,7 +81,7 @@ namespace Js
 #endif  // _WIN32
 
     template <typename TLoadCallback, typename TUnloadCallback>
-    void JsrtSourceHolder<TLoadCallback, TUnloadCallback>::EnsureSource(MapRequestFor requestedFor, const wchar_t* reasonString)
+    void JsrtSourceHolder<TLoadCallback, TUnloadCallback>::EnsureSource(MapRequestFor requestedFor, const WCHAR* reasonString)
     {
         if (this->mappedSource != nullptr)
         {
@@ -164,7 +164,7 @@ namespace Js
             }
             else
             {
-                const wchar_t *script = (const wchar_t*) script_;
+                const WCHAR *script = (const WCHAR*) script_;
                 Assert(utf8Script != nullptr);
                 Assert(utf8Length != nullptr);
                 Assert(scriptLength != nullptr);
@@ -225,7 +225,7 @@ namespace Js
     template <>
     void JsrtSourceHolder<JsSerializedLoadScriptCallback,
         JsSerializedScriptUnloadCallback>::EnsureSource(MapRequestFor requestedFor,
-        const wchar_t* reasonString)
+        const WCHAR* reasonString)
     {
         if (this->mappedSource != nullptr)
         {

+ 3 - 3
lib/Jsrt/JsrtSourceHolder.h

@@ -40,7 +40,7 @@ namespace Js
             return mappedSourceByteLength;
         };
 
-        void EnsureSource(MapRequestFor requestedFor, const wchar_t* reasonString);
+        void EnsureSource(MapRequestFor requestedFor, const WCHAR* reasonString);
 
     public:
         JsrtSourceHolder(_In_ TLoadCallback scriptLoadCallback,
@@ -73,13 +73,13 @@ namespace Js
         }
 
         // Following two methods are calls to EnsureSource before attempting to get the source
-        virtual LPCUTF8 GetSource(const wchar_t* reasonString) override
+        virtual LPCUTF8 GetSource(const WCHAR* reasonString) override
         {
             this->EnsureSource(MapRequestFor::Source, reasonString);
             return this->GetMappedSource();
         }
 
-        virtual size_t GetByteLength(const wchar_t* reasonString) override
+        virtual size_t GetByteLength(const WCHAR* reasonString) override
         {
             this->EnsureSource(MapRequestFor::Length, reasonString);
             return this->GetMappedSourceLength();

+ 5 - 1
lib/Parser/HashFunc.cpp

@@ -31,7 +31,11 @@ ULONG CaseSensitiveComputeHashCch(LPCUTF8 prgch, int32 cch)
     ULONG luHash = 0;
 
     while (cch-- > 0)
-        luHash = 17 * luHash + utf8::Decode(prgch, prgch + 4, options); // WARNING: Assume cch correct, suppress end-of-buffer checking
+    {
+        LPCUTF8 end = prgch + cch + 1; // WARNING: Assume cch correct, suppress end-of-buffer checking
+
+        luHash = 17 * luHash + utf8::Decode(prgch, end, options);
+    }
     return luHash;
 }
 

+ 1 - 16
lib/Runtime/Base/FunctionBody.cpp

@@ -2355,22 +2355,7 @@ namespace Js
             }
             END_LEAVE_SCRIPT_INTERNAL(m_scriptContext);
 
-            if (hr == E_OUTOFMEMORY)
-            {
-                JavascriptError::ThrowOutOfMemoryError(m_scriptContext);
-            }
-            else if(hr == VBSERR_OutOfStack)
-            {
-                JavascriptError::ThrowStackOverflowError(m_scriptContext);
-            }
-            else if(hr == E_ABORT)
-            {
-                throw Js::ScriptAbortException();
-            }
-            else if(FAILED(hr))
-            {
-                throw Js::InternalErrorException();
-            }
+            THROW_KNOWN_HRESULT_EXCEPTIONS(hr, m_scriptContext);
 
             Assert(hr == NO_ERROR);
 

+ 4 - 1
lib/Runtime/Base/FunctionInfo.h

@@ -39,7 +39,8 @@ namespace Js
             Module                         = 0x20000, // The function is the function body wrapper for a module
             EnclosedByGlobalFunc           = 0x40000,
             CanDefer                       = 0x80000,
-            AllowDirectSuper               = 0x100000
+            AllowDirectSuper               = 0x100000,
+            BaseConstructorKind            = 0x200000
         };
         FunctionInfo(JavascriptMethod entryPoint, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = nullptr);
         FunctionInfo(JavascriptMethod entryPoint, _no_write_barrier_tag, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = nullptr);
@@ -132,6 +133,8 @@ namespace Js
         bool GetEnclosedByGlobalFunc() const { return (attributes & Attributes::EnclosedByGlobalFunc) != 0; }
         void SetAllowDirectSuper() { attributes = (Attributes)(attributes | Attributes::AllowDirectSuper); }
         bool GetAllowDirectSuper() const { return (attributes & Attributes::AllowDirectSuper) != 0; }
+        void SetBaseConstructorKind() { attributes = (Attributes)(attributes | Attributes::BaseConstructorKind); }
+        bool GetBaseConstructorKind() const { return (attributes & Attributes::BaseConstructorKind) != 0; }
 
     protected:
         FieldNoBarrier(JavascriptMethod) originalEntryPoint;

+ 4 - 4
lib/Runtime/Base/ittnotify_config.h

@@ -69,7 +69,7 @@
 #include <stddef.h>
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 // 4/29/2016 disable warning 4995 on deprecated _tccpy, wcsncpy, wcsncat, wcstok funcs in tchar.h
-#pragma warning( disable : 4995 )   
+#pragma warning( disable : 4995 )
 #include <tchar.h>
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #include <stdint.h>
@@ -333,7 +333,7 @@ typedef struct ___itt_thread_info
 {
     const char* nameA; /*!< Copy of original name in ASCII. */
 #if defined(UNICODE) || defined(_UNICODE)
-    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
+    const WCHAR* nameW; /*!< Copy of original name in UNICODE. */
 #else  /* UNICODE || _UNICODE */
     void* nameW;
 #endif /* UNICODE || _UNICODE */
@@ -367,13 +367,13 @@ typedef struct __itt_counter_info
 {
     const char* nameA;  /*!< Copy of original name in ASCII. */
 #if defined(UNICODE) || defined(_UNICODE)
-    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
+    const WCHAR* nameW; /*!< Copy of original name in UNICODE. */
 #else  /* UNICODE || _UNICODE */
     void* nameW;
 #endif /* UNICODE || _UNICODE */
     const char* domainA;  /*!< Copy of original name in ASCII. */
 #if defined(UNICODE) || defined(_UNICODE)
-    const wchar_t* domainW; /*!< Copy of original name in UNICODE. */
+    const WCHAR* domainW; /*!< Copy of original name in UNICODE. */
 #else  /* UNICODE || _UNICODE */
     void* domainW;
 #endif /* UNICODE || _UNICODE */

+ 18 - 9
lib/Runtime/ByteCode/ByteCodeEmitter.cpp

@@ -2113,16 +2113,31 @@ void ByteCodeGenerator::LoadThisObject(FuncInfo *funcInfo, bool thisLoadedFromPa
 {
     if (this->scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled() && funcInfo->IsClassConstructor())
     {
-        // Derived class constructors initialize 'this' to be Undecl
+        // Derived class constructors initialize 'this' to be Undecl except "extends null" cases
         //   - we'll check this value during a super call and during 'this' access
-        // Base class constructors initialize 'this' to a new object using new.target
+        //
+        // Base class constructors or "extends null" cases initialize 'this' to a new object using new.target
         if (funcInfo->IsBaseClassConstructor())
         {
             EmitBaseClassConstructorThisObject(funcInfo);
         }
         else
         {
-            this->m_writer.Reg1(Js::OpCode::InitUndecl, funcInfo->thisPointerRegister);
+            Js::ByteCodeLabel thisLabel = this->Writer()->DefineLabel();
+            Js::ByteCodeLabel skipLabel = this->Writer()->DefineLabel();
+
+            Js::RegSlot tmpReg = funcInfo->AcquireTmpRegister();
+            this->Writer()->Reg1(Js::OpCode::LdFuncObj, tmpReg);
+            this->Writer()->BrReg1(Js::OpCode::BrOnBaseConstructorKind, thisLabel, tmpReg);  // branch when [[ConstructorKind]]=="base"
+            funcInfo->ReleaseTmpRegister(tmpReg);
+
+            this->m_writer.Reg1(Js::OpCode::InitUndecl, funcInfo->thisPointerRegister);  // not "extends null" case
+            this->Writer()->Br(Js::OpCode::Br, skipLabel);
+
+            this->Writer()->MarkLabel(thisLabel);
+            EmitBaseClassConstructorThisObject(funcInfo);  // "extends null" case
+
+            this->Writer()->MarkLabel(skipLabel);
         }
     }
     else if (!funcInfo->IsGlobalFunction() || (this->flags & fscrEval))
@@ -2411,12 +2426,6 @@ void ByteCodeGenerator::EmitClassConstructorEndCode(FuncInfo *funcInfo)
         EmitScopeSlotLoadThis(funcInfo, funcInfo->thisPointerRegister);
         this->Writer()->Reg2(Js::OpCode::Ld_A, ByteCodeGenerator::ReturnRegister, funcInfo->thisPointerRegister);
     }
-    else
-    {
-        // This is the case where we don't have any references to this or super in the constructor or any nested lambda functions.
-        // We know 'this' must be undecl so let's just emit the ReferenceError as part of the fallthrough.
-        EmitUseBeforeDeclarationRuntimeError(this, ByteCodeGenerator::ReturnRegister);
-    }
 }
 
 void ByteCodeGenerator::EmitBaseClassConstructorThisObject(FuncInfo *funcInfo)

+ 1 - 1
lib/Runtime/ByteCode/ByteCodeGenerator.cpp

@@ -2973,10 +2973,10 @@ FuncInfo* PostVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerat
             top->AssignUndefinedConstRegister();
 
             top->AssignNewTargetRegister();
+            top->AssignThisRegister();
 
             if (top->GetCallsEval() || top->GetChildCallsEval())
             {
-                top->AssignThisRegister();
                 top->SetIsThisLexicallyCaptured();
                 top->SetIsNewTargetLexicallyCaptured();
                 top->SetIsSuperLexicallyCaptured();

+ 1 - 0
lib/Runtime/ByteCode/OpCodes.h

@@ -318,6 +318,7 @@ MACRO_EXTEND_WMS(       InitClassMemberGet,         ElementC,       OpSideEffect
 MACRO_EXTEND_WMS(       InitClassMemberSetComputedName,ElementI,    OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut)                  // Class member in set syntax with computed property name
 MACRO_EXTEND_WMS(       InitClassMemberGetComputedName,ElementI,    OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut)                  // Class member in get syntax with computed property name
 MACRO_EXTEND_WMS(       BrOnClassConstructor,       BrReg1,         None)               // Branch if argument is a class constructor
+MACRO_EXTEND_WMS(       BrOnBaseConstructorKind,    BrReg1,         None)               // Branch if argument's [[ConstructorKind]] is 'base'
 
 MACRO_BACKEND_ONLY(     ArgIn_A,                    Empty,          None)       // Copy from "in slot" to "local slot", unchecked
 MACRO_WMS(              ArgIn0,                     Reg1,           OpByteCodeOnly)     // Copy from "in slot" to "local slot", unchecked

+ 2 - 0
lib/Runtime/Debug/TTRuntmeInfoTracker.cpp

@@ -697,6 +697,8 @@ namespace TTD
         this->EnqueueRootPathObject(_u("_stackTraceAccessor"), ctx->GetLibrary()->GetStackTraceAccessorFunction());
         this->EnqueueRootPathObject(_u("_throwTypeErrorRestrictedPropertyAccessor"), ctx->GetLibrary()->GetThrowTypeErrorRestrictedPropertyAccessorFunction());
 
+        this->EnqueueRootPathObject(_u("_arrayIteratorPrototype"), ctx->GetLibrary()->GetArrayIteratorPrototype());
+
         uint32 counter = 0;
         while(!this->m_worklist.Empty())
         {

+ 5 - 11
lib/Runtime/Debug/TTSerialize.cpp

@@ -872,6 +872,9 @@ namespace TTD
             charList.Add(c);
         }
 
+        // Null-terminate the list before we try to use the buffer as a string.
+        charList.Add(_u('\0'));
+
         bool likelyint; //we don't care about this just want to know that it is convertable to a number
         const char16* end;
         const char16* start = charList.GetBuffer();
@@ -963,8 +966,8 @@ namespace TTD
             return NSTokens::ParseTokenKind::Error;
         }
 
-        //convert this number to get the length of the string (not including "")
-        charList.Add(_u('\0'));
+        // Convert this number to get the length of the string (not including ""),
+        // charList is already null-terminated by the call to ScanNumber.
         uint32 length = (uint32)this->ReadUIntFromCharArray(charList.GetBuffer());
 
         //read the lead "\""
@@ -1226,7 +1229,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::Number, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0'));
         uint64 uval = this->ReadUIntFromCharArray(this->m_charListOpt.GetBuffer());
         TTDAssert(uval <= BYTE_MAX, "Error in parse.");
 
@@ -1250,7 +1252,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::Number, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0'));
         int64 ival = this->ReadIntFromCharArray(this->m_charListOpt.GetBuffer());
         TTDAssert(INT32_MIN <= ival && ival <= INT32_MAX, "Error in parse.");
 
@@ -1264,7 +1265,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::Number, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0'));
         uint64 uval = this->ReadUIntFromCharArray(this->m_charListOpt.GetBuffer());
         TTDAssert(uval <= UINT32_MAX, "Error in parse.");
 
@@ -1278,7 +1278,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::Number, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0'));
         return this->ReadIntFromCharArray(this->m_charListOpt.GetBuffer());
     }
 
@@ -1289,7 +1288,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::Number, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0'));
         return this->ReadUIntFromCharArray(this->m_charListOpt.GetBuffer());
     }
 
@@ -1324,7 +1322,6 @@ namespace TTD
         {
             TTDAssert(tok == NSTokens::ParseTokenKind::Number, "Error in parse.");
 
-            this->m_charListOpt.Add(_u('\0'));
             res = this->ReadDoubleFromCharArray(this->m_charListOpt.GetBuffer());
 
             break;
@@ -1341,7 +1338,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::Address, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0')); //add terminator
         return (TTD_PTR_ID)this->ReadUIntFromCharArray(this->m_charListOpt.GetBuffer());
     }
 
@@ -1352,7 +1348,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::LogTag, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0')); //add terminator
         return (TTD_LOG_PTR_ID)this->ReadUIntFromCharArray(this->m_charListOpt.GetBuffer());
     }
 
@@ -1363,7 +1358,6 @@ namespace TTD
         NSTokens::ParseTokenKind tok = this->Scan(this->m_charListOpt);
         TTDAssert(tok == NSTokens::ParseTokenKind::EnumTag, "Error in parse.");
 
-        this->m_charListOpt.Add(_u('\0')); //add terminator
         uint64 tval = this->ReadUIntFromCharArray(this->m_charListOpt.GetBuffer());
         TTDAssert(tval <= UINT32_MAX, "Error in parse.");
 

+ 1 - 1
lib/Runtime/Debug/TTSnapValues.cpp

@@ -561,7 +561,7 @@ namespace TTD
                     compareMap.DiagnosticAssert((!!v1->u_boolValue) == (!!v2->u_boolValue));
                     break;
                 case Js::TypeIds_Number:
-                    compareMap.DiagnosticAssert(v1->u_doubleValue == v2->u_doubleValue); //This may be problematic wrt. precise FP values
+                    compareMap.DiagnosticAssert(CheckSnapEquivTTDDouble(v1->u_doubleValue, v2->u_doubleValue));
                     break;
                 case Js::TypeIds_Int64Number:
                     compareMap.DiagnosticAssert(v1->u_int64Value == v2->u_int64Value);

+ 1 - 0
lib/Runtime/Language/CMakeLists.txt

@@ -80,6 +80,7 @@ elseif(CC_TARGETS_X86)
 elseif(CC_TARGETS_ARM)
     set (CRL_SOURCE_FILES ${CRL_SOURCE_FILES}
         arm/StackFrame.cpp
+        arm/arm_Thunks.S
     )
 endif()
 

+ 1 - 0
lib/Runtime/Language/InterpreterHandler.inl

@@ -219,6 +219,7 @@ EXDEF3_WMS(CUSTOM,                  InitClassMemberGetComputedName, OP_InitClass
 EXDEF3_WMS(CUSTOM,                  InitClassMemberGet,         OP_InitClassMemberGet, ElementC)
 EXDEF3_WMS(CUSTOM,                  InitClassMemberSetComputedName, OP_InitClassMemberSetComputedName, ElementI)
 EXDEF2_WMS(BRB,                     BrOnClassConstructor,       OP_BrOnClassConstructor)
+EXDEF2_WMS(BRB,                     BrOnBaseConstructorKind,    OP_BrOnBaseConstructorKind)
   DEF3_WMS(GET_ELEM_LOCALSLOTNonVar,LdLocalSlot,                OP_LdSlot, ElementSlotI1)
 EXDEF3_WMS(GET_ELEM_PARAMSLOTNonVar,LdParamSlot,                OP_LdSlot, ElementSlotI1)
   DEF3_WMS(GET_ELEM_INNERSLOTNonVar,LdInnerSlot,                OP_LdInnerSlot, ElementSlotI2)

+ 5 - 0
lib/Runtime/Language/InterpreterStackFrame.cpp

@@ -8212,6 +8212,11 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip)
         return JavascriptOperators::IsClassConstructor(aValue);
     }
 
+    BOOL InterpreterStackFrame::OP_BrOnBaseConstructorKind(Var aValue)
+    {
+        return JavascriptOperators::IsBaseConstructorKind(aValue);
+    }
+
     template<class T>
     void InterpreterStackFrame::OP_LdLen(const unaligned T * const playout)
     {

+ 1 - 0
lib/Runtime/Language/InterpreterStackFrame.h

@@ -423,6 +423,7 @@ namespace Js
         BOOL OP_BrOnNoProperty(Var argInstance, uint propertyIdIndex, ScriptContext* scriptContext);
         BOOL OP_BrOnNoEnvProperty(Var envInstance, int32 slotIndex, uint propertyIdIndex, ScriptContext* scriptContext);
         BOOL OP_BrOnClassConstructor(Var aValue);
+        BOOL OP_BrOnBaseConstructorKind(Var aValue);
 
         RecyclableObject * OP_CallGetFunc(Var target);
 

+ 12 - 1
lib/Runtime/Language/JavascriptOperators.cpp

@@ -1176,7 +1176,7 @@ CommonNumber:
                 {
                     if (propertyDescriptor.IsEnumerable())
                     {
-                        proxyResultToReturn->DirectSetItemAt(index++, element);
+                        proxyResultToReturn->DirectSetItemAt(index++, CrossSite::MarshalVar(scriptContext, element));
                     }
                 }
             }
@@ -6651,6 +6651,11 @@ CommonNumber:
         return JavascriptFunction::Is(instance) && (JavascriptFunction::FromVar(instance)->GetFunctionInfo()->IsClassConstructor() || !JavascriptFunction::FromVar(instance)->IsScriptFunction());
     }
 
+    BOOL JavascriptOperators::IsBaseConstructorKind(Var instance)
+    {
+        return JavascriptFunction::Is(instance) && (JavascriptFunction::FromVar(instance)->GetFunctionInfo()->GetBaseConstructorKind());
+    }
+
     void JavascriptOperators::OP_InitGetter(Var object, PropertyId propertyId, Var getter)
     {
         AssertMsg(!TaggedNumber::Is(object), "GetMember on a non-object?");
@@ -7042,6 +7047,12 @@ CommonNumber:
 
                     ctorProtoObj->EnsureProperty(Js::PropertyIds::constructor);
                     ctorProtoObj->SetEnumerable(Js::PropertyIds::constructor, FALSE);
+
+                    if (ScriptFunctionBase::Is(constructor))
+                    {
+                        ScriptFunctionBase::FromVar(constructor)->GetFunctionInfo()->SetBaseConstructorKind();
+                    }
+
                     break;
                 }
 

+ 1 - 0
lib/Runtime/Language/JavascriptOperators.h

@@ -220,6 +220,7 @@ namespace Js
         static BOOL IsUndefinedObject(Var instance, JavascriptLibrary* library);
         static BOOL IsAnyNumberValue(Var instance);
         static BOOL IsClassConstructor(Var instance);
+        static BOOL IsBaseConstructorKind(Var instance);
 
         static bool CanShortcutOnUnknownPropertyName(RecyclableObject * instance);
         static bool CanShortcutInstanceOnUnknownPropertyName(RecyclableObject *instance);

+ 45 - 0
lib/Runtime/Language/arm/arm_Thunks.S

@@ -0,0 +1,45 @@
+// -------------------------------------------------------------------------------------------------------
+// Copyright (C) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
+// -------------------------------------------------------------------------------------------------------
+
+#include "unixasmmacros.inc"
+
+.syntax unified
+.thumb
+
+.global C_FUNC(_ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz)
+.global C_FUNC(_ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz)
+
+NESTED_ENTRY _ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler
+
+    PROLOG_PUSH {r0-r3}
+    PROLOG_PUSH {r11}
+    PROLOG_PUSH {lr}      // save volatile registers
+
+    mov  r0, sp           // Pass the address of the function at the saved r0 in case it need to be boxed
+    bl   C_FUNC(_ZN2Js13ScriptContext24ProfileModeDeferredParseEPPNS_14ScriptFunctionE)
+    mov  r12, r0          // back up entry point
+
+    EPILOG_POP {lr}
+    EPILOG_POP {r11}
+    EPILOG_POP {r0-r3}   // restore arguments and return address
+
+    bx   r12             // jump (tail call) to new entryPoint
+NESTED_END _ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT
+
+
+NESTED_ENTRY _ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler
+    PROLOG_PUSH {r0-r3}
+    PROLOG_PUSH {r11}
+    PROLOG_PUSH {lr}     // save volatile registers
+
+    bl C_FUNC(_ZN2Js13ScriptContext30ProfileModeDeferredDeserializeEPNS_14ScriptFunctionE)
+    mov  r12, r0         // backup entry point
+
+    EPILOG_POP {lr}
+    EPILOG_POP {r11}
+    EPILOG_POP {r0-r3}   // restore arguments and return address
+
+    bx   r12             // jump (tail call) to new entryPoint
+NESTED_END _ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT

+ 1 - 1
lib/Runtime/Library/ArrayBuffer.cpp

@@ -211,7 +211,7 @@ namespace Js
         uint32 byteLength = 0;
         if (args.Info.Count > 1)
         {
-            byteLength = ToIndex(args[1], JSERR_ArrayLengthConstructIncorrect, scriptContext, MaxArrayBufferLength, false);
+            byteLength = ToIndex(args[1], JSERR_ArrayLengthConstructIncorrect, scriptContext, MaxArrayBufferLength);
         }
 
         RecyclableObject* newArr = scriptContext->GetLibrary()->CreateArrayBuffer(byteLength);

+ 17 - 32
lib/Runtime/Library/DataView.cpp

@@ -24,7 +24,6 @@ namespace Js
         uint32 byteLength = 0;
         uint32 mappedLength;
         int32 offset = 0;
-        double numberOffset = 0;
         ArrayBufferBase* arrayBuffer = nullptr;
         DataView* dataView;
 
@@ -49,7 +48,7 @@ namespace Js
             {
             case S_OK:
             case S_FALSE:
-                arrayBuffer = static_cast<ArrayBuffer *> (ab);
+                arrayBuffer = ab;
                 // Both of these cases will be handled by the arrayBuffer null check.
                 break;
 
@@ -74,33 +73,21 @@ namespace Js
             }
         }
 
-        //4.    Let numberOffset be ToNumber(byteOffset).
-        //5.    Let offset be ToInteger(numberOffset).
-        //6.    ReturnIfAbrupt(offset).
-        //7.    If numberOffset <> offset or offset < 0, throw a RangeError exception.
+        //4.    Let offset be ToIndex(byteOffset).
         if (args.Info.Count > 2)
         {
             Var secondArgument = args[2];
-            numberOffset = JavascriptConversion::ToNumber(secondArgument, scriptContext);
-            offset = JavascriptConversion::ToInt32(numberOffset);
-
-            if (offset < 0 ||
-                numberOffset != offset)
-            {
-                JavascriptError::ThrowRangeError(
-                    scriptContext, JSERR_DataView_InvalidArgument, _u("byteOffset"));
-            }
+            offset = ArrayBuffer::ToIndex(secondArgument, JSERR_ArrayLengthConstructIncorrect, scriptContext, ArrayBuffer::MaxArrayBufferLength, false);
         }
 
-        //8.    If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
+        //5.    If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
         if (arrayBuffer->IsDetached())
         {
             JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView);
         }
 
-        //9.    Let bufferByteLength be the value of buffer's[[ArrayBufferByteLength]] internal slot.
-        //10.   If offset > bufferByteLength, throw a RangeError exception.
-
+        //6.    Let bufferByteLength be the value of buffer's[[ArrayBufferByteLength]] internal slot.
+        //7.   If offset > bufferByteLength, throw a RangeError exception.
         byteLength = arrayBuffer->GetByteLength();
         if ((uint32)offset > byteLength)
         {
@@ -108,16 +95,15 @@ namespace Js
                 scriptContext, JSERR_DataView_InvalidArgument, _u("byteOffset"));
         }
 
-        //11.   If byteLength is undefined, then
+        //8.   If byteLength is either not present or is undefined, then
         //      a.  Let viewByteLength be bufferByteLength - offset.
-        //12.   Else,
-        //      a.  Let viewByteLength be ToLength(byteLength).
-        //      b.  ReturnIfAbrupt(viewLength).
-        //      c.  If offset + viewByteLength > bufferByteLength, throw a RangeError exception.
+        //9.   Else,
+        //      a.  Let viewByteLength be ToIndex(byteLength).
+        //      b.  If offset + viewByteLength > bufferByteLength, throw a RangeError exception.
         if (args.Info.Count > 3 && !JavascriptOperators::IsUndefinedObject(args[3]))
             {
                 Var thirdArgument = args[3];
-                mappedLength = (uint32)JavascriptConversion::ToLength(thirdArgument, scriptContext);
+                mappedLength = ArrayBuffer::ToIndex(thirdArgument, JSERR_ArrayLengthConstructIncorrect, scriptContext, ArrayBuffer::MaxArrayBufferLength, false);
                 uint32 viewRange = mappedLength + offset;
 
                 if (viewRange > byteLength || viewRange < mappedLength) // overflow indicates out-of-range
@@ -131,13 +117,12 @@ namespace Js
             mappedLength = byteLength - offset;
         }
 
-        //13.   Let O be OrdinaryCreateFromConstructor(NewTarget, "%DataViewPrototype%", [[DataView]], [[ViewedArrayBuffer]], [[ByteLength]], [[ByteOffset]]).
-        //14.   ReturnIfAbrupt(O).
-        //15.   Set O's[[DataView]] internal slot to true.
-        //16.   Set O's[[ViewedArrayBuffer]] internal slot to buffer.
-        //17.   Set O's[[ByteLength]] internal slot to viewByteLength.
-        //18.   Set O's[[ByteOffset]] internal slot to offset.
-        //19.   Return O.
+        //10.   Let O be OrdinaryCreateFromConstructor(NewTarget, "%DataViewPrototype%", [[DataView]], [[ViewedArrayBuffer]], [[ByteLength]], [[ByteOffset]]).
+        //11.   Set O's[[DataView]] internal slot to true.
+        //12.   Set O's[[ViewedArrayBuffer]] internal slot to buffer.
+        //13.   Set O's[[ByteLength]] internal slot to viewByteLength.
+        //14.   Set O's[[ByteOffset]] internal slot to offset.
+        //15.   Return O.
         dataView = scriptContext->GetLibrary()->CreateDataView(arrayBuffer, offset, mappedLength);
         return isCtorSuperCall ?
             JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), dataView, nullptr, scriptContext) :

+ 2 - 32
lib/Runtime/Library/GlobalObject.cpp

@@ -925,22 +925,7 @@ namespace Js
 #ifdef PROFILE_EXEC
         scriptContext->ProfileEnd(Js::EvalCompilePhase);
 #endif
-        if (hr == E_OUTOFMEMORY)
-        {
-            JavascriptError::ThrowOutOfMemoryError(scriptContext);
-        }
-        else if(hr == VBSERR_OutOfStack)
-        {
-            JavascriptError::ThrowStackOverflowError(scriptContext);
-        }
-        else if(hr == E_ABORT)
-        {
-            throw Js::ScriptAbortException();
-        }
-        else if(FAILED(hr))
-        {
-            throw Js::InternalErrorException();
-        }
+        THROW_KNOWN_HRESULT_EXCEPTIONS(hr, scriptContext);
 
         if (!SUCCEEDED(hrParser))
         {
@@ -1087,22 +1072,7 @@ namespace Js
 #ifdef PROFILE_EXEC
         scriptContext->ProfileEnd(Js::EvalCompilePhase);
 #endif
-        if (hr == E_OUTOFMEMORY)
-        {
-            JavascriptError::ThrowOutOfMemoryError(scriptContext);
-        }
-        else if(hr == VBSERR_OutOfStack)
-        {
-            JavascriptError::ThrowStackOverflowError(scriptContext);
-        }
-        else if(hr == E_ABORT)
-        {
-            throw Js::ScriptAbortException();
-        }
-        else if(FAILED(hr))
-        {
-            throw Js::InternalErrorException();
-        }
+        THROW_KNOWN_HRESULT_EXCEPTIONS(hr);
 
         if (!SUCCEEDED(hrParser))
         {

+ 34 - 34
lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h

@@ -2987,14 +2987,14 @@ namespace Js
 /* 00006220 */ 0x32, 0xA8, 0x33, 0xA8, 0x34, 0xA8, 0x35, 0xA8, 0x36, 0xA8, 0x37, 0x8F, 0x01, 0x00, 0x00, 0x00,
 /* 00006230 */ 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x14, 0x17, 0x00, 0x3D, 0x02, 0x09, 0x00, 0x00, 0x8F,
 /* 00006240 */ 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x3D, 0x03,
-/* 00006250 */ 0x09, 0xC1, 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00,
-/* 00006260 */ 0x00, 0x2F, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4A, 0x01,
+/* 00006250 */ 0x09, 0xC1, 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00,
+/* 00006260 */ 0x00, 0x2F, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4B, 0x01,
 /* 00006270 */ 0x01, 0x00, 0x00, 0x00, 0x30, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30,
-/* 00006280 */ 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x31, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
-/* 00006290 */ 0x00, 0x00, 0x31, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00,
-/* 000062A0 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x32, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95,
-/* 000062B0 */ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00,
-/* 000062C0 */ 0x34, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4A, 0x01, 0x06,
+/* 00006280 */ 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x31, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+/* 00006290 */ 0x00, 0x00, 0x31, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00,
+/* 000062A0 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x32, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95,
+/* 000062B0 */ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00,
+/* 000062C0 */ 0x34, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4B, 0x01, 0x06,
 /* 000062D0 */ 0x00, 0x00, 0x00, 0x35, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x35, 0xCC,
 /* 000062E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x7B, 0x05, 0x3D, 0x00,
 /* 000062F0 */ 0x7B, 0x07, 0x3D, 0x01, 0x7B, 0x09, 0x3D, 0x02, 0x7B, 0x0B, 0x3D, 0x03, 0x7B, 0x0D, 0x3D, 0x04,
@@ -3002,23 +3002,23 @@ namespace Js
 /* 00006310 */ 0x96, 0x02, 0x00, 0x00, 0x00, 0x3D, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E,
 /* 00006320 */ 0x01, 0x00, 0x6D, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E, 0x8F, 0x01, 0x00, 0x00,
 /* 00006330 */ 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01,
-/* 00006340 */ 0x17, 0x01, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4A, 0x01, 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
+/* 00006340 */ 0x17, 0x01, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4B, 0x01, 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
 /* 00006350 */ 0x02, 0x40, 0xEE, 0x03, 0x3F, 0x3F, 0x01, 0x00, 0x5C, 0x01, 0x3F, 0x5D, 0x02, 0x19, 0x00, 0x00,
 /* 00006360 */ 0xF2, 0x03, 0xFF, 0x3D, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07,
 /* 00006370 */ 0x00, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x6D, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E,
 /* 00006380 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C,
-/* 00006390 */ 0x00, 0x18, 0x5D, 0x01, 0x1A, 0x03, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4A, 0x01, 0x08, 0x00, 0x00,
+/* 00006390 */ 0x00, 0x18, 0x5D, 0x01, 0x1A, 0x03, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4B, 0x01, 0x08, 0x00, 0x00,
 /* 000063A0 */ 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03, 0x3F, 0x3F, 0x03, 0x00, 0x5C, 0x01, 0x3F, 0x5D,
 /* 000063B0 */ 0x02, 0x1B, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x3D, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x01,
 /* 000063C0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x6D, 0x3D, 0x3E, 0x09, 0x07, 0x03,
 /* 000063D0 */ 0x00, 0x5C, 0x00, 0x3E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00,
-/* 000063E0 */ 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x1C, 0x05, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4A,
+/* 000063E0 */ 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x1C, 0x05, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4B,
 /* 000063F0 */ 0x01, 0x09, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03, 0x3F, 0x3F, 0x05, 0x00,
 /* 00006400 */ 0x5C, 0x01, 0x3F, 0x5D, 0x02, 0x1D, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x3D, 0x09, 0x00, 0x00, 0x00,
 /* 00006410 */ 0x04, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x14, 0x03,
 /* 00006420 */ 0x00, 0x3D, 0x02, 0x09, 0xEE, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x3D, 0x00, 0xB7, 0x01, 0x00,
-/* 00006430 */ 0x00, 0x00, 0x3D, 0x3D, 0x01, 0x4A, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00,
-/* 00006440 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x01, 0x4A, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D,
+/* 00006430 */ 0x00, 0x00, 0x3D, 0x3D, 0x01, 0x4B, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00,
+/* 00006440 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x01, 0x4B, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D,
 /* 00006450 */ 0x95, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28,
 /* 00006460 */ 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x1E, 0x06,
 /* 00006470 */ 0x00, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x5C, 0x02, 0x3E,
@@ -3048,14 +3048,14 @@ namespace Js
 /* 000065F0 */ 0x02, 0x2A, 0x0C, 0x00, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,
 /* 00006600 */ 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x07, 0x03, 0x00,
 /* 00006610 */ 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x2C, 0x0D, 0x00, 0xB8, 0x41, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 00006620 */ 0x41, 0x41, 0x01, 0x4A, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03,
+/* 00006620 */ 0x41, 0x41, 0x01, 0x4B, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03,
 /* 00006630 */ 0x3F, 0x3F, 0x0D, 0x00, 0x7B, 0x3F, 0x3E, 0x10, 0x7B, 0x25, 0x3E, 0x0D, 0x7B, 0x29, 0x3E, 0x0E,
 /* 00006640 */ 0x5C, 0x03, 0x3E, 0xEE, 0x04, 0xFF, 0x3D, 0x0C, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00,
 /* 00006650 */ 0x00, 0x00, 0x3D, 0x05, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x18, 0x91, 0x01, 0x00, 0x00, 0x00,
 /* 00006660 */ 0x02, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x62, 0x3E, 0x3E, 0x0F, 0x5C, 0x01, 0x3E, 0x5D, 0x02,
 /* 00006670 */ 0x2D, 0x0E, 0x00, 0xCC, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
-/* 00006680 */ 0xB8, 0x40, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x01, 0x4A, 0x01, 0x0D, 0x00, 0x00,
-/* 00006690 */ 0x00, 0x3F, 0x40, 0x7B, 0x3F, 0x3E, 0x0B, 0x01, 0x5F, 0x01, 0x3F, 0x3E, 0x7B, 0x29, 0x3E, 0x0C,
+/* 00006680 */ 0xB8, 0x40, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x01, 0x4B, 0x01, 0x0D, 0x00, 0x00,
+/* 00006690 */ 0x00, 0x3F, 0x40, 0x7B, 0x3F, 0x3E, 0x0B, 0x01, 0x60, 0x01, 0x3F, 0x3E, 0x7B, 0x29, 0x3E, 0x0C,
 /* 000066A0 */ 0x7B, 0x25, 0x3E, 0x0D, 0x7B, 0x29, 0x3E, 0x0E, 0x5C, 0x03, 0x3E, 0xEE, 0x04, 0xFF, 0x3D, 0x0E,
 /* 000066B0 */ 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3D, 0x05, 0x00, 0x07, 0x04, 0x00,
 /* 000066C0 */ 0x5C, 0x00, 0x18, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x5C,
@@ -3892,17 +3892,17 @@ namespace Js
 /* 00009AB0 */ 0xC1, 0x03, 0xA8, 0x22, 0xA8, 0x23, 0xA8, 0x24, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00,
 /* 00009AC0 */ 0x00, 0x2A, 0x00, 0x00, 0x14, 0x17, 0x00, 0x2A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00,
 /* 00009AD0 */ 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x14, 0x03, 0x00, 0x2A, 0x03, 0x09, 0x8A, 0x03,
-/* 00009AE0 */ 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A,
+/* 00009AE0 */ 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A,
 /* 00009AF0 */ 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07,
 /* 00009B00 */ 0x00, 0x00, 0x00, 0x2B, 0x01, 0x00, 0x6D, 0x2A, 0x2B, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x2B,
 /* 00009B10 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C,
-/* 00009B20 */ 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x2E, 0x00, 0x01, 0x4A, 0x01, 0x01, 0x00, 0x00,
+/* 00009B20 */ 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x2E, 0x00, 0x01, 0x4B, 0x01, 0x01, 0x00, 0x00,
 /* 00009B30 */ 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D, 0xEE, 0x03, 0x2C, 0x2C, 0x01, 0x00, 0x5C, 0x01, 0x2C, 0x5D,
 /* 00009B40 */ 0x02, 0x06, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01,
 /* 00009B50 */ 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x14, 0x03, 0x00, 0x2A, 0x02, 0x09,
 /* 00009B60 */ 0x08, 0x03, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x2A, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x2A,
-/* 00009B70 */ 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x23, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
-/* 00009B80 */ 0x00, 0x00, 0x23, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00,
+/* 00009B70 */ 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x23, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+/* 00009B80 */ 0x00, 0x00, 0x23, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00,
 /* 00009B90 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x24, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2A,
 /* 00009BA0 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x07, 0x02, 0x00, 0x91, 0x01, 0x00,
 /* 00009BB0 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x5C, 0x02, 0x2B, 0xEE, 0x03, 0xFF, 0x2A,
@@ -3937,15 +3937,15 @@ namespace Js
 /* 00009D80 */ 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B,
 /* 00009D90 */ 0x03, 0x00, 0x62, 0x2B, 0x2B, 0x05, 0x5C, 0x01, 0x2B, 0x5D, 0x02, 0x1E, 0x09, 0x00, 0xCC, 0x44,
 /* 00009DA0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2D, 0x00, 0xB7, 0x01,
-/* 00009DB0 */ 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7B, 0x2C,
-/* 00009DC0 */ 0x2B, 0x01, 0x01, 0x5F, 0x01, 0x2C, 0x2B, 0x7B, 0x0C, 0x2B, 0x02, 0x7B, 0x1B, 0x2B, 0x04, 0x7B,
+/* 00009DB0 */ 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7B, 0x2C,
+/* 00009DC0 */ 0x2B, 0x01, 0x01, 0x60, 0x01, 0x2C, 0x2B, 0x7B, 0x0C, 0x2B, 0x02, 0x7B, 0x1B, 0x2B, 0x04, 0x7B,
 /* 00009DD0 */ 0x0C, 0x2B, 0x03, 0x5C, 0x03, 0x2B, 0xEE, 0x04, 0xFF, 0x2A, 0x09, 0x00, 0x8F, 0x01, 0x00, 0x00,
 /* 00009DE0 */ 0x00, 0x19, 0x00, 0x00, 0x00, 0x2A, 0x05, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x91, 0x01,
 /* 00009DF0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x62, 0x2B, 0x2B, 0x05, 0x5C, 0x01,
 /* 00009E00 */ 0x2B, 0x5D, 0x02, 0x1F, 0x0A, 0x00, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2B,
 /* 00009E10 */ 0x00, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x07,
 /* 00009E20 */ 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x21, 0x0B, 0x00, 0xB8, 0x2E, 0x00, 0xB7, 0x01, 0x00,
-/* 00009E30 */ 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D,
+/* 00009E30 */ 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D,
 /* 00009E40 */ 0xEE, 0x03, 0x2C, 0x2C, 0x0B, 0x00, 0x7B, 0x2C, 0x2B, 0x06, 0x7B, 0x1B, 0x2B, 0x04, 0x7B, 0x0C,
 /* 00009E50 */ 0x2B, 0x03, 0x5C, 0x03, 0x2B, 0xEE, 0x04, 0xFF, 0x2A, 0x0A, 0x00, 0x91, 0x01, 0x00, 0x00, 0x00,
 /* 00009E60 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8,
@@ -4283,17 +4283,17 @@ namespace Js
 /* 0000B320 */ 0x03, 0xFE, 0x8A, 0x03, 0xA8, 0x17, 0xA8, 0x18, 0xA8, 0x19, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A,
 /* 0000B330 */ 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x14, 0x17, 0x00, 0x1D, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01,
 /* 0000B340 */ 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09,
-/* 0000B350 */ 0x53, 0x03, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00,
+/* 0000B350 */ 0x53, 0x03, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00,
 /* 0000B360 */ 0x17, 0x1D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, 0x8F, 0x01, 0x00, 0x00,
 /* 0000B370 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x5C,
 /* 0000B380 */ 0x00, 0x1E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x07, 0x03,
-/* 0000B390 */ 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x21, 0x00, 0x01, 0x4A, 0x01, 0x01,
+/* 0000B390 */ 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x21, 0x00, 0x01, 0x4B, 0x01, 0x01,
 /* 0000B3A0 */ 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20, 0xEE, 0x03, 0x1F, 0x1F, 0x01, 0x00, 0x5C, 0x01,
 /* 0000B3B0 */ 0x1F, 0x5D, 0x02, 0x06, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 /* 0000B3C0 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1D,
 /* 0000B3D0 */ 0x02, 0x09, 0xD1, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x1D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 0000B3E0 */ 0x1D, 0x1D, 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00,
-/* 0000B3F0 */ 0x02, 0x00, 0x00, 0x00, 0x18, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01,
+/* 0000B3E0 */ 0x1D, 0x1D, 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00,
+/* 0000B3F0 */ 0x02, 0x00, 0x00, 0x00, 0x18, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01,
 /* 0000B400 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
 /* 0000B410 */ 0x00, 0x1D, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x07, 0x02, 0x00, 0x91,
 /* 0000B420 */ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x03, 0x00, 0x5C, 0x02, 0x1E, 0xEE, 0x03,
@@ -4325,7 +4325,7 @@ namespace Js
 /* 0000B5C0 */ 0x05, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x03, 0x00, 0x62, 0x1E, 0x1E,
 /* 0000B5D0 */ 0x05, 0x5C, 0x01, 0x1E, 0x5D, 0x02, 0x13, 0x09, 0x00, 0xCC, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00,
 /* 0000B5E0 */ 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xB8, 0x20, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x20, 0x20,
-/* 0000B5F0 */ 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x1F, 0x1E, 0x01, 0x01, 0x5F, 0x01,
+/* 0000B5F0 */ 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x1F, 0x1E, 0x01, 0x01, 0x60, 0x01,
 /* 0000B600 */ 0x1F, 0x1E, 0x7B, 0x0C, 0x1E, 0x02, 0x7B, 0x10, 0x1E, 0x04, 0x7B, 0x0C, 0x1E, 0x03, 0x5C, 0x03,
 /* 0000B610 */ 0x1E, 0xEE, 0x04, 0xFF, 0x1D, 0x09, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
 /* 0000B620 */ 0x1D, 0x05, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
@@ -4333,7 +4333,7 @@ namespace Js
 /* 0000B640 */ 0x00, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x8F, 0x01,
 /* 0000B650 */ 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05,
 /* 0000B660 */ 0x5D, 0x01, 0x16, 0x0B, 0x00, 0xB8, 0x21, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x21, 0x21, 0x01,
-/* 0000B670 */ 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20, 0xEE, 0x03, 0x1F, 0x1F, 0x0B,
+/* 0000B670 */ 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20, 0xEE, 0x03, 0x1F, 0x1F, 0x0B,
 /* 0000B680 */ 0x00, 0x7B, 0x1F, 0x1E, 0x06, 0x7B, 0x10, 0x1E, 0x04, 0x7B, 0x0C, 0x1E, 0x03, 0x5C, 0x03, 0x1E,
 /* 0000B690 */ 0xEE, 0x04, 0xFF, 0x1D, 0x0A, 0x00, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
 /* 0000B6A0 */ 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70,
@@ -5014,12 +5014,12 @@ namespace Js
 /* 0000E0D0 */ 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x13, 0x03, 0x02, 0xFE, 0x14, 0x03, 0x02, 0xFE, 0x15, 0x03, 0x03,
 /* 0000E0E0 */ 0x04, 0x8E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x07, 0x03,
 /* 0000E0F0 */ 0x00, 0x5C, 0x00, 0x09, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00,
-/* 0000E100 */ 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x00, 0x01, 0x5F, 0x01, 0x0D, 0x0C,
-/* 0000E110 */ 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x01, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4,
-/* 0000E120 */ 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x02, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x03,
-/* 0000E130 */ 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x03, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x04, 0x00,
-/* 0000E140 */ 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x04, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x05, 0x00, 0x00,
-/* 0000E150 */ 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x05, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0x5C, 0x01, 0x0C, 0x5D, 0x02,
+/* 0000E100 */ 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x00, 0x01, 0x60, 0x01, 0x0D, 0x0C,
+/* 0000E110 */ 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x01, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4,
+/* 0000E120 */ 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x02, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x03,
+/* 0000E130 */ 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x03, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x04, 0x00,
+/* 0000E140 */ 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x04, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x05, 0x00, 0x00,
+/* 0000E150 */ 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x05, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0x5C, 0x01, 0x0C, 0x5D, 0x02,
 /* 0000E160 */ 0x08, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00,
 /* 0000E170 */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
 /* 0000E180 */ 0x03, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x3C,

+ 34 - 34
lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h

@@ -2987,14 +2987,14 @@ namespace Js
 /* 00006220 */ 0x32, 0xA8, 0x33, 0xA8, 0x34, 0xA8, 0x35, 0xA8, 0x36, 0xA8, 0x37, 0x8F, 0x01, 0x00, 0x00, 0x00,
 /* 00006230 */ 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x14, 0x17, 0x00, 0x3D, 0x02, 0x09, 0x00, 0x00, 0x8F,
 /* 00006240 */ 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x3D, 0x03,
-/* 00006250 */ 0x09, 0xC1, 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00,
-/* 00006260 */ 0x00, 0x2F, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4A, 0x01,
+/* 00006250 */ 0x09, 0xC1, 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00,
+/* 00006260 */ 0x00, 0x2F, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4B, 0x01,
 /* 00006270 */ 0x01, 0x00, 0x00, 0x00, 0x30, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30,
-/* 00006280 */ 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x31, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
-/* 00006290 */ 0x00, 0x00, 0x31, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00,
-/* 000062A0 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x32, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95,
-/* 000062B0 */ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00,
-/* 000062C0 */ 0x34, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4A, 0x01, 0x06,
+/* 00006280 */ 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x31, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+/* 00006290 */ 0x00, 0x00, 0x31, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00,
+/* 000062A0 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x32, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95,
+/* 000062B0 */ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00,
+/* 000062C0 */ 0x34, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4B, 0x01, 0x06,
 /* 000062D0 */ 0x00, 0x00, 0x00, 0x35, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x35, 0xCC,
 /* 000062E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x7B, 0x05, 0x3D, 0x00,
 /* 000062F0 */ 0x7B, 0x07, 0x3D, 0x01, 0x7B, 0x09, 0x3D, 0x02, 0x7B, 0x0B, 0x3D, 0x03, 0x7B, 0x0D, 0x3D, 0x04,
@@ -3002,23 +3002,23 @@ namespace Js
 /* 00006310 */ 0x96, 0x02, 0x00, 0x00, 0x00, 0x3D, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E,
 /* 00006320 */ 0x01, 0x00, 0x6D, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E, 0x8F, 0x01, 0x00, 0x00,
 /* 00006330 */ 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01,
-/* 00006340 */ 0x17, 0x01, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4A, 0x01, 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
+/* 00006340 */ 0x17, 0x01, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4B, 0x01, 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
 /* 00006350 */ 0x02, 0x40, 0xEE, 0x03, 0x3F, 0x3F, 0x01, 0x00, 0x5C, 0x01, 0x3F, 0x5D, 0x02, 0x19, 0x00, 0x00,
 /* 00006360 */ 0xF2, 0x03, 0xFF, 0x3D, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07,
 /* 00006370 */ 0x00, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x6D, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E,
 /* 00006380 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C,
-/* 00006390 */ 0x00, 0x18, 0x5D, 0x01, 0x1A, 0x03, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4A, 0x01, 0x08, 0x00, 0x00,
+/* 00006390 */ 0x00, 0x18, 0x5D, 0x01, 0x1A, 0x03, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4B, 0x01, 0x08, 0x00, 0x00,
 /* 000063A0 */ 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03, 0x3F, 0x3F, 0x03, 0x00, 0x5C, 0x01, 0x3F, 0x5D,
 /* 000063B0 */ 0x02, 0x1B, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x3D, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x01,
 /* 000063C0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x6D, 0x3D, 0x3E, 0x09, 0x07, 0x03,
 /* 000063D0 */ 0x00, 0x5C, 0x00, 0x3E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00,
-/* 000063E0 */ 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x1C, 0x05, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4A,
+/* 000063E0 */ 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x1C, 0x05, 0x00, 0xB8, 0x41, 0x00, 0x01, 0x4B,
 /* 000063F0 */ 0x01, 0x09, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03, 0x3F, 0x3F, 0x05, 0x00,
 /* 00006400 */ 0x5C, 0x01, 0x3F, 0x5D, 0x02, 0x1D, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x3D, 0x09, 0x00, 0x00, 0x00,
 /* 00006410 */ 0x04, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x14, 0x03,
 /* 00006420 */ 0x00, 0x3D, 0x02, 0x09, 0xEE, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x3D, 0x00, 0xB7, 0x01, 0x00,
-/* 00006430 */ 0x00, 0x00, 0x3D, 0x3D, 0x01, 0x4A, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00,
-/* 00006440 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x01, 0x4A, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D,
+/* 00006430 */ 0x00, 0x00, 0x3D, 0x3D, 0x01, 0x4B, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00,
+/* 00006440 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x01, 0x4B, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D,
 /* 00006450 */ 0x95, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28,
 /* 00006460 */ 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x1E, 0x06,
 /* 00006470 */ 0x00, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x5C, 0x02, 0x3E,
@@ -3048,14 +3048,14 @@ namespace Js
 /* 000065F0 */ 0x02, 0x2A, 0x0C, 0x00, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,
 /* 00006600 */ 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x07, 0x03, 0x00,
 /* 00006610 */ 0x5C, 0x00, 0x18, 0x5D, 0x01, 0x2C, 0x0D, 0x00, 0xB8, 0x41, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 00006620 */ 0x41, 0x41, 0x01, 0x4A, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03,
+/* 00006620 */ 0x41, 0x41, 0x01, 0x4B, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0xEE, 0x03,
 /* 00006630 */ 0x3F, 0x3F, 0x0D, 0x00, 0x7B, 0x3F, 0x3E, 0x10, 0x7B, 0x25, 0x3E, 0x0D, 0x7B, 0x29, 0x3E, 0x0E,
 /* 00006640 */ 0x5C, 0x03, 0x3E, 0xEE, 0x04, 0xFF, 0x3D, 0x0C, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00,
 /* 00006650 */ 0x00, 0x00, 0x3D, 0x05, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x18, 0x91, 0x01, 0x00, 0x00, 0x00,
 /* 00006660 */ 0x02, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x62, 0x3E, 0x3E, 0x0F, 0x5C, 0x01, 0x3E, 0x5D, 0x02,
 /* 00006670 */ 0x2D, 0x0E, 0x00, 0xCC, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
-/* 00006680 */ 0xB8, 0x40, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x01, 0x4A, 0x01, 0x0D, 0x00, 0x00,
-/* 00006690 */ 0x00, 0x3F, 0x40, 0x7B, 0x3F, 0x3E, 0x0B, 0x01, 0x5F, 0x01, 0x3F, 0x3E, 0x7B, 0x29, 0x3E, 0x0C,
+/* 00006680 */ 0xB8, 0x40, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x01, 0x4B, 0x01, 0x0D, 0x00, 0x00,
+/* 00006690 */ 0x00, 0x3F, 0x40, 0x7B, 0x3F, 0x3E, 0x0B, 0x01, 0x60, 0x01, 0x3F, 0x3E, 0x7B, 0x29, 0x3E, 0x0C,
 /* 000066A0 */ 0x7B, 0x25, 0x3E, 0x0D, 0x7B, 0x29, 0x3E, 0x0E, 0x5C, 0x03, 0x3E, 0xEE, 0x04, 0xFF, 0x3D, 0x0E,
 /* 000066B0 */ 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3D, 0x05, 0x00, 0x07, 0x04, 0x00,
 /* 000066C0 */ 0x5C, 0x00, 0x18, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x5C,
@@ -3892,17 +3892,17 @@ namespace Js
 /* 00009AB0 */ 0xC1, 0x03, 0xA8, 0x22, 0xA8, 0x23, 0xA8, 0x24, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00,
 /* 00009AC0 */ 0x00, 0x2A, 0x00, 0x00, 0x14, 0x17, 0x00, 0x2A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00,
 /* 00009AD0 */ 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x14, 0x03, 0x00, 0x2A, 0x03, 0x09, 0x8A, 0x03,
-/* 00009AE0 */ 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A,
+/* 00009AE0 */ 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A,
 /* 00009AF0 */ 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07,
 /* 00009B00 */ 0x00, 0x00, 0x00, 0x2B, 0x01, 0x00, 0x6D, 0x2A, 0x2B, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x2B,
 /* 00009B10 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C,
-/* 00009B20 */ 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x2E, 0x00, 0x01, 0x4A, 0x01, 0x01, 0x00, 0x00,
+/* 00009B20 */ 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x2E, 0x00, 0x01, 0x4B, 0x01, 0x01, 0x00, 0x00,
 /* 00009B30 */ 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D, 0xEE, 0x03, 0x2C, 0x2C, 0x01, 0x00, 0x5C, 0x01, 0x2C, 0x5D,
 /* 00009B40 */ 0x02, 0x06, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01,
 /* 00009B50 */ 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x14, 0x03, 0x00, 0x2A, 0x02, 0x09,
 /* 00009B60 */ 0x08, 0x03, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x2A, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x2A,
-/* 00009B70 */ 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x23, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
-/* 00009B80 */ 0x00, 0x00, 0x23, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00,
+/* 00009B70 */ 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x23, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+/* 00009B80 */ 0x00, 0x00, 0x23, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00,
 /* 00009B90 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x24, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2A,
 /* 00009BA0 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x07, 0x02, 0x00, 0x91, 0x01, 0x00,
 /* 00009BB0 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x5C, 0x02, 0x2B, 0xEE, 0x03, 0xFF, 0x2A,
@@ -3937,15 +3937,15 @@ namespace Js
 /* 00009D80 */ 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B,
 /* 00009D90 */ 0x03, 0x00, 0x62, 0x2B, 0x2B, 0x05, 0x5C, 0x01, 0x2B, 0x5D, 0x02, 0x1E, 0x09, 0x00, 0xCC, 0x44,
 /* 00009DA0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2D, 0x00, 0xB7, 0x01,
-/* 00009DB0 */ 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7B, 0x2C,
-/* 00009DC0 */ 0x2B, 0x01, 0x01, 0x5F, 0x01, 0x2C, 0x2B, 0x7B, 0x0C, 0x2B, 0x02, 0x7B, 0x1B, 0x2B, 0x04, 0x7B,
+/* 00009DB0 */ 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7B, 0x2C,
+/* 00009DC0 */ 0x2B, 0x01, 0x01, 0x60, 0x01, 0x2C, 0x2B, 0x7B, 0x0C, 0x2B, 0x02, 0x7B, 0x1B, 0x2B, 0x04, 0x7B,
 /* 00009DD0 */ 0x0C, 0x2B, 0x03, 0x5C, 0x03, 0x2B, 0xEE, 0x04, 0xFF, 0x2A, 0x09, 0x00, 0x8F, 0x01, 0x00, 0x00,
 /* 00009DE0 */ 0x00, 0x19, 0x00, 0x00, 0x00, 0x2A, 0x05, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x91, 0x01,
 /* 00009DF0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x62, 0x2B, 0x2B, 0x05, 0x5C, 0x01,
 /* 00009E00 */ 0x2B, 0x5D, 0x02, 0x1F, 0x0A, 0x00, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2B,
 /* 00009E10 */ 0x00, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x07,
 /* 00009E20 */ 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x21, 0x0B, 0x00, 0xB8, 0x2E, 0x00, 0xB7, 0x01, 0x00,
-/* 00009E30 */ 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D,
+/* 00009E30 */ 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D,
 /* 00009E40 */ 0xEE, 0x03, 0x2C, 0x2C, 0x0B, 0x00, 0x7B, 0x2C, 0x2B, 0x06, 0x7B, 0x1B, 0x2B, 0x04, 0x7B, 0x0C,
 /* 00009E50 */ 0x2B, 0x03, 0x5C, 0x03, 0x2B, 0xEE, 0x04, 0xFF, 0x2A, 0x0A, 0x00, 0x91, 0x01, 0x00, 0x00, 0x00,
 /* 00009E60 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8,
@@ -4283,17 +4283,17 @@ namespace Js
 /* 0000B320 */ 0x03, 0xFE, 0x8A, 0x03, 0xA8, 0x17, 0xA8, 0x18, 0xA8, 0x19, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A,
 /* 0000B330 */ 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x14, 0x17, 0x00, 0x1D, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01,
 /* 0000B340 */ 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09,
-/* 0000B350 */ 0x53, 0x03, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00,
+/* 0000B350 */ 0x53, 0x03, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00,
 /* 0000B360 */ 0x17, 0x1D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, 0x8F, 0x01, 0x00, 0x00,
 /* 0000B370 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x5C,
 /* 0000B380 */ 0x00, 0x1E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x07, 0x03,
-/* 0000B390 */ 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x21, 0x00, 0x01, 0x4A, 0x01, 0x01,
+/* 0000B390 */ 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x04, 0x01, 0x00, 0xB8, 0x21, 0x00, 0x01, 0x4B, 0x01, 0x01,
 /* 0000B3A0 */ 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20, 0xEE, 0x03, 0x1F, 0x1F, 0x01, 0x00, 0x5C, 0x01,
 /* 0000B3B0 */ 0x1F, 0x5D, 0x02, 0x06, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 /* 0000B3C0 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1D,
 /* 0000B3D0 */ 0x02, 0x09, 0xD1, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x1D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 0000B3E0 */ 0x1D, 0x1D, 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00,
-/* 0000B3F0 */ 0x02, 0x00, 0x00, 0x00, 0x18, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01,
+/* 0000B3E0 */ 0x1D, 0x1D, 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00,
+/* 0000B3F0 */ 0x02, 0x00, 0x00, 0x00, 0x18, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01,
 /* 0000B400 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
 /* 0000B410 */ 0x00, 0x1D, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5D, 0x01, 0x07, 0x02, 0x00, 0x91,
 /* 0000B420 */ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x03, 0x00, 0x5C, 0x02, 0x1E, 0xEE, 0x03,
@@ -4325,7 +4325,7 @@ namespace Js
 /* 0000B5C0 */ 0x05, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x03, 0x00, 0x62, 0x1E, 0x1E,
 /* 0000B5D0 */ 0x05, 0x5C, 0x01, 0x1E, 0x5D, 0x02, 0x13, 0x09, 0x00, 0xCC, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00,
 /* 0000B5E0 */ 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xB8, 0x20, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x20, 0x20,
-/* 0000B5F0 */ 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x1F, 0x1E, 0x01, 0x01, 0x5F, 0x01,
+/* 0000B5F0 */ 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x1F, 0x1E, 0x01, 0x01, 0x60, 0x01,
 /* 0000B600 */ 0x1F, 0x1E, 0x7B, 0x0C, 0x1E, 0x02, 0x7B, 0x10, 0x1E, 0x04, 0x7B, 0x0C, 0x1E, 0x03, 0x5C, 0x03,
 /* 0000B610 */ 0x1E, 0xEE, 0x04, 0xFF, 0x1D, 0x09, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
 /* 0000B620 */ 0x1D, 0x05, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
@@ -4333,7 +4333,7 @@ namespace Js
 /* 0000B640 */ 0x00, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x8F, 0x01,
 /* 0000B650 */ 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05,
 /* 0000B660 */ 0x5D, 0x01, 0x16, 0x0B, 0x00, 0xB8, 0x21, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x21, 0x21, 0x01,
-/* 0000B670 */ 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20, 0xEE, 0x03, 0x1F, 0x1F, 0x0B,
+/* 0000B670 */ 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20, 0xEE, 0x03, 0x1F, 0x1F, 0x0B,
 /* 0000B680 */ 0x00, 0x7B, 0x1F, 0x1E, 0x06, 0x7B, 0x10, 0x1E, 0x04, 0x7B, 0x0C, 0x1E, 0x03, 0x5C, 0x03, 0x1E,
 /* 0000B690 */ 0xEE, 0x04, 0xFF, 0x1D, 0x0A, 0x00, 0x91, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
 /* 0000B6A0 */ 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70,
@@ -5014,12 +5014,12 @@ namespace Js
 /* 0000E0D0 */ 0x11, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x13, 0x03, 0x02, 0xFE, 0x14, 0x03, 0x02, 0xFE,
 /* 0000E0E0 */ 0x15, 0x03, 0x03, 0x04, 0x8E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0B, 0x00,
 /* 0000E0F0 */ 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x09, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-/* 0000E100 */ 0x0C, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x00, 0x01, 0x5F,
-/* 0000E110 */ 0x01, 0x0D, 0x0C, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x01, 0x01, 0x5F, 0x01,
-/* 0000E120 */ 0x0D, 0x0C, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x02, 0x01, 0x5F, 0x01, 0x0D,
-/* 0000E130 */ 0x0C, 0xD4, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x03, 0x01, 0x5F, 0x01, 0x0D, 0x0C,
-/* 0000E140 */ 0xD4, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x04, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4,
-/* 0000E150 */ 0x05, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x05, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0x5C, 0x01,
+/* 0000E100 */ 0x0C, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x00, 0x01, 0x60,
+/* 0000E110 */ 0x01, 0x0D, 0x0C, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x01, 0x01, 0x60, 0x01,
+/* 0000E120 */ 0x0D, 0x0C, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x02, 0x01, 0x60, 0x01, 0x0D,
+/* 0000E130 */ 0x0C, 0xD4, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x03, 0x01, 0x60, 0x01, 0x0D, 0x0C,
+/* 0000E140 */ 0xD4, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x04, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4,
+/* 0000E150 */ 0x05, 0x00, 0x00, 0x00, 0x0D, 0x7B, 0x0D, 0x0C, 0x05, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0x5C, 0x01,
 /* 0000E160 */ 0x0C, 0x5D, 0x02, 0x08, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8,
 /* 0000E170 */ 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00,
 /* 0000E180 */ 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x37, 0x02,

+ 32 - 32
lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.32b.h

@@ -2970,35 +2970,35 @@ namespace Js
 /* 00006110 */ 0x31, 0xA8, 0x32, 0xA8, 0x33, 0xA8, 0x34, 0xA8, 0x35, 0xA8, 0x36, 0xA8, 0x37, 0x8E, 0x01, 0x00,
 /* 00006120 */ 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x14, 0x15, 0x00, 0x3D, 0x02, 0x09, 0x00, 0x00, 0x8E,
 /* 00006130 */ 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x14, 0x03, 0x00, 0x3D, 0x03, 0x09, 0x3B,
-/* 00006140 */ 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2F,
-/* 00006150 */ 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4A, 0x01, 0x01, 0x00,
-/* 00006160 */ 0x00, 0x00, 0x30, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x01, 0x4A,
+/* 00006140 */ 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2F,
+/* 00006150 */ 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4B, 0x01, 0x01, 0x00,
+/* 00006160 */ 0x00, 0x00, 0x30, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x01, 0x4B,
 /* 00006170 */ 0x01, 0x02, 0x00, 0x00, 0x00, 0x31, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-/* 00006180 */ 0x31, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x05,
-/* 00006190 */ 0x00, 0x00, 0x00, 0x32, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95, 0x00, 0x00,
-/* 000061A0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x34, 0x3D,
-/* 000061B0 */ 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4A, 0x01, 0x06, 0x00, 0x00,
+/* 00006180 */ 0x31, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x05,
+/* 00006190 */ 0x00, 0x00, 0x00, 0x32, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95, 0x00, 0x00,
+/* 000061A0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x34, 0x3D,
+/* 000061B0 */ 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4B, 0x01, 0x06, 0x00, 0x00,
 /* 000061C0 */ 0x00, 0x35, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x35, 0xCC, 0x00, 0x00,
 /* 000061D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x7A, 0x05, 0x3D, 0x00, 0x7A, 0x07,
 /* 000061E0 */ 0x3D, 0x01, 0x7A, 0x09, 0x3D, 0x02, 0x7A, 0x0B, 0x3D, 0x03, 0x7A, 0x0D, 0x3D, 0x04, 0x7A, 0x0F,
 /* 000061F0 */ 0x3D, 0x05, 0x7A, 0x11, 0x3D, 0x06, 0x7A, 0x13, 0x3D, 0x07, 0x7A, 0x15, 0x3D, 0x08, 0x96, 0x02,
 /* 00006200 */ 0x00, 0x00, 0x00, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x6C, 0x3D,
 /* 00006210 */ 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
-/* 00006220 */ 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x17, 0xB8, 0x41, 0x00, 0x01, 0x4A,
+/* 00006220 */ 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x17, 0xB8, 0x41, 0x00, 0x01, 0x4B,
 /* 00006230 */ 0x01, 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03, 0x3F, 0x3F, 0x5C, 0x01,
 /* 00006240 */ 0x3F, 0x5C, 0x02, 0x19, 0x1F, 0x03, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
 /* 00006250 */ 0x00, 0x3E, 0x6C, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E, 0x8E, 0x01, 0x00, 0x00,
 /* 00006260 */ 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x1A, 0xB8,
-/* 00006270 */ 0x41, 0x00, 0x01, 0x4A, 0x01, 0x08, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
+/* 00006270 */ 0x41, 0x00, 0x01, 0x4B, 0x01, 0x08, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
 /* 00006280 */ 0x3F, 0x3F, 0x5C, 0x01, 0x3F, 0x5C, 0x02, 0x1B, 0x1F, 0x03, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00,
 /* 00006290 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x6C, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E,
 /* 000062A0 */ 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18,
-/* 000062B0 */ 0x5C, 0x01, 0x1C, 0xB8, 0x41, 0x00, 0x01, 0x4A, 0x01, 0x09, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
+/* 000062B0 */ 0x5C, 0x01, 0x1C, 0xB8, 0x41, 0x00, 0x01, 0x4B, 0x01, 0x09, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
 /* 000062C0 */ 0x02, 0x40, 0x1F, 0x03, 0x3F, 0x3F, 0x5C, 0x01, 0x3F, 0x5C, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x3D,
 /* 000062D0 */ 0x8E, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x14, 0x03, 0x00, 0x3D, 0x02, 0x09,
 /* 000062E0 */ 0x9A, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x3D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x3D, 0x3D,
-/* 000062F0 */ 0x01, 0x4A, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
-/* 00006300 */ 0x00, 0x00, 0x36, 0x01, 0x4A, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D, 0x95, 0x01, 0x00, 0x00,
+/* 000062F0 */ 0x01, 0x4B, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+/* 00006300 */ 0x00, 0x00, 0x36, 0x01, 0x4B, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D, 0x95, 0x01, 0x00, 0x00,
 /* 00006310 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3D,
 /* 00006320 */ 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x1E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
 /* 00006330 */ 0x00, 0x00, 0x3E, 0x5C, 0x02, 0x3E, 0x1F, 0x03, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28,
@@ -3024,13 +3024,13 @@ namespace Js
 /* 00006470 */ 0x3E, 0x0F, 0x5C, 0x01, 0x3E, 0x5C, 0x02, 0x2A, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
 /* 00006480 */ 0x00, 0x3E, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x07,
 /* 00006490 */ 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x2C, 0xB8, 0x41, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 000064A0 */ 0x41, 0x41, 0x01, 0x4A, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
+/* 000064A0 */ 0x41, 0x41, 0x01, 0x4B, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
 /* 000064B0 */ 0x3F, 0x3F, 0x7A, 0x3F, 0x3E, 0x10, 0x7A, 0x25, 0x3E, 0x0D, 0x7A, 0x29, 0x3E, 0x0E, 0x5C, 0x03,
 /* 000064C0 */ 0x3E, 0x1F, 0x04, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3D, 0x07,
 /* 000064D0 */ 0x04, 0x00, 0x5C, 0x00, 0x18, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x61,
 /* 000064E0 */ 0x3E, 0x3E, 0x0F, 0x5C, 0x01, 0x3E, 0x5C, 0x02, 0x2D, 0xCC, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00,
 /* 000064F0 */ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xB8, 0x40, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40,
-/* 00006500 */ 0x01, 0x4A, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x7A, 0x3F, 0x3E, 0x0B, 0x01, 0x5F, 0x01,
+/* 00006500 */ 0x01, 0x4B, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x7A, 0x3F, 0x3E, 0x0B, 0x01, 0x60, 0x01,
 /* 00006510 */ 0x3F, 0x3E, 0x7A, 0x29, 0x3E, 0x0C, 0x7A, 0x25, 0x3E, 0x0D, 0x7A, 0x29, 0x3E, 0x0E, 0x5C, 0x03,
 /* 00006520 */ 0x3E, 0x1F, 0x04, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3D, 0x07,
 /* 00006530 */ 0x04, 0x00, 0x5C, 0x00, 0x18, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x5C,
@@ -3794,16 +3794,16 @@ namespace Js
 /* 00009490 */ 0x64, 0x03, 0xFE, 0x59, 0x03, 0xA8, 0x22, 0xA8, 0x23, 0xA8, 0x24, 0x8E, 0x01, 0x00, 0x00, 0x00,
 /* 000094A0 */ 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x14, 0x15, 0x00, 0x2A, 0x02, 0x09, 0x00, 0x00, 0x8E, 0x01, 0x00,
 /* 000094B0 */ 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x14, 0x03, 0x00, 0x2A, 0x03, 0x09, 0x26, 0x03, 0xDE,
-/* 000094C0 */ 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A, 0x95,
+/* 000094C0 */ 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A, 0x95,
 /* 000094D0 */ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00,
 /* 000094E0 */ 0x00, 0x00, 0x2B, 0x6C, 0x2A, 0x2B, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x2B, 0x8E, 0x01, 0x00,
 /* 000094F0 */ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x04,
-/* 00009500 */ 0xB8, 0x2E, 0x00, 0x01, 0x4A, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D, 0x1F,
+/* 00009500 */ 0xB8, 0x2E, 0x00, 0x01, 0x4B, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D, 0x1F,
 /* 00009510 */ 0x03, 0x2C, 0x2C, 0x5C, 0x01, 0x2C, 0x5C, 0x02, 0x06, 0x1F, 0x03, 0xFF, 0x2A, 0x8E, 0x01, 0x00,
 /* 00009520 */ 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x14, 0x03, 0x00, 0x2A, 0x02, 0x09, 0xB6, 0x02, 0xDE,
-/* 00009530 */ 0x01, 0x04, 0x02, 0xB8, 0x2A, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x2A, 0x01, 0x4A, 0x01,
+/* 00009530 */ 0x01, 0x04, 0x02, 0xB8, 0x2A, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x2A, 0x01, 0x4B, 0x01,
 /* 00009540 */ 0x02, 0x00, 0x00, 0x00, 0x23, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23,
-/* 00009550 */ 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00,
+/* 00009550 */ 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00,
 /* 00009560 */ 0x00, 0x00, 0x24, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2A, 0x07, 0x03, 0x00,
 /* 00009570 */ 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x07, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B,
 /* 00009580 */ 0x5C, 0x02, 0x2B, 0x1F, 0x03, 0xFF, 0x2A, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
@@ -3834,14 +3834,14 @@ namespace Js
 /* 00009710 */ 0x2A, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
 /* 00009720 */ 0x2B, 0x61, 0x2B, 0x2B, 0x05, 0x5C, 0x01, 0x2B, 0x5C, 0x02, 0x1E, 0xCC, 0x44, 0x00, 0x00, 0x00,
 /* 00009730 */ 0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 00009740 */ 0x2D, 0x2D, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7A, 0x2C, 0x2B, 0x01, 0x01,
-/* 00009750 */ 0x5F, 0x01, 0x2C, 0x2B, 0x7A, 0x0C, 0x2B, 0x02, 0x7A, 0x1B, 0x2B, 0x04, 0x7A, 0x0C, 0x2B, 0x03,
+/* 00009740 */ 0x2D, 0x2D, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7A, 0x2C, 0x2B, 0x01, 0x01,
+/* 00009750 */ 0x60, 0x01, 0x2C, 0x2B, 0x7A, 0x0C, 0x2B, 0x02, 0x7A, 0x1B, 0x2B, 0x04, 0x7A, 0x0C, 0x2B, 0x03,
 /* 00009760 */ 0x5C, 0x03, 0x2B, 0x1F, 0x04, 0xFF, 0x2A, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
 /* 00009770 */ 0x2A, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
 /* 00009780 */ 0x2B, 0x61, 0x2B, 0x2B, 0x05, 0x5C, 0x01, 0x2B, 0x5C, 0x02, 0x1F, 0xCC, 0x5C, 0x00, 0x00, 0x00,
 /* 00009790 */ 0x04, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
 /* 000097A0 */ 0x00, 0x2C, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x21, 0xB8, 0x2E, 0x00, 0xB7, 0x01,
-/* 000097B0 */ 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02,
+/* 000097B0 */ 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02,
 /* 000097C0 */ 0x2D, 0x1F, 0x03, 0x2C, 0x2C, 0x7A, 0x2C, 0x2B, 0x06, 0x7A, 0x1B, 0x2B, 0x04, 0x7A, 0x0C, 0x2B,
 /* 000097D0 */ 0x03, 0x5C, 0x03, 0x2B, 0x1F, 0x04, 0xFF, 0x2A, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
 /* 000097E0 */ 0x00, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70,
@@ -4151,16 +4151,16 @@ namespace Js
 /* 0000AAE0 */ 0x37, 0x03, 0x02, 0xFE, 0x38, 0x03, 0xFE, 0x24, 0x03, 0xA8, 0x17, 0xA8, 0x18, 0xA8, 0x19, 0x8E,
 /* 0000AAF0 */ 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x14, 0x15, 0x00, 0x1D, 0x02, 0x09, 0x00,
 /* 0000AB00 */ 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x14, 0x03, 0x00, 0x1D, 0x03,
-/* 0000AB10 */ 0x09, 0xF1, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00,
+/* 0000AB10 */ 0x09, 0xF1, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00,
 /* 0000AB20 */ 0x00, 0x17, 0x1D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, 0x8E, 0x01, 0x00,
 /* 0000AB30 */ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0x6C, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00,
 /* 0000AB40 */ 0x1E, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1F, 0x07, 0x03, 0x00, 0x5C, 0x00,
-/* 0000AB50 */ 0x05, 0x5C, 0x01, 0x04, 0xB8, 0x21, 0x00, 0x01, 0x4A, 0x01, 0x01, 0x00, 0x00, 0x00, 0x20, 0x21,
+/* 0000AB50 */ 0x05, 0x5C, 0x01, 0x04, 0xB8, 0x21, 0x00, 0x01, 0x4B, 0x01, 0x01, 0x00, 0x00, 0x00, 0x20, 0x21,
 /* 0000AB60 */ 0x5C, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x5C, 0x01, 0x1F, 0x5C, 0x02, 0x06, 0x1F, 0x03, 0xFF,
 /* 0000AB70 */ 0x1D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x14, 0x03, 0x00, 0x1D, 0x02,
 /* 0000AB80 */ 0x09, 0x81, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x1D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x1D,
-/* 0000AB90 */ 0x1D, 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02,
-/* 0000ABA0 */ 0x00, 0x00, 0x00, 0x18, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01, 0x00,
+/* 0000AB90 */ 0x1D, 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02,
+/* 0000ABA0 */ 0x00, 0x00, 0x00, 0x18, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01, 0x00,
 /* 0000ABB0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
 /* 0000ABC0 */ 0x1D, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x07, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02,
 /* 0000ABD0 */ 0x00, 0x00, 0x00, 0x1E, 0x5C, 0x02, 0x1E, 0x1F, 0x03, 0xFF, 0x1D, 0x8E, 0x01, 0x00, 0x00, 0x00,
@@ -4188,14 +4188,14 @@ namespace Js
 /* 0000AD30 */ 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E,
 /* 0000AD40 */ 0x61, 0x1E, 0x1E, 0x05, 0x5C, 0x01, 0x1E, 0x5C, 0x02, 0x13, 0xCC, 0x44, 0x00, 0x00, 0x00, 0x03,
 /* 0000AD50 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xB8, 0x20, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x20,
-/* 0000AD60 */ 0x20, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7A, 0x1F, 0x1E, 0x01, 0x01, 0x5F,
+/* 0000AD60 */ 0x20, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7A, 0x1F, 0x1E, 0x01, 0x01, 0x60,
 /* 0000AD70 */ 0x01, 0x1F, 0x1E, 0x7A, 0x0C, 0x1E, 0x02, 0x7A, 0x10, 0x1E, 0x04, 0x7A, 0x0C, 0x1E, 0x03, 0x5C,
 /* 0000AD80 */ 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1D,
 /* 0000AD90 */ 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E,
 /* 0000ADA0 */ 0x61, 0x1E, 0x1E, 0x05, 0x5C, 0x01, 0x1E, 0x5C, 0x02, 0x14, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x04,
 /* 0000ADB0 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
 /* 0000ADC0 */ 0x1F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x16, 0xB8, 0x21, 0x00, 0xB7, 0x01, 0x00,
-/* 0000ADD0 */ 0x00, 0x00, 0x21, 0x21, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20,
+/* 0000ADD0 */ 0x00, 0x00, 0x21, 0x21, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20,
 /* 0000ADE0 */ 0x1F, 0x03, 0x1F, 0x1F, 0x7A, 0x1F, 0x1E, 0x06, 0x7A, 0x10, 0x1E, 0x04, 0x7A, 0x0C, 0x1E, 0x03,
 /* 0000ADF0 */ 0x5C, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1D, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
 /* 0000AE00 */ 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00,
@@ -4821,11 +4821,11 @@ namespace Js
 /* 0000D4C0 */ 0x03, 0x02, 0xFE, 0x15, 0x03, 0x03, 0x04, 0x88, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
 /* 0000D4D0 */ 0x00, 0x0B, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x09, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 /* 0000D4E0 */ 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x00, 0x01,
-/* 0000D4F0 */ 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x01, 0x01, 0x5F,
-/* 0000D500 */ 0x01, 0x0D, 0x0C, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x02, 0x01, 0x5F, 0x01,
-/* 0000D510 */ 0x0D, 0x0C, 0xD4, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x03, 0x01, 0x5F, 0x01, 0x0D,
-/* 0000D520 */ 0x0C, 0xD4, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x04, 0x01, 0x5F, 0x01, 0x0D, 0x0C,
-/* 0000D530 */ 0xD4, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x05, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0x5C,
+/* 0000D4F0 */ 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x01, 0x01, 0x60,
+/* 0000D500 */ 0x01, 0x0D, 0x0C, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x02, 0x01, 0x60, 0x01,
+/* 0000D510 */ 0x0D, 0x0C, 0xD4, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x03, 0x01, 0x60, 0x01, 0x0D,
+/* 0000D520 */ 0x0C, 0xD4, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x04, 0x01, 0x60, 0x01, 0x0D, 0x0C,
+/* 0000D530 */ 0xD4, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x05, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0x5C,
 /* 0000D540 */ 0x01, 0x0C, 0x5C, 0x02, 0x08, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00,
 /* 0000D550 */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
 /* 0000D560 */ 0x03, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x3C,

+ 32 - 32
lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.64b.h

@@ -2970,35 +2970,35 @@ namespace Js
 /* 00006110 */ 0x31, 0xA8, 0x32, 0xA8, 0x33, 0xA8, 0x34, 0xA8, 0x35, 0xA8, 0x36, 0xA8, 0x37, 0x8E, 0x01, 0x00,
 /* 00006120 */ 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x14, 0x15, 0x00, 0x3D, 0x02, 0x09, 0x00, 0x00, 0x8E,
 /* 00006130 */ 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x14, 0x03, 0x00, 0x3D, 0x03, 0x09, 0x3B,
-/* 00006140 */ 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2F,
-/* 00006150 */ 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4A, 0x01, 0x01, 0x00,
-/* 00006160 */ 0x00, 0x00, 0x30, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x01, 0x4A,
+/* 00006140 */ 0x04, 0xDE, 0x00, 0x09, 0x01, 0xB8, 0x3D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2F,
+/* 00006150 */ 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x4B, 0x01, 0x01, 0x00,
+/* 00006160 */ 0x00, 0x00, 0x30, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x01, 0x4B,
 /* 00006170 */ 0x01, 0x02, 0x00, 0x00, 0x00, 0x31, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-/* 00006180 */ 0x31, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x05,
-/* 00006190 */ 0x00, 0x00, 0x00, 0x32, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95, 0x00, 0x00,
-/* 000061A0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x34, 0x3D,
-/* 000061B0 */ 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4A, 0x01, 0x06, 0x00, 0x00,
+/* 00006180 */ 0x31, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x32, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x05,
+/* 00006190 */ 0x00, 0x00, 0x00, 0x32, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x95, 0x00, 0x00,
+/* 000061A0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x34, 0x3D,
+/* 000061B0 */ 0x95, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x01, 0x4B, 0x01, 0x06, 0x00, 0x00,
 /* 000061C0 */ 0x00, 0x35, 0x3D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x35, 0xCC, 0x00, 0x00,
 /* 000061D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x7A, 0x05, 0x3D, 0x00, 0x7A, 0x07,
 /* 000061E0 */ 0x3D, 0x01, 0x7A, 0x09, 0x3D, 0x02, 0x7A, 0x0B, 0x3D, 0x03, 0x7A, 0x0D, 0x3D, 0x04, 0x7A, 0x0F,
 /* 000061F0 */ 0x3D, 0x05, 0x7A, 0x11, 0x3D, 0x06, 0x7A, 0x13, 0x3D, 0x07, 0x7A, 0x15, 0x3D, 0x08, 0x96, 0x02,
 /* 00006200 */ 0x00, 0x00, 0x00, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x6C, 0x3D,
 /* 00006210 */ 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
-/* 00006220 */ 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x17, 0xB8, 0x41, 0x00, 0x01, 0x4A,
+/* 00006220 */ 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x17, 0xB8, 0x41, 0x00, 0x01, 0x4B,
 /* 00006230 */ 0x01, 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03, 0x3F, 0x3F, 0x5C, 0x01,
 /* 00006240 */ 0x3F, 0x5C, 0x02, 0x19, 0x1F, 0x03, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
 /* 00006250 */ 0x00, 0x3E, 0x6C, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E, 0x8E, 0x01, 0x00, 0x00,
 /* 00006260 */ 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x1A, 0xB8,
-/* 00006270 */ 0x41, 0x00, 0x01, 0x4A, 0x01, 0x08, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
+/* 00006270 */ 0x41, 0x00, 0x01, 0x4B, 0x01, 0x08, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
 /* 00006280 */ 0x3F, 0x3F, 0x5C, 0x01, 0x3F, 0x5C, 0x02, 0x1B, 0x1F, 0x03, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00,
 /* 00006290 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x6C, 0x3D, 0x3E, 0x09, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x3E,
 /* 000062A0 */ 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18,
-/* 000062B0 */ 0x5C, 0x01, 0x1C, 0xB8, 0x41, 0x00, 0x01, 0x4A, 0x01, 0x09, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
+/* 000062B0 */ 0x5C, 0x01, 0x1C, 0xB8, 0x41, 0x00, 0x01, 0x4B, 0x01, 0x09, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C,
 /* 000062C0 */ 0x02, 0x40, 0x1F, 0x03, 0x3F, 0x3F, 0x5C, 0x01, 0x3F, 0x5C, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x3D,
 /* 000062D0 */ 0x8E, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x3D, 0x14, 0x03, 0x00, 0x3D, 0x02, 0x09,
 /* 000062E0 */ 0x9A, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x3D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x3D, 0x3D,
-/* 000062F0 */ 0x01, 0x4A, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
-/* 00006300 */ 0x00, 0x00, 0x36, 0x01, 0x4A, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D, 0x95, 0x01, 0x00, 0x00,
+/* 000062F0 */ 0x01, 0x4B, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x36, 0x3D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+/* 00006300 */ 0x00, 0x00, 0x36, 0x01, 0x4B, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x37, 0x3D, 0x95, 0x01, 0x00, 0x00,
 /* 00006310 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3D,
 /* 00006320 */ 0x07, 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x1E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
 /* 00006330 */ 0x00, 0x00, 0x3E, 0x5C, 0x02, 0x3E, 0x1F, 0x03, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28,
@@ -3024,13 +3024,13 @@ namespace Js
 /* 00006470 */ 0x3E, 0x0F, 0x5C, 0x01, 0x3E, 0x5C, 0x02, 0x2A, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
 /* 00006480 */ 0x00, 0x3E, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3F, 0x07,
 /* 00006490 */ 0x03, 0x00, 0x5C, 0x00, 0x18, 0x5C, 0x01, 0x2C, 0xB8, 0x41, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 000064A0 */ 0x41, 0x41, 0x01, 0x4A, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
+/* 000064A0 */ 0x41, 0x41, 0x01, 0x4B, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x41, 0x5C, 0x02, 0x40, 0x1F, 0x03,
 /* 000064B0 */ 0x3F, 0x3F, 0x7A, 0x3F, 0x3E, 0x10, 0x7A, 0x25, 0x3E, 0x0D, 0x7A, 0x29, 0x3E, 0x0E, 0x5C, 0x03,
 /* 000064C0 */ 0x3E, 0x1F, 0x04, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3D, 0x07,
 /* 000064D0 */ 0x04, 0x00, 0x5C, 0x00, 0x18, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x61,
 /* 000064E0 */ 0x3E, 0x3E, 0x0F, 0x5C, 0x01, 0x3E, 0x5C, 0x02, 0x2D, 0xCC, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00,
 /* 000064F0 */ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xB8, 0x40, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40,
-/* 00006500 */ 0x01, 0x4A, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x7A, 0x3F, 0x3E, 0x0B, 0x01, 0x5F, 0x01,
+/* 00006500 */ 0x01, 0x4B, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x7A, 0x3F, 0x3E, 0x0B, 0x01, 0x60, 0x01,
 /* 00006510 */ 0x3F, 0x3E, 0x7A, 0x29, 0x3E, 0x0C, 0x7A, 0x25, 0x3E, 0x0D, 0x7A, 0x29, 0x3E, 0x0E, 0x5C, 0x03,
 /* 00006520 */ 0x3E, 0x1F, 0x04, 0xFF, 0x3D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3D, 0x07,
 /* 00006530 */ 0x04, 0x00, 0x5C, 0x00, 0x18, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x5C,
@@ -3794,16 +3794,16 @@ namespace Js
 /* 00009490 */ 0x64, 0x03, 0xFE, 0x59, 0x03, 0xA8, 0x22, 0xA8, 0x23, 0xA8, 0x24, 0x8E, 0x01, 0x00, 0x00, 0x00,
 /* 000094A0 */ 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x14, 0x15, 0x00, 0x2A, 0x02, 0x09, 0x00, 0x00, 0x8E, 0x01, 0x00,
 /* 000094B0 */ 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x14, 0x03, 0x00, 0x2A, 0x03, 0x09, 0x26, 0x03, 0xDE,
-/* 000094C0 */ 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A, 0x95,
+/* 000094C0 */ 0x00, 0x03, 0x01, 0xB8, 0x2A, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A, 0x95,
 /* 000094D0 */ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00,
 /* 000094E0 */ 0x00, 0x00, 0x2B, 0x6C, 0x2A, 0x2B, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x2B, 0x8E, 0x01, 0x00,
 /* 000094F0 */ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x04,
-/* 00009500 */ 0xB8, 0x2E, 0x00, 0x01, 0x4A, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D, 0x1F,
+/* 00009500 */ 0xB8, 0x2E, 0x00, 0x01, 0x4B, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02, 0x2D, 0x1F,
 /* 00009510 */ 0x03, 0x2C, 0x2C, 0x5C, 0x01, 0x2C, 0x5C, 0x02, 0x06, 0x1F, 0x03, 0xFF, 0x2A, 0x8E, 0x01, 0x00,
 /* 00009520 */ 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x2A, 0x14, 0x03, 0x00, 0x2A, 0x02, 0x09, 0xB6, 0x02, 0xDE,
-/* 00009530 */ 0x01, 0x04, 0x02, 0xB8, 0x2A, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x2A, 0x01, 0x4A, 0x01,
+/* 00009530 */ 0x01, 0x04, 0x02, 0xB8, 0x2A, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x2A, 0x01, 0x4B, 0x01,
 /* 00009540 */ 0x02, 0x00, 0x00, 0x00, 0x23, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23,
-/* 00009550 */ 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00,
+/* 00009550 */ 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x95, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00,
 /* 00009560 */ 0x00, 0x00, 0x24, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2A, 0x07, 0x03, 0x00,
 /* 00009570 */ 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x07, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B,
 /* 00009580 */ 0x5C, 0x02, 0x2B, 0x1F, 0x03, 0xFF, 0x2A, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
@@ -3834,14 +3834,14 @@ namespace Js
 /* 00009710 */ 0x2A, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
 /* 00009720 */ 0x2B, 0x61, 0x2B, 0x2B, 0x05, 0x5C, 0x01, 0x2B, 0x5C, 0x02, 0x1E, 0xCC, 0x44, 0x00, 0x00, 0x00,
 /* 00009730 */ 0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00,
-/* 00009740 */ 0x2D, 0x2D, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7A, 0x2C, 0x2B, 0x01, 0x01,
-/* 00009750 */ 0x5F, 0x01, 0x2C, 0x2B, 0x7A, 0x0C, 0x2B, 0x02, 0x7A, 0x1B, 0x2B, 0x04, 0x7A, 0x0C, 0x2B, 0x03,
+/* 00009740 */ 0x2D, 0x2D, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x7A, 0x2C, 0x2B, 0x01, 0x01,
+/* 00009750 */ 0x60, 0x01, 0x2C, 0x2B, 0x7A, 0x0C, 0x2B, 0x02, 0x7A, 0x1B, 0x2B, 0x04, 0x7A, 0x0C, 0x2B, 0x03,
 /* 00009760 */ 0x5C, 0x03, 0x2B, 0x1F, 0x04, 0xFF, 0x2A, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
 /* 00009770 */ 0x2A, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
 /* 00009780 */ 0x2B, 0x61, 0x2B, 0x2B, 0x05, 0x5C, 0x01, 0x2B, 0x5C, 0x02, 0x1F, 0xCC, 0x5C, 0x00, 0x00, 0x00,
 /* 00009790 */ 0x04, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
 /* 000097A0 */ 0x00, 0x2C, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x21, 0xB8, 0x2E, 0x00, 0xB7, 0x01,
-/* 000097B0 */ 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02,
+/* 000097B0 */ 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x2D, 0x2E, 0x5C, 0x02,
 /* 000097C0 */ 0x2D, 0x1F, 0x03, 0x2C, 0x2C, 0x7A, 0x2C, 0x2B, 0x06, 0x7A, 0x1B, 0x2B, 0x04, 0x7A, 0x0C, 0x2B,
 /* 000097D0 */ 0x03, 0x5C, 0x03, 0x2B, 0x1F, 0x04, 0xFF, 0x2A, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
 /* 000097E0 */ 0x00, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70,
@@ -4151,16 +4151,16 @@ namespace Js
 /* 0000AAE0 */ 0x37, 0x03, 0x02, 0xFE, 0x38, 0x03, 0xFE, 0x24, 0x03, 0xA8, 0x17, 0xA8, 0x18, 0xA8, 0x19, 0x8E,
 /* 0000AAF0 */ 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x14, 0x15, 0x00, 0x1D, 0x02, 0x09, 0x00,
 /* 0000AB00 */ 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x14, 0x03, 0x00, 0x1D, 0x03,
-/* 0000AB10 */ 0x09, 0xF1, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4A, 0x01, 0x00, 0x00, 0x00,
+/* 0000AB10 */ 0x09, 0xF1, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB8, 0x1D, 0x00, 0x01, 0x4B, 0x01, 0x00, 0x00, 0x00,
 /* 0000AB20 */ 0x00, 0x17, 0x1D, 0x95, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, 0x8E, 0x01, 0x00,
 /* 0000AB30 */ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0x6C, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00,
 /* 0000AB40 */ 0x1E, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1F, 0x07, 0x03, 0x00, 0x5C, 0x00,
-/* 0000AB50 */ 0x05, 0x5C, 0x01, 0x04, 0xB8, 0x21, 0x00, 0x01, 0x4A, 0x01, 0x01, 0x00, 0x00, 0x00, 0x20, 0x21,
+/* 0000AB50 */ 0x05, 0x5C, 0x01, 0x04, 0xB8, 0x21, 0x00, 0x01, 0x4B, 0x01, 0x01, 0x00, 0x00, 0x00, 0x20, 0x21,
 /* 0000AB60 */ 0x5C, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x5C, 0x01, 0x1F, 0x5C, 0x02, 0x06, 0x1F, 0x03, 0xFF,
 /* 0000AB70 */ 0x1D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x14, 0x03, 0x00, 0x1D, 0x02,
 /* 0000AB80 */ 0x09, 0x81, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB8, 0x1D, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x1D,
-/* 0000AB90 */ 0x1D, 0x01, 0x4A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02,
-/* 0000ABA0 */ 0x00, 0x00, 0x00, 0x18, 0x01, 0x4A, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01, 0x00,
+/* 0000AB90 */ 0x1D, 0x01, 0x4B, 0x01, 0x02, 0x00, 0x00, 0x00, 0x18, 0x1D, 0x95, 0x01, 0x00, 0x00, 0x00, 0x02,
+/* 0000ABA0 */ 0x00, 0x00, 0x00, 0x18, 0x01, 0x4B, 0x01, 0x03, 0x00, 0x00, 0x00, 0x19, 0x1D, 0x95, 0x01, 0x00,
 /* 0000ABB0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
 /* 0000ABC0 */ 0x1D, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x07, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02,
 /* 0000ABD0 */ 0x00, 0x00, 0x00, 0x1E, 0x5C, 0x02, 0x1E, 0x1F, 0x03, 0xFF, 0x1D, 0x8E, 0x01, 0x00, 0x00, 0x00,
@@ -4188,14 +4188,14 @@ namespace Js
 /* 0000AD30 */ 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E,
 /* 0000AD40 */ 0x61, 0x1E, 0x1E, 0x05, 0x5C, 0x01, 0x1E, 0x5C, 0x02, 0x13, 0xCC, 0x44, 0x00, 0x00, 0x00, 0x03,
 /* 0000AD50 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xB8, 0x20, 0x00, 0xB7, 0x01, 0x00, 0x00, 0x00, 0x20,
-/* 0000AD60 */ 0x20, 0x01, 0x4A, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7A, 0x1F, 0x1E, 0x01, 0x01, 0x5F,
+/* 0000AD60 */ 0x20, 0x01, 0x4B, 0x01, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7A, 0x1F, 0x1E, 0x01, 0x01, 0x60,
 /* 0000AD70 */ 0x01, 0x1F, 0x1E, 0x7A, 0x0C, 0x1E, 0x02, 0x7A, 0x10, 0x1E, 0x04, 0x7A, 0x0C, 0x1E, 0x03, 0x5C,
 /* 0000AD80 */ 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1D,
 /* 0000AD90 */ 0x07, 0x04, 0x00, 0x5C, 0x00, 0x05, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E,
 /* 0000ADA0 */ 0x61, 0x1E, 0x1E, 0x05, 0x5C, 0x01, 0x1E, 0x5C, 0x02, 0x14, 0xCC, 0x5C, 0x00, 0x00, 0x00, 0x04,
 /* 0000ADB0 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
 /* 0000ADC0 */ 0x1F, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x16, 0xB8, 0x21, 0x00, 0xB7, 0x01, 0x00,
-/* 0000ADD0 */ 0x00, 0x00, 0x21, 0x21, 0x01, 0x4A, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20,
+/* 0000ADD0 */ 0x00, 0x00, 0x21, 0x21, 0x01, 0x4B, 0x01, 0x05, 0x00, 0x00, 0x00, 0x20, 0x21, 0x5C, 0x02, 0x20,
 /* 0000ADE0 */ 0x1F, 0x03, 0x1F, 0x1F, 0x7A, 0x1F, 0x1E, 0x06, 0x7A, 0x10, 0x1E, 0x04, 0x7A, 0x0C, 0x1E, 0x03,
 /* 0000ADF0 */ 0x5C, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1D, 0x90, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
 /* 0000AE00 */ 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00,
@@ -4821,11 +4821,11 @@ namespace Js
 /* 0000D4C0 */ 0x02, 0xFE, 0x14, 0x03, 0x02, 0xFE, 0x15, 0x03, 0x03, 0x04, 0x88, 0x8E, 0x01, 0x00, 0x00, 0x00,
 /* 0000D4D0 */ 0x08, 0x00, 0x00, 0x00, 0x0B, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x09, 0xCC, 0x00, 0x00, 0x00, 0x00,
 /* 0000D4E0 */ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D,
-/* 0000D4F0 */ 0x0C, 0x00, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C,
-/* 0000D500 */ 0x01, 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x02,
-/* 0000D510 */ 0x01, 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x03, 0x01,
-/* 0000D520 */ 0x5F, 0x01, 0x0D, 0x0C, 0xD4, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x04, 0x01, 0x5F,
-/* 0000D530 */ 0x01, 0x0D, 0x0C, 0xD4, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x05, 0x01, 0x5F, 0x01,
+/* 0000D4F0 */ 0x0C, 0x00, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C,
+/* 0000D500 */ 0x01, 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x02,
+/* 0000D510 */ 0x01, 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x03, 0x01,
+/* 0000D520 */ 0x60, 0x01, 0x0D, 0x0C, 0xD4, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x04, 0x01, 0x60,
+/* 0000D530 */ 0x01, 0x0D, 0x0C, 0xD4, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x7A, 0x0D, 0x0C, 0x05, 0x01, 0x60, 0x01,
 /* 0000D540 */ 0x0D, 0x0C, 0x5C, 0x01, 0x0C, 0x5C, 0x02, 0x08, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8,
 /* 0000D550 */ 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00,
 /* 0000D560 */ 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x37, 0x02,

+ 6 - 1
lib/Runtime/Library/IteratorObjectEnumerator.cpp

@@ -46,7 +46,12 @@ namespace Js
             else
             {
                 JavascriptString* propertyName = JavascriptConversion::ToString(currentIndex, scriptContext);
-                scriptContext->GetOrAddPropertyRecord(propertyName->GetString(), propertyName->GetLength(), &propertyRecord);
+                GetScriptContext()->GetOrAddPropertyRecord(propertyName->GetString(), propertyName->GetLength(), &propertyRecord);
+
+                // Need to keep property records alive during enumeration to prevent collection
+                // and eventual reuse during the same enumeration. For DynamicObjects, property
+                // records are kept alive by type handlers.
+                this->propertyRecords.Prepend(iteratorObject->GetRecycler(), propertyRecord);
             }
 
             propertyId = propertyRecord->GetPropertyId();

+ 2 - 0
lib/Runtime/Library/IteratorObjectEnumerator.h

@@ -8,6 +8,7 @@ namespace Js
 {
     class IteratorObjectEnumerator sealed : public JavascriptEnumerator
     {
+        typedef SListBase<Js::PropertyRecord const *, Memory::Recycler> PropertyRecordList;
     public:
         static IteratorObjectEnumerator * Create(ScriptContext* scriptContext, Var iteratorObject);
         virtual Var MoveAndGetNext(PropertyId& propertyId, PropertyAttributes* attributes = nullptr);
@@ -21,6 +22,7 @@ namespace Js
         Field(RecyclableObject*) iteratorObject;
         Field(Var) value;
         Field(BOOL) done;
+        Field(PropertyRecordList) propertyRecords;
     };
 
 }

+ 1 - 1
lib/Runtime/Library/JavascriptArray.cpp

@@ -7568,7 +7568,7 @@ Case0:
         {
            return res;
         }
-        if (JavascriptArray::Is(args[0]))
+        if (JavascriptArray::Is(args[0]) && !JavascriptArray::FromVar(args[0])->IsCrossSiteObject())
         {
 #if ENABLE_COPYONACCESS_ARRAY
             JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray<Var>(args[0]);

+ 1 - 1
lib/Runtime/Library/JavascriptFunction.cpp

@@ -709,7 +709,7 @@ namespace Js
         {
             // Just don't execute anything if we are in an assert
             // throw the exception directly to avoid additional assert in Js::Throw::InternalError
-            throw Js::InternalErrorException();
+            AssertOrFailFast(false);
         }
 #endif
 

+ 7 - 5
lib/Runtime/Library/JavascriptObject.cpp

@@ -486,7 +486,7 @@ namespace Js
         if (type == TypeIds_HostDispatch)
         {
             RecyclableObject* hostDispatchObject = RecyclableObject::FromVar(thisArg);
-            DynamicObject* remoteObject = hostDispatchObject->GetRemoteObject();
+            const DynamicObject* remoteObject = hostDispatchObject->GetRemoteObject();
             if (!remoteObject)
             {
                 Var result = nullptr;
@@ -1161,7 +1161,8 @@ namespace Js
                     if (propertyRecord->IsSymbol())
                     {
                         symbol = scriptContext->GetLibrary()->CreateSymbol(propertyRecord);
-                        newArrForSymbols->DirectSetItemAt(symbolIndex++, CrossSite::MarshalVar(scriptContext, symbol));
+                        // no need to marshal symbol because it is created from scriptContext
+                        newArrForSymbols->DirectSetItemAt(symbolIndex++, symbol);
                         continue;
                     }
                 }
@@ -1725,6 +1726,7 @@ namespace Js
 
             tempVar = JavascriptOperators::GetProperty(props, propId, scriptContext);
 
+            AnalysisAssert(descCount < descSize);
             if (!JavascriptOperators::ToPropertyDescriptor(tempVar, &descriptors[descCount].descriptor, scriptContext))
             {
                 JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propId)->GetBuffer());
@@ -1899,7 +1901,7 @@ namespace Js
                 && _wcsicmp(Js::ScriptFunction::FromVar(descriptor.GetGetter())->GetFunctionProxy()->GetDisplayName(), _u("get")) == 0)
             {
                 // modify to name.get
-                char16* finalName = ConstructName(propertyRecord, _u(".get"), scriptContext);
+                const char16* finalName = ConstructName(propertyRecord, _u(".get"), scriptContext);
                 if (finalName != nullptr)
                 {
                     FunctionProxy::SetDisplayNameFlags flags = (FunctionProxy::SetDisplayNameFlags) (FunctionProxy::SetDisplayNameFlagsDontCopy | FunctionProxy::SetDisplayNameFlagsRecyclerAllocated);
@@ -1914,7 +1916,7 @@ namespace Js
                 && _wcsicmp(Js::ScriptFunction::FromVar(descriptor.GetSetter())->GetFunctionProxy()->GetDisplayName(), _u("set")) == 0)
             {
                 // modify to name.set
-                char16* finalName = ConstructName(propertyRecord, _u(".set"), scriptContext);
+                const char16* finalName = ConstructName(propertyRecord, _u(".set"), scriptContext);
                 if (finalName != nullptr)
                 {
                     FunctionProxy::SetDisplayNameFlags flags = (FunctionProxy::SetDisplayNameFlags) (FunctionProxy::SetDisplayNameFlagsDontCopy | FunctionProxy::SetDisplayNameFlagsRecyclerAllocated);
@@ -1931,7 +1933,7 @@ namespace Js
         BOOL returnValue;
         obj->ThrowIfCannotDefineProperty(propId, descriptor);
 
-        Type* oldType = obj->GetType();
+        const Type* oldType = obj->GetType();
         obj->ClearWritableDataOnlyDetectionBit();
 
         // HostDispatch: it doesn't support changing property attributes and default attributes are not per ES5,

+ 1 - 1
lib/Runtime/Library/JavascriptProxy.cpp

@@ -1960,7 +1960,7 @@ namespace Js
         {
             functionResult = JavascriptFunction::CallFunction<true>(this, this->GetEntryPoint(), args);
         }
-        return functionResult;
+        return CrossSite::MarshalVar(scriptContext, functionResult);
     }
 
     Var JavascriptProxy::FunctionCallTrap(RecyclableObject* function, CallInfo callInfo, ...)

+ 5 - 1
lib/Runtime/Library/TypedArray.cpp

@@ -388,6 +388,7 @@ namespace Js
     Var TypedArrayBase::CreateNewInstance(Arguments& args, ScriptContext* scriptContext, uint32 elementSize, PFNCreateTypedArray pfnCreateTypedArray)
     {
         uint32 byteLength = 0;
+        uint32 newByteLength = 0;
         int32 offset = 0;
         int32 mappedLength = -1;
         uint32 elementCount = 0;
@@ -509,12 +510,15 @@ namespace Js
             if (args.Info.Count > 3 && !JavascriptOperators::IsUndefinedObject(args[3]))
             {
                 mappedLength = ArrayBuffer::ToIndex(args[3], JSERR_InvalidTypedArrayLength, scriptContext, ArrayBuffer::MaxArrayBufferLength / elementSize, false);
+                newByteLength = mappedLength * elementSize;
 
-                if ((uint32)mappedLength > (byteLength - offset)/ elementSize)
+                if (offset + newByteLength > byteLength)
                 {
                     JavascriptError::ThrowRangeError(
                         scriptContext, JSERR_InvalidTypedArrayLength);
                 }
+
+                byteLength = newByteLength;
             }
             else
             {

+ 3 - 3
lib/Runtime/PlatformAgnostic/Platform/Common/UnicodeText.Common.cpp

@@ -78,7 +78,7 @@ inline int readNumber(__inout CharType* &str)
 /// This code is in the common library so that we can unit test it on Windows too
 ///
 /// Basic algorithm is as follows:
-/// 
+///
 /// Iterate through both strings
 ///  If either current character is not a number, compare the rest of the strings lexically
 ///  else if they're both numbers:
@@ -189,7 +189,7 @@ int LogicalStringCompareImpl<char16>(__in const char16* str1, __in const char16*
 
 // Unnamespaced test code
 #if ENABLE_TEST_PLATFORM_AGNOSTIC
-void LogicalStringCompareTest(const wchar_t* str1, const wchar_t* str2, int expected)
+void LogicalStringCompareTest(const WCHAR* str1, const WCHAR* str2, int expected)
 {
     int compareStringResult = CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_DIGITSASNUMBERS, str1, -1, str2, -1);
 
@@ -201,7 +201,7 @@ void LogicalStringCompareTest(const wchar_t* str1, const wchar_t* str2, int expe
 
     compareStringResult = compareStringResult - CSTR_EQUAL;
 
-    int res = PlatformAgnostic::UnicodeText::Internal::LogicalStringCompareImpl<wchar_t>(str1, str2);
+    int res = PlatformAgnostic::UnicodeText::Internal::LogicalStringCompareImpl<WCHAR>(str1, str2);
     bool passed = res == expected;
 
     if (compareStringResult != expected)

+ 10 - 0
lib/Runtime/Types/PathTypeHandler.cpp

@@ -1552,6 +1552,16 @@ namespace Js
                     Assert(cachedDynamicTypeHandler->GetInlineSlotCapacity() >= roundedInlineSlotCapacity);
                     Assert(cachedDynamicTypeHandler->GetInlineSlotCapacity() >= GetPropertyCount());
                     cachedDynamicTypeHandler->ShrinkSlotAndInlineSlotCapacity();
+
+                    // If slot capacity doesn't match after shrinking, it could be because oldType was shrunk and
+                    // newType evolved. In that case, we should update the cache with new type
+                    if (cachedDynamicTypeHandler->GetInlineSlotCapacity() != roundedInlineSlotCapacity)
+                    {
+                        cachedDynamicType = nullptr;
+#if DBG
+                        swprintf_s(reason, 1024, _u("InlineSlotCapacity mismatch after shrinking. Required = %d, Cached = %d"), roundedInlineSlotCapacity, cachedDynamicTypeHandler->GetInlineSlotCapacity());
+#endif
+                    }
                 }
             }
         }

+ 22 - 165
pal/inc/pal.h

@@ -65,6 +65,28 @@ namespace std {
 #endif
 #endif // __APPLE__ ?
 
+#ifdef __ANDROID__
+#define S_IREAD   0000400
+#define S_IWRITE  0000200
+#define S_IEXEC   0000100
+
+#ifndef CC_AND_TAG
+#define CC_AND_TAG "chakracore-log"
+#endif
+#include <android/log.h>
+#include <stdarg.h>
+#define PRINT_LOG(...) \
+    __android_log_print(ANDROID_LOG_INFO, CC_AND_TAG, __VA_ARGS__)
+#define PRINT_ERROR(...) \
+    __android_log_print(ANDROID_LOG_ERROR, CC_AND_TAG, __VA_ARGS__)
+#else
+typedef __builtin_va_list va_list;
+#define PRINT_LOG(...) \
+    swprintf(stdout, __VA_ARGS__)
+#define PRINT_ERROR(...) \
+    swprintf(stderr, __VA_ARGS__)
+#endif
+
 #ifdef  __cplusplus
 extern "C" {
 #endif
@@ -187,36 +209,12 @@ extern "C" {
 
 /******************* Compiler-specific glue *******************************/
 
-#ifndef _MSC_VER
 #define FEATURE_PAL_SXS 1
-#endif // !_MSC_VER
-
-#if defined(_MSC_VER) || defined(__llvm__)
 #define DECLSPEC_ALIGN(x)   __declspec(align(x))
-#else
-#define DECLSPEC_ALIGN(x)
-#endif
-
 #define DECLSPEC_NORETURN   PAL_NORETURN
-
-#ifndef _MSC_VER
 #define __assume(x) (void)0
 #define __annotation(x)
-#endif //!MSC_VER
-
-#ifdef _MSC_VER
-
-#if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64)
-#define UNALIGNED __unaligned
-#else
 #define UNALIGNED
-#endif
-
-#else // _MSC_VER
-
-#define UNALIGNED
-
-#endif // _MSC_VER
 
 #ifndef FORCEINLINE
 #if _MSC_VER < 1200
@@ -226,122 +224,7 @@ extern "C" {
 #endif
 #endif
 
-#ifndef PAL_STDCPP_COMPAT
-
-#ifdef _M_ALPHA
-
-typedef struct {
-    char *a0;       /* pointer to first homed integer argument */
-    int offset;     /* byte offset of next parameter */
-} va_list;
-
-#define va_start(list, v) __builtin_va_start(list, v, 1)
-#define va_end(list)
-
-#elif __GNUC__
-
-#if defined(_AIX)
-
-typedef __builtin_va_list __gnuc_va_list;
-typedef __builtin_va_list va_list;
-#define va_start(v,l)   __builtin_va_start(v,l)
-#define va_end          __builtin_va_end
-#define va_arg          __builtin_va_arg
-
-#else // _AIX
-
-#if __GNUC__ == 2
-typedef void * va_list;
-#else
-typedef __builtin_va_list va_list;
-#endif  // __GNUC__
-
-/* We should consider if the va_arg definition here is actually necessary.
-   Could we use the standard va_arg definition? */
-
-#if __GNUC__ == 2
-#if defined(_SPARC_) || defined(_PARISC_) // ToDo: is this the right thing for PARISC?
-#define va_start(list, v) (__builtin_next_arg(v), list = (char *) __builtin_saveregs())
-#define __va_rounded_size(TYPE)  \
-  (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
-#define __record_type_class 12
-#define __real_type_class 8
-#define va_arg(pvar,TYPE)                                       \
-__extension__                                                   \
-(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class \
-      || (__builtin_classify_type (*(TYPE*) 0) == __real_type_class \
-          && sizeof (TYPE) == 16))                              \
-    ? ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE *),    \
-       *(TYPE **) (void *) ((char *)(pvar) - __va_rounded_size (TYPE *))) \
-    : __va_rounded_size (TYPE) == 8                             \
-    ? ({ union {char __d[sizeof (TYPE)]; int __i[2];} __u;      \
-         __u.__i[0] = ((int *) (void *) (pvar))[0];             \
-         __u.__i[1] = ((int *) (void *) (pvar))[1];             \
-         (pvar) = (char *)(pvar) + 8;                           \
-         (TYPE *) (void *) __u.__d; })                          \
-    : ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE),      \
-       ((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}))
-#else   // _SPARC_ or _PARISC_
-// GCC 2.95.3 on non-SPARC
-#define __va_size(type) (((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
-#define va_start(list, v) ((list) = (va_list) __builtin_next_arg(v))
-#define va_arg(ap, type) (*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
-#endif  // _SPARC_ or _PARISC_
-#else // __GNUC__ == 2
-#define va_start    __builtin_va_start
-#define va_arg      __builtin_va_arg
-#endif // __GNUC__ == 2
-
-#define va_copy     __builtin_va_copy
-#define va_end      __builtin_va_end
-
-#endif // _AIX
-
-#define VOID void
-
-#define PUB __attribute__((visibility("default")))
-
-#else // __GNUC__
-
-typedef char * va_list;
-
-#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
-
-#if _MSC_VER >= 1400
-
-#ifdef  __cplusplus
-#define _ADDRESSOF(v)   ( &reinterpret_cast<const char &>(v) )
-#else
-#define _ADDRESSOF(v)   ( &(v) )
-#endif
-
-#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
-#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
-#define _crt_va_end(ap)      ( ap = (va_list)0 )
-
-#define va_start _crt_va_start
-#define va_arg _crt_va_arg
-#define va_end _crt_va_end
-
-#else  // _MSC_VER
-
-#define va_start(ap,v)    (ap = (va_list) (&(v)) + _INTSIZEOF(v))
-#define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
-#define va_end(ap)
-
-#endif // _MSC_VER
-
-#define va_copy(dest,src) (dest = src)
-
-#endif // __GNUC__
-
-#endif // !PAL_STDCPP_COMPAT
-
-#if defined(__CLANG__) || defined(__GNUC__)
 #define PAL_GLOBAL __attribute__((init_priority(200)))
-#else
-#define PAL_GLOBAL
-#endif
 /******************* PAL-Specific Entrypoints *****************************/
 
 #define IsDebuggerPresent PAL_IsDebuggerPresent
@@ -525,26 +408,6 @@ typedef long time_t;
 typedef DWORD (PALAPI *PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter);
 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
 
-
-/******************* Tracing Initialization *******************************/
-
-#if defined(__LINUX__)
-
-// Constructor priority is set to 200, which allows for constructors to
-// guarantee that they run before or after this constructor by setting
-// their priority appropriately.
-
-// Priority values must be greater than 100.  The lower the value,
-// the higher the priority.
-static
-void
-__attribute__((__unused__))
-__attribute__((constructor (200)))
-PAL_InitializeTracing(void);
-
-#endif
-
-
 /******************* PAL-Specific Entrypoints *****************************/
 
 PALIMPORT
@@ -559,12 +422,6 @@ int
 PALAPI
 PAL_InitializeDLL();
 
-PALIMPORT
-DWORD
-PALAPI
-PAL_InitializeCoreCLR(
-    const char *szExePath);
-
 PALIMPORT
 DWORD
 PALAPI

+ 1 - 9
pal/inc/pal_mstypes.h

@@ -554,17 +554,9 @@ typedef LONG_PTR LPARAM;
 #define _PTRDIFF_T
 #endif
 
-// CC uses both char16_t and wchar_t internally
-#if !defined(PAL_WCHAR_T_DEFINED)
-#if defined(__cplusplus)
-#undef wchar_t
-#define wchar_t __wchar_16_cpp__
-typedef char16_t wchar_t;
-#else
+#if !defined(__cplusplus)
 typedef unsigned short char16_t;
 #endif // __cplusplus
-#define PAL_WCHAR_T_DEFINED
-#endif // PAL_WCHAR_T_DEFINED
 
 typedef char16_t WCHAR;
 #define WCHAR_IS_CHAR16_T 1

+ 3 - 15
pal/inc/safemath.h

@@ -20,20 +20,14 @@
 #define _ASSERTE_SAFEMATH _ASSERTE
 #else
 // Otherwise (eg. we're being used from a tool like SOS) there isn't much
-// we can rely on that is both available everywhere and rotor-safe.  In 
+// we can rely on that is both available everywhere and rotor-safe.  In
 // several other tools we just take the recourse of disabling asserts,
-// we'll do the same here.  
+// we'll do the same here.
 // Ideally we'd have a collection of common utilities available evererywhere.
-#define _ASSERTE_SAFEMATH(a) 
+#define _ASSERTE_SAFEMATH(a)
 #endif
 #endif
 
-// CC uses both char16_t and wchar_t internally
-#if defined(__cplusplus)
-#undef wchar_t
-#define wchar_t void*
-#endif
-
 #if !defined(__IOS__) && !defined(OSX_SDK_TR1) && defined(__APPLE__)
 #include <AvailabilityMacros.h>
 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < MAC_OS_X_VERSION_10_9
@@ -47,12 +41,6 @@
 #include <type_traits>
 #endif
 
-#if defined(__cplusplus)
-#undef wchar_t
-#define wchar_t __wchar_16_cpp__
-typedef char16_t wchar_t;
-#endif // __cplusplus
-
 //==================================================================
 // Semantics: if val can be represented as the exact same value
 // when cast to Dst type, then FitsIn<Dst>(val) will return true;

+ 33 - 32
pal/src/cruntime/filecrt.cpp

@@ -1,6 +1,6 @@
 //
 // Copyright (c) Microsoft. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information. 
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
 //
 
 /*++
@@ -28,6 +28,7 @@ Abstract:
 #include "pal/file.h"
 #include "pal/cruntime.h"
 
+#include <stdarg.h>
 #include <unistd.h>
 #include <errno.h>
 #include <sys/stat.h>
@@ -55,7 +56,7 @@ _open_osfhandle( INT_PTR osfhandle, int flags )
     IPalObject *pobjFile = NULL;
     CFileProcessLocalData *pLocalData = NULL;
     IDataLock *pDataLock = NULL;
-    INT nRetVal = -1;  
+    INT nRetVal = -1;
     INT openFlags = 0;
 
     PERF_ENTRY(_open_osfhandle);
@@ -109,7 +110,7 @@ _open_osfhandle( INT_PTR osfhandle, int flags )
 
             nRetVal = pLocalData->unix_fd;
         }
-        
+
         if ( nRetVal == -1 )
         {
             ERROR( "Error: %s.\n", strerror( errno ) );
@@ -131,7 +132,7 @@ EXIT:
     {
         pobjFile->ReleaseReference(pthrCurrent);
     }
- 
+
     LOGEXIT( "_open_osfhandle return nRetVal:%d\n", nRetVal);
     PERF_EXIT(_open_osfhandle);
     return nRetVal;
@@ -173,12 +174,12 @@ is copied into szBuf.
 nSize = size, in bytes, of the array referenced by szBuf.
 
 Return value:
-    A pointer to the pathname if successful, otherwise NULL is returned 
+    A pointer to the pathname if successful, otherwise NULL is returned
 --*/
-char * 
-__cdecl 
+char *
+__cdecl
 PAL__getcwd(
-    char *szBuf, 
+    char *szBuf,
     size_t nSize
     )
 {
@@ -198,8 +199,8 @@ szNameTemplate = template to follow when naming the created file
 Return value:
     Open file descriptor on success, -1 if file could not be created
 --*/
-int 
-__cdecl 
+int
+__cdecl
 PAL_mkstemp(char *szNameTemplate)
 {
     return InternalMkstemp(szNameTemplate);
@@ -217,7 +218,7 @@ szNameTemplate = template to follow when naming the created file
 Return value:
     Open file descriptor on success, -1 if file could not be created
 --*/
-int 
+int
 CorUnix::InternalMkstemp(
     char *szNameTemplate
     )
@@ -249,15 +250,15 @@ Return value:
 int
 __cdecl
 PAL__open(
-    const char *szPath, 
-    int nFlags, 
+    const char *szPath,
+    int nFlags,
     ...
     )
 {
     int nRet = -1;
     int mode = 0;
     va_list ap;
-    
+
     // If nFlags does not contain O_CREAT, the mode parameter will be ignored.
     if (nFlags & O_CREAT)
     {
@@ -265,7 +266,7 @@ PAL__open(
         mode = va_arg(ap, int);
         va_end(ap);
     }
-    
+
     nRet = InternalOpen(szPath, nFlags, mode);
     return nRet;
 }
@@ -348,7 +349,7 @@ Return value:
 int
 __cdecl
 PAL_rename(
-    const char *szOldName, 
+    const char *szOldName,
     const char *szNewName
     )
 {
@@ -371,19 +372,19 @@ Return value:
     Returns a pointer to the string storing the characters on success
     and NULL on failure.
 --*/
-char * 
-__cdecl 
+char *
+__cdecl
 PAL_fgets(
-    char *sz, 
-    int nSize, 
+    char *sz,
+    int nSize,
     PAL_FILE *pf
     )
 {
     char * szBuf;
-    
+
     PERF_ENTRY(fgets);
     ENTRY( "fgets(sz=%p (%s) nSize=%d pf=%p)\n", sz, sz, nSize, pf);
-    
+
     if (pf != NULL)
     {
         szBuf = InternalFgets(sz, nSize, pf->bsdFilePtr, pf->bTextMode);
@@ -392,7 +393,7 @@ PAL_fgets(
     {
         szBuf = NULL;
     }
-    
+
     LOGEXIT("fgets() returns %p\n", szBuf);
     PERF_EXIT(fgets);
 
@@ -489,12 +490,12 @@ pf = stream to write characters to
 Return value:
     Returns the number of objects written.
 --*/
-size_t 
-__cdecl 
+size_t
+__cdecl
 PAL_fwrite(
-    const void *pvBuffer, 
-    size_t nSize, 
-    size_t nCount, 
+    const void *pvBuffer,
+    size_t nSize,
+    size_t nCount,
     PAL_FILE *pf
     )
 {
@@ -546,10 +547,10 @@ CorUnix::InternalFwrite(
 
     nWrittenBytes = fwrite(pvBuffer, nSize, nCount, f);
 
-    // Make sure no error ocurred. 
+    // Make sure no error ocurred.
     if ( nWrittenBytes < nCount )
     {
-        // Set the FILE* error code 
+        // Set the FILE* error code
         *pnErrorCode = PAL_FILE_ERROR;
     }
 
@@ -574,8 +575,8 @@ Return value:
 int
 _cdecl
 PAL_fseek(
-    PAL_FILE * pf, 
-    LONG lOffset, 
+    PAL_FILE * pf,
+    LONG lOffset,
     int nWhence
     )
 {

+ 21 - 14
pal/src/include/pal/palinternal.h

@@ -213,7 +213,6 @@ function_name() to call the system's implementation
 #define time DUMMY_time
 #define tm PAL_tm
 #define time_t PAL_time_t
-#define va_list DUMMY_va_list
 #define abs DUMMY_abs
 #define llabs DUMMY_llabs
 #define atan DUMMY_atan
@@ -312,15 +311,6 @@ function_name() to call the system's implementation
 
 // The standard headers define va_start and va_end as macros,
 // To avoid redefinition problems, undefine those macros.
-#ifdef va_start
-#undef va_start
-#endif
-#ifdef va_end
-#undef va_end
-#endif
-#ifdef va_copy
-#undef va_copy
-#endif
 
 #define ptrdiff_t PAL_ptrdiff_t
 #define intptr_t PAL_intptr_t
@@ -435,10 +425,6 @@ function_name() to call the system's implementation
 #undef unlink
 #undef size_t
 #undef time_t
-#undef va_list
-#undef va_start
-#undef va_end
-#undef va_copy
 #undef stdin
 #undef stdout
 #undef stderr
@@ -697,4 +683,25 @@ inline T* InterlockedCompareExchangePointerT(
 
 #define StackOverflowMessage "Process is terminated due to StackOverflowException.\n"
 
+#ifdef __ANDROID__
+#define S_IREAD   0000400
+#define S_IWRITE  0000200
+#define S_IEXEC   0000100
+
+#ifndef CC_AND_TAG
+#define CC_AND_TAG "chakracore-log"
+#endif
+#include <android/log.h>
+#include <stdarg.h>
+#define PRINT_LOG(...) \
+    __android_log_print(ANDROID_LOG_INFO, CC_AND_TAG, __VA_ARGS__)
+#define PRINT_ERROR(...) \
+    __android_log_print(ANDROID_LOG_ERROR, CC_AND_TAG, __VA_ARGS__)
+#else
+#define PRINT_LOG(...) \
+    swprintf(stdout, __VA_ARGS__)
+#define PRINT_ERROR(...) \
+    swprintf(stderr, __VA_ARGS__)
+#endif
+
 #endif /* _PAL_INTERNAL_H_ */

+ 52 - 46
pal/src/include/pal/printfcpp.hpp

@@ -1,6 +1,6 @@
 //
 // Copyright (c) Microsoft. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information. 
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
 //
 
 /*++
@@ -27,31 +27,37 @@ Abstract:
 
 #include <stdarg.h>
 
+#ifndef __ANDROID__
+typedef __builtin_va_list va_list;
+#else
+typedef __va_list va_list;
+#endif
+
 #ifdef __cplusplus
 
 extern "C"
-{                               
-    int 
+{
+    int
     __cdecl
     PAL__vsnprintf(
-        LPSTR Buffer, 
-        size_t Count, 
-        LPCSTR Format, 
+        LPSTR Buffer,
+        size_t Count,
+        LPCSTR Format,
         va_list ap);
-    
-    int 
-    __cdecl    
+
+    int
+    __cdecl
     PAL__wvsnprintf(
-        LPWSTR Buffer, 
-        size_t Count, 
-        LPCWSTR Format, 
+        LPWSTR Buffer,
+        size_t Count,
+        LPCWSTR Format,
         va_list ap);
 
-    int 
-    __cdecl 
+    int
+    __cdecl
     PAL_vfprintf(
-        PAL_FILE *stream, 
-        const char *format, 
+        PAL_FILE *stream,
+        const char *format,
         va_list ap);
 
     int
@@ -59,32 +65,32 @@ extern "C"
     PAL_vfwprintf(
         PAL_FILE *stream,
         const char16_t *format,
-        va_list ap);  
-} 
+        va_list ap);
+}
 
 namespace CorUnix
 {
-    int 
+    int
     InternalVfprintf(
-        CPalThread *pthrCurrent, 
-        PAL_FILE *stream, 
-        const char *format, 
+        CPalThread *pthrCurrent,
+        PAL_FILE *stream,
+        const char *format,
         va_list ap);
-    	
-    int 
+
+    int
     InternalWvsnprintf(
-        CPalThread *pthrCurrent, 
-        LPWSTR Buffer, 
-        size_t Count, 
-        LPCWSTR Format, 
+        CPalThread *pthrCurrent,
+        LPWSTR Buffer,
+        size_t Count,
+        LPCWSTR Format,
         va_list ap);
 
-    int 
+    int
     InternalVsnprintf(
-        CPalThread *pthrCurrent, 
-        LPSTR Buffer, 
-        size_t Count, 
-        LPCSTR Format, 
+        CPalThread *pthrCurrent,
+        LPSTR Buffer,
+        size_t Count,
+        LPCSTR Format,
         va_list ap);
 
     int
@@ -92,32 +98,32 @@ namespace CorUnix
         CPalThread *pthrCurrent,
         PAL_FILE *stream,
         const char16_t *format,
-        va_list ap); 
-    
+        va_list ap);
+
 }
 #else // __cplusplus
 
     int
     __cdecl
     PAL__vsnprintf(
-        LPSTR Buffer, 
-        size_t Count, 
-        LPCSTR Format, 
+        LPSTR Buffer,
+        size_t Count,
+        LPCSTR Format,
         va_list ap);
 
     int
     __cdecl
     PAL__wvsnprintf(
-        LPWSTR Buffer, 
-        size_t Count, 
-        LPCWSTR Format, 
+        LPWSTR Buffer,
+        size_t Count,
+        LPCWSTR Format,
         va_list ap);
 
-    int 
-    __cdecl 
+    int
+    __cdecl
     PAL_vfprintf(
-        PAL_FILE *stream, 
-        const char *format, 
+        PAL_FILE *stream,
+        const char *format,
         va_list ap);
 
     int
@@ -125,7 +131,7 @@ namespace CorUnix
     PAL_vfwprintf(
         PAL_FILE *stream,
         const char16_t *format,
-        va_list ap);     
+        va_list ap);
 
 #endif // __cplusplus
 

+ 4 - 1
pal/src/safecrt/mbusafecrt_internal.h

@@ -20,8 +20,11 @@
 #define MBUSAFECRT_INTERNAL_H
 
 #include "pal_mstypes.h"
-
+#ifndef __ANDROID__
 typedef __builtin_va_list va_list;
+#else
+#include <stdarg.h>
+#endif
 
 // The ifdef below are to accommodate Unix build
 // that complains about them being declared in stdarg.h already.

+ 1 - 0
test/Array/shift_unshift.baseline

@@ -48,6 +48,7 @@ e instanceOf TypeError = true
 a.length = 1
 ary.length = 18
 arr.length = 6
+Crosssite new length: 2
 Overridden unshift
 Overridden unshift
 Overridden unshift

+ 8 - 1
test/Array/shift_unshift.js

@@ -140,6 +140,14 @@ function test1(arr)
 
 WScript.Echo("arr.length = " + test1(new Array(10)));
 
+// OS 9357224: Array.prototype.unshift does not marshal parameters correctly
+function crossSiteUnshift() {
+    var sc0 = WScript.LoadScript('', 'samethread');
+    sc0.ary = [1];
+    return sc0.eval('Array.prototype.unshift.call(ary, null)');
+}
+WScript.Echo("Crosssite new length: " + crossSiteUnshift()); // 2
+
 //
 // To check bailouts for inlined unshift
 //
@@ -164,4 +172,3 @@ function foo()
 Array.prototype.unshift = function(){WScript.Echo ("Overridden unshift")};
 foo();
 WScript.Echo (a);
-

+ 2 - 0
test/Bugs/bug8554038.baseline

@@ -0,0 +1,2 @@
+1
+1

+ 23 - 13
lib/Common/Exceptions/InternalErrorException.h → test/Bugs/bug8554038.js

@@ -1,13 +1,23 @@
-//-------------------------------------------------------------------------------------------------------
-// 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
-
-namespace Js {
-
-    class InternalErrorException: public ExceptionBase
-    {
-    };
-
-} // namespace Js
+//-------------------------------------------------------------------------------------------------------
+// Copyright (C) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
+//-------------------------------------------------------------------------------------------------------
+
+var obj1 = {};
+var obj2 = {};
+obj1.method1 = rest;
+
+function foo() {
+  bar(1, 2);
+}
+
+function bar() {
+  obj1.method1.apply(obj2, arguments);
+}
+
+function rest(arg1, ...argRest) {
+  WScript.Echo(argRest.length);
+}
+
+foo();
+foo();

+ 7 - 0
test/Bugs/rlexe.xml

@@ -296,6 +296,13 @@
       <compile-flags>-maxinterpretcount:1 -maxsimplejitruncount:1</compile-flags>
     </default>
   </test>
+  <test>
+    <default>
+      <files>bug8554038.js</files>
+      <baseline>bug8554038.baseline</baseline>
+      <compile-flags>-maxinterpretcount:1 -off:simplejit</compile-flags>
+    </default>
+  </test>
   <test>
     <default>
       <files>b208_asmjs.js</files>

+ 3 - 0
test/Prototypes/ChangePrototype.baseline

@@ -26,3 +26,6 @@ Changing __proto__
 TypeSharing: Updating prototype object's DictionarySlot cache in __proto__.
 Changing __proto__
 TypeSharing: Reusing prototype object's DictionarySlot cache in __proto__.
+TypeSharing: Updating prototype object's InlineSlot cache in CreateObject.
+TypeSharing: Updating prototype object's DictionarySlot cache in __proto__.
+TypeSharing: Updating prototype object's DictionarySlot cache in __proto__.

+ 23 - 1
test/Prototypes/ChangePrototype.js

@@ -80,5 +80,27 @@ function test2() {
     y.__proto__ = obj;      // cached T2's inlineSlotCapacity doesn't match y's T1
 }
 
+function test3() {
+    // no switches needed
+    var proto = {};
+
+    function foo() {
+    }
+
+    var x = new foo();
+    var y = new foo();
+    y.__proto__ = proto; // empty type cached in map of proto object
+    y._a = 1; // evolve cached type created above
+    y._b = 1;
+    y._c = 1;
+    y._d = 1;
+    var z = new foo(); // this shrunk oldType's slotCapacity from 8 to 2.
+
+    // retrived the cached type which was evolved. 
+    // Realized that oldType's slotCapacity has shrunk, we shrink slot capacity of cachedType but it doesn't match because cachedType has evolved
+    z.__proto__ = proto;
+}
+
 test1();
-test2();
+test2();
+test3();

+ 64 - 0
test/es6/ES6Class_BaseClassConstruction.js

@@ -99,6 +99,70 @@ var tests = [
             assert.isTrue(result instanceof Boolean, "new ReturnArgumentBaseClass(new Boolean(false)); returns an instance of Boolean");
         }
     },
+    {
+        name: "Class that extends null has right prototypes",
+        body: function () {
+            class A extends null {}
+            assert.areEqual(Function.prototype, Object.getPrototypeOf(A));
+            assert.areEqual(null, Object.getPrototypeOf(A.prototype));
+        }
+    },
+    {
+        name: "Class that extends null binds this in constructor",
+        body: function () {
+            var thisVal;
+            class B extends null {
+                constructor() {  thisVal = this;  }
+            }
+
+            var b = new B();
+            assert.areEqual(true, b instanceof B);
+            assert.areEqual(thisVal, b);
+        }
+    },
+    {
+        name: "Class that extends null throws TypeError upon super call in constructor",
+        body: function () {
+            var beforeSuper = 0;
+            var afterSuper = 0;
+
+            class C extends null {
+              constructor() {
+                beforeSuper++;
+                super();
+                afterSuper++;
+              }
+            }
+
+            assert.throws(function(){new C();}, TypeError, "super", "Function is not a constructor");
+            assert.areEqual(1, beforeSuper);
+            assert.areEqual(0, afterSuper);
+        }
+    },
+    {
+        name: "Class that extends null with implicit return in constructor",
+        body: function () {
+            class A extends null {
+                constructor() {}
+            }
+
+            var a;
+            assert.doesNotThrow(()=>{a = new A()});
+            assert.areEqual(A.prototype, Object.getPrototypeOf(a));
+        }
+    },
+    {
+        name: "Class that extends null with explicit return in constructor",
+        body: function () {
+            class A extends null {
+                constructor() { return {}; }
+            }
+
+            var a;
+            assert.doesNotThrow(()=>{a = new A()});
+            assert.areEqual(Object.prototype, Object.getPrototypeOf(a));
+        }
+    },
 ];
 
 testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });

+ 100 - 73
test/es6/proxybug.js

@@ -1,73 +1,100 @@
-//-------------------------------------------------------------------------------------------------------
-// Copyright (C) Microsoft. All rights reserved.
-// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
-//-------------------------------------------------------------------------------------------------------
-
-var passed = true;
-
-function test1() {
-  var sc4 = WScript.LoadScript('function test(){ obj2.prop4 = {needMarshal:true}; }', 'samethread');
-  var obj1 = new Proxy({}, { set: function (target, property, value) { Reflect.set(value); } })
-  sc4.obj2 = obj1;
-  sc4.test();
-  obj1.prop4 = { needMarshal: false };
-  obj1.prop5 = { needMarshal: false };
-};
-test1();
-
-
-function test2() {
-  var bug = new Proxy(new Array(1), { has: () => true });
-  var a = bug.concat();
-  if (a[0] !== undefined || a.length !== 1) {
-    passed = false;
-  } else {
-    passed &= true;
-  }
-}
-test2();
-
-function test3() {
-  var obj1 = {};
-  var arrObj0 = {};
-  var x = 1
-  var proxyHandler = {};
-  proxyHandler['get'] = function () { };
-  proxyHandler['defineProperty'] = function (target, property, descriptor) {
-    return Reflect.defineProperty(target, property, descriptor);
-  };
-  proxyHandler['isExtensible'] = function (target) {
-    arrObj0.prop0;
-    arrObj0 = new Proxy(arrObj0, proxyHandler);
-    return Reflect.isExtensible(target);
-  };
-  arrObj0 = new Proxy(arrObj0, proxyHandler);
-  arrObj0 = new Proxy(arrObj0, proxyHandler);
-  do {
-    var sc3 = WScript.LoadScript('function test(){arrObj0.length = arrObj0[obj1];}', 'samethread');
-    sc3.obj1 = obj1;
-    sc3.arrObj0 = arrObj0;
-    sc3.test();
-  } while (x--);
-}
-test3();
-
-function test4() {
-  var func3 = function () { };
-  var ary = Array();
-  var proxyHandler = {};
-  var ownkeys = Reflect.ownKeys(ary);
-  proxyHandler['ownKeys'] = function () {
-    func3() == 0;
-    return ownkeys;
-  };
-
-  ary = new Proxy(ary, proxyHandler);
-  var sc2 = WScript.LoadScript('function test(){for (var x in ary);}', 'samethread');
-  sc2.ary = ary;
-  sc2.func3 = func3;
-  sc2.test();
-}
-test4();
-
-print(passed ? "passed" : "failed");
+//-------------------------------------------------------------------------------------------------------
+// Copyright (C) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
+//-------------------------------------------------------------------------------------------------------
+
+var passed = true;
+
+function test1() {
+  var sc4 = WScript.LoadScript('function test(){ obj2.prop4 = {needMarshal:true}; }', 'samethread');
+  var obj1 = new Proxy({}, { set: function (target, property, value) { Reflect.set(value); } })
+  sc4.obj2 = obj1;
+  sc4.test();
+  obj1.prop4 = { needMarshal: false };
+  obj1.prop5 = { needMarshal: false };
+};
+test1();
+
+
+function test2() {
+  var bug = new Proxy(new Array(1), { has: () => true });
+  var a = bug.concat();
+  if (a[0] !== undefined || a.length !== 1) {
+    passed = false;
+  } else {
+    passed &= true;
+  }
+}
+test2();
+
+function test3() {
+  var obj1 = {};
+  var arrObj0 = {};
+  var x = 1
+  var proxyHandler = {};
+  proxyHandler['get'] = function () { };
+  proxyHandler['defineProperty'] = function (target, property, descriptor) {
+    return Reflect.defineProperty(target, property, descriptor);
+  };
+  proxyHandler['isExtensible'] = function (target) {
+    arrObj0.prop0;
+    arrObj0 = new Proxy(arrObj0, proxyHandler);
+    return Reflect.isExtensible(target);
+  };
+  arrObj0 = new Proxy(arrObj0, proxyHandler);
+  arrObj0 = new Proxy(arrObj0, proxyHandler);
+  do {
+    var sc3 = WScript.LoadScript('function test(){arrObj0.length = arrObj0[obj1];}', 'samethread');
+    sc3.obj1 = obj1;
+    sc3.arrObj0 = arrObj0;
+    sc3.test();
+  } while (x--);
+}
+test3();
+
+function test4() {
+  var func3 = function () { };
+  var ary = Array();
+  var proxyHandler = {};
+  var ownkeys = Reflect.ownKeys(ary);
+  proxyHandler['ownKeys'] = function () {
+    func3() == 0;
+    return ownkeys;
+  };
+
+  ary = new Proxy(ary, proxyHandler);
+  var sc2 = WScript.LoadScript('function test(){for (var x in ary);}', 'samethread');
+  sc2.ary = ary;
+  sc2.func3 = func3;
+  sc2.test();
+}
+test4();
+
+
+function test5() {
+  function makeArrayLength() {
+  }
+  function leaf() {
+  }
+  var obj1 = {};
+  var arrObj0 = {};
+  var func1 = function () {
+  };
+  obj1.method0 = func1;
+  obj1.method1 = func1;
+  var protoObj1 = Object();
+  var proxyHandler = {};
+  var v0 = new Proxy(obj1.method0, proxyHandler);
+  var sc9 = WScript.LoadScript('', 'samethread');
+  sc9.arrObj0 = arrObj0;
+  sc9.obj1 = obj1;
+  sc9.protoObj1 = protoObj1;
+  sc9.v0 = v0;
+  sc9.makeArrayLength = makeArrayLength;
+  sc9.leaf = leaf;
+  var sc9_cctx = sc9.WScript.LoadScript('function test() {var b = 1; arrObj0.length= makeArrayLength((arrObj0.length != arrObj0.prop4));\n       var d = obj1.method1.call(protoObj1 , (((new v0((protoObj1.length >>>= -866043558),(protoObj1.prop0 = 1),leaf,leaf)) , (b ? 1 : 16678541)) & (typeof(arrObj0.prop4)  == \'number\') ), ((1) * (d %= (1 * obj1.length - b)) + obj1.method0.call(arrObj0 , ("a" instanceof ((typeof RegExp == \'function\' ) ? RegExp : Object)), (\'prop0\' in arrObj0), leaf, leaf)), leaf, leaf);\n       var uniqobj21 = Object.create(arrObj0);\n       arrObj0.length= makeArrayLength(((1 ) % -520343586));\n       ;\n       }');
+  sc9_cctx.test();
+}
+test5();
+
+print(passed ? "passed" : "failed");

+ 54 - 0
test/typedarray/TypedArrayBuiltins.js

@@ -338,6 +338,60 @@ var tests = [
                 test(taCtor);
             }
         }
+    },
+    {
+        name: "TypedArray : Error cases for constructor TypedArray( buffer, byteOffset, length )",
+        body: function () {
+            var sourceArrayBuffer1 = new ArrayBuffer(10);
+
+            // offset > byteLength
+            function TestOffsetBeyondSourceArrayBufferLength()
+            {
+                new Int16Array(sourceArrayBuffer1, 12);
+            }
+
+            assert.throws(
+                TestOffsetBeyondSourceArrayBufferLength, 
+                RangeError, 
+                "TypedArray: Expected the function to throw RangeError as (offset > byteLength).", 
+                "Invalid offset/length when creating typed array")
+
+            // offset % elementSize != 0
+            function TestIncorrectOffset()
+            {
+                new Int16Array(sourceArrayBuffer1, 7, 1);
+            }
+
+            assert.throws(
+                TestIncorrectOffset, 
+                RangeError, 
+                "TypedArray: Expected the function to throw RangeError as (offset % elementSize) != 0.", 
+                "Invalid offset/length when creating typed array")
+
+            // (Length * elementSize + offset) beyond array buffer length.
+            function TestLengthBeyondSourceArrayBufferLength()
+            {
+                new Int16Array(sourceArrayBuffer1, 6, 4);
+            }
+
+            assert.throws(
+                TestLengthBeyondSourceArrayBufferLength, 
+                RangeError, 
+                "TypedArray: Expected the function to throw RangeError as ((Length * elementSize + offset)) != byteLength.", 
+                "Invalid offset/length when creating typed array")
+
+            // (byteLength - offset) % elementSize != 0
+            function TestOffsetPlusElementSizeBeyondSourceArrayBufferLength()
+            {
+                new Int32Array(sourceArrayBuffer1, 4);
+            }
+
+            assert.throws(
+                TestOffsetPlusElementSizeBeyondSourceArrayBufferLength, 
+                RangeError, 
+                "TypedArray: Expected the function to throw RangeError as (byteLength - offset) % elementSize != 0.", 
+                "Invalid offset/length when creating typed array")
+        }
     }
 ];
 

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 112 - 112
test/typedarray/dataview.baseline


+ 1 - 2
test/typedarray/dataview.js

@@ -2,7 +2,6 @@
 // Copyright (C) Microsoft. All rights reserved.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
-
 var getFuncs = ['getInt8', 'getUint8', 'getInt16', 'getUint16', 'getInt32', 'getUint32', 'getFloat32', 'getFloat64'];
 var setFuncs = ['setInt8', 'setUint8', 'setInt16', 'setUint16', 'setInt32', 'setUint32', 'setFloat32', 'setFloat64'];
 var dataSize = [1,1,2,2,4,4,4,8];
@@ -104,7 +103,7 @@ function testOneOffset(dataView, offSet, value)
                 print(getFuncs[j] + " = " +  result);
                 }
 
-            print("set little endian value offset " + offSet + " value " + value + " method " + setFuncs[i]);
+            print("set big endian value offset " + offSet + " value " + value + " method " + setFuncs[i]);
             print("results of little endian reads are: ");
             dataView[setFuncs[i]](offSet, value, false);
             for (var j = 0; j < getFuncs.length; j++)

+ 4 - 0
test/typedarray/dataview1.baseline

@@ -22,3 +22,7 @@ PASS
 PASS
 PASS
 PASS
+16
+12
+16
+2

+ 56 - 1
test/typedarray/dataview1.js

@@ -96,8 +96,63 @@ function test5() {
         "DataView constructor argument byteLength is invalid");
 }
 
+function TestDataViewConstructorWithOffset()
+{
+    var arrayBuffer = new ArrayBuffer(16);
+    print(arrayBuffer.byteLength);
+    //Constructor with offset specified.
+    var dataView2 = new DataView(arrayBuffer, 4);
+    print(dataView2.byteLength);
+}
+
+function TestDataViewConstructorWithOffsetAndLength()
+{
+    var arrayBuffer = new ArrayBuffer(16);
+    print(arrayBuffer.byteLength);
+    // Constructor with offset and length specified.
+    var dataView3 = new DataView(arrayBuffer, 8, 2);
+    print(dataView3.byteLength);
+}
+
+function TestDataViewConstructorCalledWithoutNew()
+{
+    var arrayBuffer = new ArrayBuffer(16);
+    var dataView4 = DataView(arrayBuffer, 8, 2);
+}
+
+function TestDataViewConstructorCalledWithoutArguments()
+{
+    var dataView5 = new DataView();
+}
+
+function TestDataViewCostructorCalledWithJavascriptArray()
+{
+    var normalArray = [1, 2, 3, 4, 5];
+    var dataView6 = new DataView(normalArray);
+}
+
+function TestDataViewCostructorOffsetBeyondArrayBufferByteLength()
+{
+    var arrayBuffer = new ArrayBuffer(16);
+    var dataView7 = new DataView(arrayBuffer, 17);
+}
+
+function TestDataViewCostructorOffsetPlusLengthBeyondArrayBufferByteLength()
+{
+    var arrayBuffer = new ArrayBuffer(16);
+    var dataView7 = new DataView(arrayBuffer, 14, 16);
+}
+
 test1();
 test2();
 test3();
 test4();
-test5();
+test5();
+
+TestDataViewConstructorWithOffset();
+TestDataViewConstructorWithOffsetAndLength();
+assert.throws(TestDataViewConstructorCalledWithoutNew, TypeError, "", "DataView: cannot be called without the new keyword");
+assert.throws(TestDataViewConstructorCalledWithoutArguments, TypeError, "", "Required argument buffer in DataView method is not specified");
+assert.throws(TestDataViewCostructorCalledWithJavascriptArray, TypeError, "", "Required argument buffer in DataView method is not specified");
+assert.throws(TestDataViewCostructorOffsetBeyondArrayBufferByteLength, RangeError, "", "DataView constructor argument byteOffset is invalid");
+assert.throws(TestDataViewCostructorOffsetPlusLengthBeyondArrayBufferByteLength, RangeError, "", "DataView constructor argument byteLength is invalid");

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 112 - 112
test/typedarray/samethread.baseline


+ 13 - 0
test/typedarray/transfer.js

@@ -2,6 +2,9 @@
 // Copyright (C) Microsoft. All rights reserved.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
+if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in ch
+    this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
+}
 
 var buf1 = new ArrayBuffer(1<<21);
 new Int8Array(buf1)[0] = 42;
@@ -32,3 +35,13 @@ print(buf6.byteLength);
 var buf7 = ArrayBuffer.transfer(buf6, 0);
 print(buf6.byteLength);
 print(buf7.byteLength);
+
+// Test the DataView constructor with a detached buffer.
+function TestDataViewCostructorDetachedBuffer()
+{
+    var arrayBufferToDetach = new ArrayBuffer(16);
+    var arrayBufferNew = ArrayBuffer.transfer(arrayBufferToDetach, 0);
+    var dataView8 = new DataView(arrayBufferToDetach);
+}
+
+assert.throws(TestDataViewCostructorDetachedBuffer, TypeError, "", "'this' is not a DataView object");

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác