From f594720280b2e40d81fa6e286a0ef8868687ef7e Mon Sep 17 00:00:00 2001
From: Pierre Lejeune <superheron@gmail.com>
Date: Sat, 30 Jun 2018 21:10:06 +0200
Subject: [PATCH] Build with mozjs-52

Fixes #71
---
 libproxy/cmake/modules/pacrunner_mozjs.cmk |  2 +-
 libproxy/modules/pacrunner_mozjs.cpp       | 19 +++++++------------
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/libproxy/cmake/modules/pacrunner_mozjs.cmk b/libproxy/cmake/modules/pacrunner_mozjs.cmk
index c2ae3db..20857fb 100644
--- a/libproxy/cmake/modules/pacrunner_mozjs.cmk
+++ b/libproxy/cmake/modules/pacrunner_mozjs.cmk
@@ -9,7 +9,7 @@ if(WIN32)
 elseif(NOT APPLE)
   option(WITH_MOZJS "Search for MOZJS package" ON)
   if (WITH_MOZJS)
-    pkg_search_module(MOZJS mozjs-38)
+    pkg_search_module(MOZJS mozjs-52 mozjs-60)
     if(MOZJS_FOUND)
       include_directories(${MOZJS_INCLUDE_DIRS})
       link_directories(${MOZJS_LIBRARY_DIRS})
diff --git a/libproxy/modules/pacrunner_mozjs.cpp b/libproxy/modules/pacrunner_mozjs.cpp
index a70b2e9..ed07c69 100644
--- a/libproxy/modules/pacrunner_mozjs.cpp
+++ b/libproxy/modules/pacrunner_mozjs.cpp
@@ -35,6 +35,7 @@ using namespace libproxy;
 #pragma GCC diagnostic ignored "-Winvalid-offsetof"
 #include <jsapi.h>
 #pragma GCC diagnostic error "-Winvalid-offsetof"
+#include <js/Initialization.h>
 #include <js/CallArgs.h>
 
 #include "pacutils.h"
@@ -111,17 +112,14 @@ class mozjs_pacrunner : public pacrunner {
 	mozjs_pacrunner(string pac, const url& pacurl) throw (bad_alloc) : pacrunner(pac, pacurl) {
 
 		// Set defaults
-		this->jsrun = nullptr;
 		this->jsctx = nullptr;
 		JS_Init();
 
-		// Initialize Javascript runtime environment
-		if (!(this->jsrun = JS_NewRuntime(1024 * 1024)))                  goto error;
-		if (!(this->jsctx = JS_NewContext(this->jsrun, 1024 * 1024)))     goto error;
+		// Initialize Javascript context
+		if (!(this->jsctx = JS_NewContext(1024 * 1024)))     goto error;
 		{
 			JS::RootedValue  rval(this->jsctx);
 			JS::CompartmentOptions compart_opts;
-			compart_opts.setVersion(JSVERSION_LATEST);
 
 			this->jsglb = new JS::Heap<JSObject*>(JS_NewGlobalObject(
 								  this->jsctx, &cls,
@@ -139,16 +137,15 @@ class mozjs_pacrunner : public pacrunner {
 			JS::CompileOptions options(this->jsctx);
 			options.setUTF8(true);
 
-			JS::Evaluate(this->jsctx, global, options, JAVASCRIPT_ROUTINES,
-				     strlen(JAVASCRIPT_ROUTINES), &rval);
+			JS::Evaluate(this->jsctx, options, JAVASCRIPT_ROUTINES,
+				     strlen(JAVASCRIPT_ROUTINES), JS::MutableHandleValue(&rval));
 
 			// Add PAC to the environment
-			JS::Evaluate(this->jsctx, global, options, pac.c_str(), pac.length(), &rval);
+			JS::Evaluate(this->jsctx, options, pac.c_str(), pac.length(), JS::MutableHandleValue(&rval));
 			return;
 		}
 		error:
 			if (this->jsctx) JS_DestroyContext(this->jsctx);
-			if (this->jsrun) JS_DestroyRuntime(this->jsrun);
 			throw bad_alloc();
 	}
 
@@ -156,7 +153,6 @@ class mozjs_pacrunner : public pacrunner {
 		if (this->jsac) delete this->jsac;
 		if (this->jsglb) delete this->jsglb;
 		if (this->jsctx) JS_DestroyContext(this->jsctx);
-		if (this->jsrun) JS_DestroyRuntime(this->jsrun);
 		JS_ShutDown();
 	}
 
@@ -178,7 +174,7 @@ class mozjs_pacrunner : public pacrunner {
 		JS::RootedObject global(this->jsctx,this->jsglb->get());
 		bool result = JS_CallFunctionName(this->jsctx, global, "FindProxyForURL", args, &rval);
 		if (!result) return "";
-		
+
 		char * tmpanswer = JS_EncodeString(this->jsctx, rval.toString());
 		string answer = string(tmpanswer);
 		JS_free(this->jsctx, tmpanswer);
@@ -188,7 +184,6 @@ class mozjs_pacrunner : public pacrunner {
 	}
 
 private:
-	JSRuntime *jsrun;
 	JSContext *jsctx;
 	JS::Heap<JSObject*> *jsglb;
 	JSAutoCompartment *jsac;
