[jsapigen-devel] [PATCH 2/3] Update character parameter passing for spidermonkey 1.8.5 API
Status: Beta
Brought to you by:
tdz
|
From: Vincent S. <vi...@de...> - 2012-07-02 11:50:26
|
From: Vincent Sanders <vi...@co...>
The charp parameter passing required updating to allow compilation useing
spidermonkey 1.8.5. In addition the constructed output was altered to use
the new charcter encoding routines to convert directly to utf-8 if
appropriate.
Signed-off-by: Vincent Sanders <vi...@ky...>
---
src/hlcl.c | 2 +-
src/jsapi.c | 2 +-
src/jsapiout.c | 47 +++++++++++++++++++++++++++++++++--------------
3 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/src/hlcl.c b/src/hlcl.c
index a06cba2..cee1edc 100644
--- a/src/hlcl.c
+++ b/src/hlcl.c
@@ -144,7 +144,7 @@ static const struct hlcl_desc jjhlcldesc[] = {
{"CONVERT_INT32_TO_INT", PARAM_I_I},
{"CONVERT_JSDOUBLE_TO_FLOAT", PARAM_I_I},
{"CONVERT_JSDOUBLE_TO_DOUBLE", PARAM_I_I},
- {"CONVERT_JSCHARP_TO_CHARP", PARAM_I_I_I},
+ {"CONVERT_JSCHARP_TO_CHARP", PARAM_I_I_I_I},
{"CONVERT_JSCHARP_TO_WCHARP", PARAM_I_I_I},
{"CONVERT_WCHARP_TO_JSCHARP", PARAM_I_I_I},
{"OBJ_TO_VAR", PARAM_I},
diff --git a/src/jsapi.c b/src/jsapi.c
index 0af8e46..c50a52d 100644
--- a/src/jsapi.c
+++ b/src/jsapi.c
@@ -187,7 +187,7 @@ jsapi_append_jsstringp_to_charp_ip(int src, int dst, int len)
return -((jsapi_append_vardecl(JSAPI_VARTYPE_JSCHAR, 1, var) < 0) ||
(hlcltab_append_i_i( HLCL_JS_GET_STRING_CHARS, src, var) < 0) ||
- (hlcltab_append_i_i_i(HLCL_CONVERT_JSCHARP_TO_CHARP, dst, var, len) < 0));
+ (hlcltab_append_i_i_i_i(HLCL_CONVERT_JSCHARP_TO_CHARP, dst, var, len, src) < 0));
}
static int
diff --git a/src/jsapiout.c b/src/jsapiout.c
index db741d6..ac7de1d 100644
--- a/src/jsapiout.c
+++ b/src/jsapiout.c
@@ -1028,7 +1028,14 @@ jsapi_out_js_get_string_length(const struct hlcl *hlcl, struct jsapi_state *stat
src = hlcl->data.ii.i[0];
dst = hlcl->data.ii.i[1];
- return sigfprintf(f, " var%d = JS_GetStringLength(var%d);\n", dst, src);
+ return sigfprintf(f,
+ "#if JS_VERSION >= 185\n"
+ " if (JS_CStringsAreUTF8()) \n"
+ " var%d = JS_GetStringEncodingLength(cx, var%d);\n"
+ " else \n"
+ "#endif\n"
+ " var%d = JS_GetStringLength(var%d);\n",
+ dst, src, dst, src);
}
static int
@@ -1044,7 +1051,12 @@ jsapi_out_js_get_string_chars(const struct hlcl *hlcl, struct jsapi_state *state
src = hlcl->data.ii.i[0];
dst = hlcl->data.ii.i[1];
- return sigfprintf(f, " var%d = JS_GetStringChars(var%d);\n", dst, src);
+ return sigfprintf(f,
+ "#if JS_VERSION >= 182\n"
+ " var%d = JS_GetStringCharsZ(cx, var%d);\n"
+ "#else\n"
+ " var%d = JS_GetStringChars(var%d);\n"
+ "#endif\n", dst, src, dst, src);
}
static int
@@ -1898,24 +1910,31 @@ jsapi_out_convert_jsdouble_to_double(const struct hlcl *hlcl, struct jsapi_state
static int
jsapi_out_convert_jscharp_to_charp(const struct hlcl *hlcl, struct jsapi_state *state, FILE * f)
{
- int src, dst, len;
+ int src, dst, len, jsstr;
assert(hlcl);
assert(hlcl->op == HLCL_CONVERT_JSCHARP_TO_CHARP);
assert(state);
assert(f);
- dst = hlcl->data.iii.i[0];
- src = hlcl->data.iii.i[1];
- len = hlcl->data.iii.i[2];
-
- return sigfprintf(f, " {\n"
- " size_t i;\n"
- " for (i = 0; i < var%d; ++i) {\n"
- " var%d[i] = wctob(var%d[i]);\n"
- " }\n"
- " var%d[var%d] = '\\0';\n"
- " }\n", len, dst, src, dst, len);
+ dst = hlcl->data.iiii.i[0];
+ src = hlcl->data.iiii.i[1];
+ len = hlcl->data.iiii.i[2];
+ jsstr = hlcl->data.iiii.i[3];
+
+ return sigfprintf(f,
+ "#if JS_VERSION >= 185\n"
+ " if (JS_CStringsAreUTF8()) {\n"
+ " JS_EncodeStringToBuffer(var%d, var%d, var%d);\n"
+ " } else \n"
+ "#endif\n"
+ " {\n"
+ " size_t i;\n"
+ " for (i = 0; i < var%d; ++i) {\n"
+ " var%d[i] = wctob(var%d[i]);\n"
+ " }\n"
+ " var%d[var%d] = '\\0';\n"
+ " }\n", jsstr, dst, len, len, dst, src, dst, len);
}
static int
--
1.7.10
|