Răsfoiți Sursa

Add WScript.Flag to change config flag from javascript

Michael Ferris 9 ani în urmă
părinte
comite
1a6bc8fe9a
2 a modificat fișierele cu 21 adăugiri și 0 ștergeri
  1. 20 0
      bin/ch/WScriptJsrt.cpp
  2. 1 0
      bin/ch/WScriptJsrt.h

+ 20 - 0
bin/ch/WScriptJsrt.cpp

@@ -836,6 +836,7 @@ bool WScriptJsrt::Initialize()
     IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "RequestAsyncBreak", RequestAsyncBreakCallback));
     IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadBinaryFile", LoadBinaryFileCallback));
     IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadTextFile", LoadTextFileCallback));
+    IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Flag", FlagCallback));
 
     // ToDo Remove
     IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Edit", EmptyCallback));
@@ -1027,6 +1028,25 @@ Error:
     return returnValue;
 }
 
+JsValueRef __stdcall WScriptJsrt::FlagCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
+{
+    HRESULT hr = E_FAIL;
+    JsValueRef returnValue = JS_INVALID_REFERENCE;
+    JsErrorCode errorCode = JsNoError;
+
+    IfJsrtErrorSetGo(ChakraRTInterface::JsGetUndefinedValue(&returnValue));
+    if (argumentCount > 1)
+    {
+        AutoString cmd;
+        IfJsrtErrorSetGo(cmd.Initialize(arguments[1]));
+        char16* argv[] = { nullptr, cmd.GetWideString() };
+        ChakraRTInterface::SetConfigFlags(2, argv, nullptr);
+    }
+
+Error:
+    return returnValue;
+}
+
 bool WScriptJsrt::PrintException(LPCSTR fileName, JsErrorCode jsErrorCode)
 {
     LPCWSTR errorTypeString = ConvertErrorCodeToMessage(jsErrorCode);

+ 1 - 0
bin/ch/WScriptJsrt.h

@@ -111,6 +111,7 @@ private:
 
     static JsValueRef __stdcall LoadBinaryFileCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState);
     static JsValueRef __stdcall LoadTextFileCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState);
+    static JsValueRef __stdcall FlagCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState);
 
     static MessageQueue *messageQueue;
     static DWORD_PTR sourceContext;