From da8376c076e9590339cacb9c690fc483e4edd955 Mon Sep 17 00:00:00 2001
From: Akrosh Gandhi <akroshg@microsoft.com>
Date: Tue, 16 Jan 2018 16:18:38 -0800
Subject: [PATCH] deps: update ChakraCore to Microsoft/ChakraCore@12a738b390

[1.8>1.9] [MERGE #4540 @akroshg] Module : SetModuleHostInfo's error propagation properly and useless assert removal.

Merge pull request #4540 from akroshg:sethostinfo

Reviewed-By: chakrabot <chakrabot@users.noreply.github.com>
---
 .../core/bin/NativeTests/JsRTApiTest.cpp      | 41 +++++++++++++++++++
 .../core/lib/Jsrt/Core/JsrtCore.cpp           |  6 ++-
 .../Language/SourceTextModuleRecord.cpp       |  1 -
 3 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/deps/chakrashim/core/bin/NativeTests/JsRTApiTest.cpp b/deps/chakrashim/core/bin/NativeTests/JsRTApiTest.cpp
index d3f7b83ba50..bbad814de6e 100644
--- a/deps/chakrashim/core/bin/NativeTests/JsRTApiTest.cpp
+++ b/deps/chakrashim/core/bin/NativeTests/JsRTApiTest.cpp
@@ -2192,6 +2192,47 @@ namespace JsRTApiTest
 
     }
 
+    void SetModuleHostInfoTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime)
+    {
+        JsModuleRecord requestModule = JS_INVALID_REFERENCE;
+        JsValueRef specifier = nullptr;
+
+        REQUIRE(JsPointerToString(_u("mod1.js"), wcslen(_u("mod1.js")), &specifier) == JsNoError);
+        REQUIRE(JsInitializeModuleRecord(nullptr, specifier, &requestModule) == JsNoError);
+        JsValueRef error = nullptr, errorMsg = nullptr;
+        REQUIRE(JsPointerToString(_u("test error"), wcslen(_u("test error")), &errorMsg) == JsNoError);
+        REQUIRE(JsCreateError(errorMsg, &error) == JsNoError);
+
+        REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_Exception, error) == JsNoError);
+
+        JsValueRef errorOut = nullptr;
+        JsGetModuleHostInfo(requestModule, JsModuleHostInfo_Exception, &errorOut);
+        REQUIRE(errorOut == error);
+
+        //REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_Exception, nullptr) == JsNoError);
+
+        REQUIRE(JsPointerToString(_u("mod2.js"), wcslen(_u("mod2.js")), &specifier) == JsNoError);
+        REQUIRE(JsInitializeModuleRecord(nullptr, specifier, &requestModule) == JsNoError);
+
+        successTest.mainModule = requestModule;
+        REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Succes_NMRC) == JsNoError);
+
+        // Parsing
+        JsValueRef errorObject1 = JS_INVALID_REFERENCE;
+        const char* fileContent = "var x = 10";
+        REQUIRE(JsParseModuleSource(requestModule, 0, (LPBYTE)fileContent,
+            (unsigned int)strlen(fileContent), JsParseModuleSourceFlags_DataIsUTF8, &errorObject1) == JsNoError);
+
+        // This should not pass
+        REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_Exception, error) != JsNoError);
+    }
+
+    TEST_CASE("ApiTest_SetModuleHostInfoTest", "[ApiTest]")
+    {
+        JsRTApiTest::WithSetup(JsRuntimeAttributeEnableExperimentalFeatures, SetModuleHostInfoTest);
+
+    }
+
     ModuleResponseData reentrantParseData;
     static JsErrorCode CALLBACK ReentrantParse_FIMC(_In_ JsModuleRecord referencingModule, _In_ JsValueRef specifier, _Outptr_result_maybenull_ JsModuleRecord* dependentModuleRecord)
     {
diff --git a/deps/chakrashim/core/lib/Jsrt/Core/JsrtCore.cpp b/deps/chakrashim/core/lib/Jsrt/Core/JsrtCore.cpp
index b6ab444ec58..eaa3bf96659 100644
--- a/deps/chakrashim/core/lib/Jsrt/Core/JsrtCore.cpp
+++ b/deps/chakrashim/core/lib/Jsrt/Core/JsrtCore.cpp
@@ -158,8 +158,10 @@ JsSetModuleHostInfo(
         switch (moduleHostInfo)
         {
         case JsModuleHostInfo_Exception:
-            moduleRecord->OnHostException(hostInfo);
-            break;
+            {
+            HRESULT hr = moduleRecord->OnHostException(hostInfo);
+            return (hr == NOERROR) ? JsNoError : JsErrorInvalidArgument;
+            }
         case JsModuleHostInfo_HostDefined:
             moduleRecord->SetHostDefined(hostInfo);
             break;
diff --git a/deps/chakrashim/core/lib/Runtime/Language/SourceTextModuleRecord.cpp b/deps/chakrashim/core/lib/Runtime/Language/SourceTextModuleRecord.cpp
index 682c343f978..d894dd14e88 100644
--- a/deps/chakrashim/core/lib/Runtime/Language/SourceTextModuleRecord.cpp
+++ b/deps/chakrashim/core/lib/Runtime/Language/SourceTextModuleRecord.cpp
@@ -960,7 +960,6 @@ namespace Js
         {
             return E_INVALIDARG;
         }
-        AssertMsg(!WasParsed(), "shouldn't be called after a module is parsed");
         if (WasParsed())
         {
             return E_INVALIDARG;