[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 |