Skip to content

Commit 34ff156

Browse files
committed
cpp11 SEXP
1 parent 0cb3795 commit 34ff156

File tree

1 file changed

+7
-19
lines changed

1 file changed

+7
-19
lines changed

src/quickjsr.cpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ extern "C" {
5252
ContextXPtr ctx(ctx_ptr_);
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);
55-
SEXP rtn = cpp11::as_sexp(!JS_IsException(val));
56-
PROTECT(rtn);
55+
cpp11::sexp rtn = cpp11::as_sexp(!JS_IsException(val));
5756
JS_FreeValue(ctx.get(), val);
58-
UNPROTECT(1);
5957
return rtn;
6058
END_CPP11
6159
}
@@ -78,13 +76,10 @@ extern "C" {
7876
JS_FreeValue(ctx.get(), arg);
7977
}
8078

81-
SEXP result = quickjsr::JSValue_to_SEXP(ctx.get(), result_js);
82-
PROTECT(result);
79+
cpp11::sexp result = quickjsr::JSValue_to_SEXP(ctx.get(), result_js);
8380
JS_FreeValue(ctx.get(), fun);
8481
JS_FreeValue(ctx.get(), global);
8582
JS_FreeValue(ctx.get(), result_js);
86-
UNPROTECT(1);
87-
8883
return result;
8984
END_CPP11
9085
}
@@ -94,11 +89,9 @@ extern "C" {
9489
ContextXPtr ctx(ctx_ptr_);
9590
JSValue global = JS_GetGlobalObject(ctx.get());
9691
JSValue result = quickjsr::JS_GetPropertyRecursive(ctx.get(), global, Rf_translateCharUTF8(STRING_ELT(js_obj_name, 0)));
97-
SEXP rtn = quickjsr::JSValue_to_SEXP(ctx.get(), result);
98-
PROTECT(rtn);
92+
cpp11::sexp rtn = quickjsr::JSValue_to_SEXP(ctx.get(), result);
9993
JS_FreeValue(ctx.get(), result);
10094
JS_FreeValue(ctx.get(), global);
101-
UNPROTECT(1);
10295
return rtn;
10396
END_CPP11
10497
}
@@ -124,12 +117,10 @@ extern "C" {
124117
JSContext* rt_ctx = quickjsr::JS_NewCustomContext(rt);
125118

126119
JSValue val = JS_Eval(rt_ctx, eval_string, strlen(eval_string), "<input>", JS_EVAL_TYPE_GLOBAL);
127-
SEXP rtn = quickjsr::JSValue_to_SEXP(rt_ctx, val);
128-
PROTECT(rtn);
120+
cpp11::sexp rtn = quickjsr::JSValue_to_SEXP(rt_ctx, val);
129121
JS_FreeValue(rt_ctx, val);
130122
JS_FreeContext(rt_ctx);
131123
JS_FreeRuntime(rt);
132-
UNPROTECT(1);
133124

134125
return rtn;
135126
END_CPP11
@@ -143,15 +134,13 @@ extern "C" {
143134
JSValue arg = quickjsr::SEXP_to_JSValue(rt_ctx, arg_, LOGICAL_ELT(auto_unbox_, 0));
144135
JSValue result_js = JS_JSONStringify(rt_ctx, arg, JS_UNDEFINED, JS_UNDEFINED);
145136
const char* res_str = JS_ToCString(rt_ctx, result_js);
146-
SEXP json = cpp11::as_sexp(res_str ? res_str : "");
147-
PROTECT(json);
137+
cpp11::sexp json = cpp11::as_sexp(res_str ? res_str : "");
148138

149139
JS_FreeCString(rt_ctx, res_str);
150140
JS_FreeValue(rt_ctx, result_js);
151141
JS_FreeValue(rt_ctx, arg);
152142
JS_FreeContext(rt_ctx);
153143
JS_FreeRuntime(rt);
154-
UNPROTECT(1);
155144

156145
return json;
157146
END_CPP11
@@ -164,12 +153,11 @@ extern "C" {
164153

165154
const char* json = Rf_translateCharUTF8(STRING_ELT(json_, 0));
166155
JSValue result = JS_ParseJSON(rt_ctx, json, strlen(json), "<input>");
167-
SEXP rtn = quickjsr::JSValue_to_SEXP(rt_ctx, result);
168-
PROTECT(rtn);
156+
cpp11::sexp rtn = quickjsr::JSValue_to_SEXP(rt_ctx, result);
157+
169158
JS_FreeValue(rt_ctx, result);
170159
JS_FreeContext(rt_ctx);
171160
JS_FreeRuntime(rt);
172-
UNPROTECT(1);
173161

174162
return rtn;
175163
END_CPP11

0 commit comments

Comments
 (0)