From d659fca9fc6de6f1bb1d9cd7a1af18554636d309 Mon Sep 17 00:00:00 2001
From: Witold Filipczyk <witekfl@poczta.onet.pl>
Date: Mon, 30 Aug 2021 14:14:51 +0200
Subject: [PATCH] [spidermonkey] Changed jshandle_value_to_string

---
 src/ecmascript/spidermonkey/document.c     | 25 +++++++++++-----------
 src/ecmascript/spidermonkey/localstorage.c |  4 ++--
 src/ecmascript/spidermonkey/util.h         | 20 ++++++++---------
 3 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/src/ecmascript/spidermonkey/document.c b/src/ecmascript/spidermonkey/document.c
index 406cd83fe..6f0a0f94a 100644
--- a/src/ecmascript/spidermonkey/document.c
+++ b/src/ecmascript/spidermonkey/document.c
@@ -1147,12 +1147,11 @@ document_write_do(JSContext *ctx, unsigned int argc, JS::Value *rval, int newlin
 
 	if (argc >= 1)
 	{
-		for (int i=0;i<argc;++i) 
+		for (int i = 0; i < argc; ++i)
 		{
-
-			jshandle_value_to_char_string(&code,ctx,&args[i]);
+			jshandle_value_to_char_string(&code, ctx, args[i]);
 		}
-	
+
 		if (newline) 
 		{
 			add_to_string(&code, "\n");
@@ -1245,8 +1244,8 @@ document_replace(JSContext *ctx, unsigned int argc, JS::Value *vp)
 	init_string(&needle);
 	init_string(&heystack);
 
-	jshandle_value_to_char_string(&needle, ctx, &args[0]);
-	jshandle_value_to_char_string(&heystack, ctx, &args[1]);
+	jshandle_value_to_char_string(&needle, ctx, args[0]);
+	jshandle_value_to_char_string(&heystack, ctx, args[1]);
 
 	//DBG("doc replace %s %s\n", needle.source, heystack.source);
 
@@ -1345,7 +1344,7 @@ document_createComment(JSContext *ctx, unsigned int argc, JS::Value *vp)
 
 	struct string idstr;
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string text = idstr.source;
 	done_string(&idstr);
 
@@ -1394,7 +1393,7 @@ document_createElement(JSContext *ctx, unsigned int argc, JS::Value *vp)
 
 	struct string idstr;
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string text = idstr.source;
 	done_string(&idstr);
 
@@ -1443,7 +1442,7 @@ document_createTextNode(JSContext *ctx, unsigned int argc, JS::Value *vp)
 
 	struct string idstr;
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string text = idstr.source;
 	done_string(&idstr);
 
@@ -1493,7 +1492,7 @@ document_getElementById(JSContext *ctx, unsigned int argc, JS::Value *vp)
 	struct string idstr;
 
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string id = idstr.source;
 
 	std::string xpath = "//*[@id=\"";
@@ -1555,7 +1554,7 @@ document_getElementsByClassName(JSContext *ctx, unsigned int argc, JS::Value *vp
 	struct string idstr;
 
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string id = idstr.source;
 
 	std::string xpath = "//*[@class=\"";
@@ -1617,7 +1616,7 @@ document_getElementsByName(JSContext *ctx, unsigned int argc, JS::Value *vp)
 	struct string idstr;
 
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string id = idstr.source;
 
 	std::string xpath = "//*[@id=\"";
@@ -1680,7 +1679,7 @@ document_getElementsByTagName(JSContext *ctx, unsigned int argc, JS::Value *vp)
 	struct string idstr;
 
 	init_string(&idstr);
-	jshandle_value_to_char_string(&idstr, ctx, &args[0]);
+	jshandle_value_to_char_string(&idstr, ctx, args[0]);
 	std::string id = idstr.source;
 	std::transform(id.begin(), id.end(), id.begin(), ::tolower);
 
diff --git a/src/ecmascript/spidermonkey/localstorage.c b/src/ecmascript/spidermonkey/localstorage.c
index 926ddd86d..0c2569b4f 100644
--- a/src/ecmascript/spidermonkey/localstorage.c
+++ b/src/ecmascript/spidermonkey/localstorage.c
@@ -211,8 +211,8 @@ localstorage_setitem(JSContext *ctx, unsigned int argc, JS::Value *vp)
 	       return(true);
         }
 
-	jshandle_value_to_char_string(&key,ctx,&args[0]);
-	jshandle_value_to_char_string(&val,ctx,&args[1]);
+	jshandle_value_to_char_string(&key, ctx, args[0]);
+	jshandle_value_to_char_string(&val, ctx, args[1]);
 
 	saveToStorage(key.source,val.source);
 
diff --git a/src/ecmascript/spidermonkey/util.h b/src/ecmascript/spidermonkey/util.h
index 6f6354e31..fd7e599d5 100644
--- a/src/ecmascript/spidermonkey/util.h
+++ b/src/ecmascript/spidermonkey/util.h
@@ -8,9 +8,7 @@ static void string_to_jsval(JSContext *ctx, JS::Value *vp, char *string);
 static void astring_to_jsval(JSContext *ctx, JS::Value *vp, char *string);
 
 static int jsval_to_boolean(JSContext *ctx, JS::Value *vp);
-static void jshandle_value_to_char_string(struct string *string, JSContext *ctx, JS::MutableHandleValue *obj);
-
-
+static void jshandle_value_to_char_string(struct string *string, JSContext *ctx, JS::HandleValue obj);
 
 /** Inline functions */
 
@@ -43,20 +41,20 @@ jsval_to_boolean(JSContext *ctx, JS::Value *vp)
  * is different for String and Number and must be
  * handled accordingly */
 void
-jshandle_value_to_char_string(struct string *string,JSContext *ctx, JS::MutableHandleValue *obj)
+jshandle_value_to_char_string(struct string *string, JSContext *ctx, JS::HandleValue obj)
 {
 	init_string(string);
-	
-	if (obj->isString())
+
+	if (obj.isString())
 	{
-		add_to_string(string,JS_EncodeString(ctx, obj->toString()));
-	} else if (obj->isNumber())
+		add_to_string(string, jsval_to_string(ctx, obj));
+	} else if (obj.isNumber())
 	{
-		int tmpinta = obj->toNumber();
+		int tmpinta = obj.toNumber();
 		add_format_to_string(string, "%d", tmpinta);
-	} else if (obj->isBoolean())
+	} else if (obj.isBoolean())
 	{
-		int tmpinta = obj->toNumber();
+		int tmpinta = obj.toNumber();
 		add_format_to_string(string, "%d", tmpinta);
 	}
 }