@@ -53,7 +53,9 @@ extern "C" {
5353 const char * code_string = Rf_translateCharUTF8 (STRING_ELT (code_string_, 0 ));
5454 JSValue val = JS_Eval (ctx.get (), code_string, strlen (code_string), " <input>" , JS_EVAL_TYPE_GLOBAL);
5555 SEXP rtn = cpp11::as_sexp (!JS_IsException (val));
56+ PROTECT (rtn);
5657 JS_FreeValue (ctx.get (), val);
58+ UNPROTECT (1 );
5759 return rtn;
5860 END_CPP11
5961 }
@@ -76,10 +78,12 @@ extern "C" {
7678 JS_FreeValue (ctx.get (), arg);
7779 }
7880
79- SEXP result = cpp11::sexp (quickjsr::JSValue_to_SEXP (ctx.get (), result_js));
81+ SEXP result = quickjsr::JSValue_to_SEXP (ctx.get (), result_js);
82+ PROTECT (result);
8083 JS_FreeValue (ctx.get (), fun);
8184 JS_FreeValue (ctx.get (), global);
8285 JS_FreeValue (ctx.get (), result_js);
86+ UNPROTECT (1 );
8387
8488 return result;
8589 END_CPP11
@@ -90,9 +94,11 @@ extern "C" {
9094 ContextXPtr ctx (ctx_ptr_);
9195 JSValue global = JS_GetGlobalObject (ctx.get ());
9296 JSValue result = quickjsr::JS_GetPropertyRecursive (ctx.get (), global, Rf_translateCharUTF8 (STRING_ELT (js_obj_name, 0 )));
93- SEXP rtn = cpp11::sexp (quickjsr::JSValue_to_SEXP (ctx.get (), result));
97+ SEXP rtn = quickjsr::JSValue_to_SEXP (ctx.get (), result);
98+ PROTECT (rtn);
9499 JS_FreeValue (ctx.get (), result);
95100 JS_FreeValue (ctx.get (), global);
101+ UNPROTECT (1 );
96102 return rtn;
97103 END_CPP11
98104 }
@@ -118,11 +124,12 @@ extern "C" {
118124 JSContext* rt_ctx = quickjsr::JS_NewCustomContext (rt);
119125
120126 JSValue val = JS_Eval (rt_ctx, eval_string, strlen (eval_string), " <input>" , JS_EVAL_TYPE_GLOBAL);
121- SEXP rtn = cpp11::sexp ( quickjsr::JSValue_to_SEXP (rt_ctx, val) );
122-
127+ SEXP rtn = quickjsr::JSValue_to_SEXP (rt_ctx, val);
128+ PROTECT (rtn);
123129 JS_FreeValue (rt_ctx, val);
124130 JS_FreeContext (rt_ctx);
125131 JS_FreeRuntime (rt);
132+ UNPROTECT (1 );
126133
127134 return rtn;
128135 END_CPP11
@@ -136,14 +143,17 @@ extern "C" {
136143 JSValue arg = quickjsr::SEXP_to_JSValue (rt_ctx, arg_, LOGICAL_ELT (auto_unbox_, 0 ));
137144 JSValue result_js = JS_JSONStringify (rt_ctx, arg, JS_UNDEFINED, JS_UNDEFINED);
138145 const char * res_str = JS_ToCString (rt_ctx, result_js);
139- std::string json = res_str ? res_str : " " ;
146+ SEXP json = cpp11::as_sexp (res_str ? res_str : " " );
147+ PROTECT (json);
140148
141149 JS_FreeCString (rt_ctx, res_str);
142150 JS_FreeValue (rt_ctx, result_js);
143151 JS_FreeValue (rt_ctx, arg);
144152 JS_FreeContext (rt_ctx);
145153 JS_FreeRuntime (rt);
146- return cpp11::as_sexp (json);
154+ UNPROTECT (1 );
155+
156+ return json;
147157 END_CPP11
148158 }
149159
@@ -154,10 +164,12 @@ extern "C" {
154164
155165 const char * json = Rf_translateCharUTF8 (STRING_ELT (json_, 0 ));
156166 JSValue result = JS_ParseJSON (rt_ctx, json, strlen (json), " <input>" );
157- SEXP rtn = cpp11::sexp (quickjsr::JSValue_to_SEXP (rt_ctx, result));
167+ SEXP rtn = quickjsr::JSValue_to_SEXP (rt_ctx, result);
168+ PROTECT (rtn);
158169 JS_FreeValue (rt_ctx, result);
159170 JS_FreeContext (rt_ctx);
160171 JS_FreeRuntime (rt);
172+ UNPROTECT (1 );
161173
162174 return rtn;
163175 END_CPP11
0 commit comments