From cf7811b17890af6da7174e4e5a65ca38fc55c0e2 Mon Sep 17 00:00:00 2001 From: Nickolay Shmyrev Date: Thu, 12 Jan 2017 15:53:44 +0100 Subject: [PATCH 1/7] Proper array typemaps in Javascript https://github.com/swig/swig/issues/865 --- Examples/javascript/array/Makefile | 3 + Examples/javascript/array/binding.gyp.in | 9 +++ Examples/javascript/array/example.i | 31 ++++++++ Examples/javascript/array/example.js | 1 + Examples/javascript/array/runme.js | 7 ++ Examples/javascript/check.list | 1 + Lib/javascript/jsc/arrays_javascript.i | 87 ++++++++-------------- Lib/javascript/v8/arrays_javascript.i | 95 ++++++++---------------- Lib/javascript/v8/javascriptrun.swg | 6 +- 9 files changed, 115 insertions(+), 125 deletions(-) create mode 100644 Examples/javascript/array/Makefile create mode 100644 Examples/javascript/array/binding.gyp.in create mode 100644 Examples/javascript/array/example.i create mode 100644 Examples/javascript/array/example.js create mode 100644 Examples/javascript/array/runme.js diff --git a/Examples/javascript/array/Makefile b/Examples/javascript/array/Makefile new file mode 100644 index 000000000..0402f8d09 --- /dev/null +++ b/Examples/javascript/array/Makefile @@ -0,0 +1,3 @@ +SRCS = + +include $(SRCDIR)../example.mk diff --git a/Examples/javascript/array/binding.gyp.in b/Examples/javascript/array/binding.gyp.in new file mode 100644 index 000000000..59779aef4 --- /dev/null +++ b/Examples/javascript/array/binding.gyp.in @@ -0,0 +1,9 @@ +{ + "targets": [ + { + "target_name": "example", + "sources": [ "example_wrap.cxx" ], + "include_dirs": ["$srcdir"] + } + ] +} diff --git a/Examples/javascript/array/example.i b/Examples/javascript/array/example.i new file mode 100644 index 000000000..3e77e2ac1 --- /dev/null +++ b/Examples/javascript/array/example.i @@ -0,0 +1,31 @@ +/* File : example.i */ +%module example + +%include + +%apply int[] {int *data1} +%apply int[3] {int data2[3]} +%apply int[4] {int data3[4]} + +%inline %{ + +int sum1(int *data1, int size) { + int sum = 0; + for (int i = 0; i < size; i++) { + sum += data1[i]; + } + return sum; +} + +int sum2(int data2[3]) { + int sum = 0; + for (int i = 0; i < 3; i++) { + sum += data2[i]; + } + return sum; +} + +int data3[4] = {1, 2, 3, 4}; + +%} + diff --git a/Examples/javascript/array/example.js b/Examples/javascript/array/example.js new file mode 100644 index 000000000..2e7f83a06 --- /dev/null +++ b/Examples/javascript/array/example.js @@ -0,0 +1 @@ +module.exports = require("build/Release/example"); diff --git a/Examples/javascript/array/runme.js b/Examples/javascript/array/runme.js new file mode 100644 index 000000000..816ac4af0 --- /dev/null +++ b/Examples/javascript/array/runme.js @@ -0,0 +1,7 @@ +var example = require("example"); + +var arr = [1, 2, 3, 4, 5]; + +console.log(example.sum1(arr, arr.length)); +console.log(example.sum2(arr)); +console.log(example.data3) diff --git a/Examples/javascript/check.list b/Examples/javascript/check.list index 9707e77d4..d5f44b81b 100644 --- a/Examples/javascript/check.list +++ b/Examples/javascript/check.list @@ -1,3 +1,4 @@ +array class constant enum diff --git a/Lib/javascript/jsc/arrays_javascript.i b/Lib/javascript/jsc/arrays_javascript.i index b9199d86b..713b7ef23 100644 --- a/Lib/javascript/jsc/arrays_javascript.i +++ b/Lib/javascript/jsc/arrays_javascript.i @@ -21,34 +21,39 @@ * fs = example.FiddleSticks; * ----------------------------------------------------------------------------- */ -%fragment("SWIG_JSCGetIntProperty", "header", fragment=SWIG_AsVal_frag(int)) {} + +%fragment("SWIG_JSCGetIntProperty", "header", fragment=SWIG_AsVal_frag(int)) {} %fragment("SWIG_JSCGetNumberProperty", "header", fragment=SWIG_AsVal_frag(double)) {} +%fragment("SWIG_JSCOutInt", "header", fragment=SWIG_From_frag(int)) {} +%fragment("SWIG_JSCOutNumber", "header", fragment=SWIG_From_frag(double)) {} -%typemap(in, fragment="SWIG_JSCGetIntProperty") int[], int[ANY] - (int length = 0, JSObjectRef array, JSValueRef jsvalue, int i = 0, int res = 0, $*1_ltype temp) { +%define JAVASCRIPT_ARRAYS_IN_DECL(NAME, CTYPE, ANY, ANYLENGTH) + +%typemap(in, fragment=NAME) CTYPE[ANY] { if (JSValueIsObject(context, $input)) { + int i; // Convert into Array - array = JSValueToObject(context, $input, NULL); + JSObjectRef array = JSValueToObject(context, $input, NULL); - length = $1_dim0; + int length = ANYLENGTH; $1 = ($*1_ltype *)malloc(sizeof($*1_ltype) * length); // Get each element from array for (i = 0; i < length; i++) { - jsvalue = JSObjectGetPropertyAtIndex(context, array, i, NULL); + JSValueRef jsvalue = JSObjectGetPropertyAtIndex(context, array, i, NULL); + $*1_ltype temp; // Get primitive value from JSObject - res = SWIG_AsVal(int)(jsvalue, &temp); + int res = SWIG_AsVal(CTYPE)(jsvalue, &temp); if (!SWIG_IsOK(res)) { SWIG_exception_fail(SWIG_ERROR, "Failed to convert $input to double"); } arg$argnum[i] = temp; } - } else { @@ -56,68 +61,34 @@ } } -%typemap(freearg) int[], int[ANY] { +%typemap(freearg) CTYPE[ANY] { free($1); } -%typemap(out, fragment=SWIG_From_frag(int)) int[], int[ANY] (int length = 0, int i = 0) -{ - length = $1_dim0; +%enddef + +%define JAVASCRIPT_ARRAYS_OUT_DECL(NAME, CTYPE) + +%typemap(out, fragment=NAME) CTYPE[ANY] { + int length = $1_dim0; JSValueRef values[length]; + int i; for (i = 0; i < length; i++) { - values[i] = SWIG_From(int)($1[i]); + values[i] = SWIG_From(CTYPE)($1[i]); } $result = JSObjectMakeArray(context, length, values, NULL); } -%typemap(in, fragment="SWIG_JSCGetNumberProperty") double[], double[ANY] - (int length = 0, JSObjectRef array, JSValueRef jsvalue, int i = 0, int res = 0, $*1_ltype temp) { - if (JSValueIsObject(context, $input)) - { - // Convert into Array - array = JSValueToObject(context, $input, NULL); +%enddef - length = $1_dim0; +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetIntProperty", int, , SWIGJSC_ArrayLength(context, array)) +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetIntProperty", int, ANY, $1_dim0) +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetNumberProperty", double, , SWIGJSC_ArrayLength(context, array)) +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetNumberProperty", double, ANY, $1_dim0) - $1 = ($*1_ltype *)malloc(sizeof($*1_ltype) * length); +JAVASCRIPT_ARRAYS_OUT_DECL("SWIG_JSCOutInt", int) +JAVASCRIPT_ARRAYS_OUT_DECL("SWIG_JSCOutNumber", double) - // Get each element from array - for (i = 0; i < length; i++) - { - jsvalue = JSObjectGetPropertyAtIndex(context, array, i, NULL); - - // Get primitive value from JSObject - res = SWIG_AsVal(double)(jsvalue, &temp); - if (!SWIG_IsOK(res)) - { - SWIG_exception_fail(SWIG_ERROR, "Failed to convert $input to double"); - } - arg$argnum[i] = temp; - } - - } - else - { - SWIG_exception_fail(SWIG_ERROR, "$input is not JSObjectRef"); - } -} - -%typemap(freearg) double[], double[ANY] { - free($1); -} - -%typemap(out, fragment=SWIG_From_frag(double)) double[], double[ANY] (int length = 0, int i = 0) -{ - length = $1_dim0; - JSValueRef values[length]; - - for (i = 0; i < length; i++) - { - values[i] = SWIG_From(double)($1[i]); - } - - $result = JSObjectMakeArray(context, length, values, NULL); -} diff --git a/Lib/javascript/v8/arrays_javascript.i b/Lib/javascript/v8/arrays_javascript.i index 22b50be8f..1808fa840 100644 --- a/Lib/javascript/v8/arrays_javascript.i +++ b/Lib/javascript/v8/arrays_javascript.i @@ -21,105 +21,72 @@ * fs = example.FiddleSticks; * ----------------------------------------------------------------------------- */ -%fragment("SWIG_JSCGetIntProperty", "header", fragment=SWIG_AsVal_frag(int)) {} + +%fragment("SWIG_JSCGetIntProperty", "header", fragment=SWIG_AsVal_frag(int)) {} %fragment("SWIG_JSCGetNumberProperty", "header", fragment=SWIG_AsVal_frag(double)) {} +%fragment("SWIG_JSCOutInt", "header", fragment=SWIG_From_frag(int)) {} +%fragment("SWIG_JSCOutNumber", "header", fragment=SWIG_From_frag(double)) {} -%typemap(in, fragment="SWIG_JSCGetIntProperty") int[], int[ANY] - (int length = 0, v8::Local array, v8::Local jsvalue, int i = 0, int res = 0, $*1_ltype temp) { +%define JAVASCRIPT_ARRAYS_IN_DECL(NAME, CTYPE, ANY, ANYLENGTH) + +%typemap(in, fragment=NAME) CTYPE[ANY] { if ($input->IsArray()) { // Convert into Array - array = v8::Local::Cast($input); + v8::Local array = v8::Local::Cast($input); - length = $1_dim0; + int length = ANYLENGTH; $1 = ($*1_ltype *)malloc(sizeof($*1_ltype) * length); // Get each element from array - for (i = 0; i < length; i++) + for (int i = 0; i < length; i++) { - jsvalue = array->Get(i); + v8::Local jsvalue = array->Get(i); + $*1_ltype temp; // Get primitive value from JSObject - res = SWIG_AsVal(int)(jsvalue, &temp); + int res = SWIG_AsVal(CTYPE)(jsvalue, &temp); if (!SWIG_IsOK(res)) { SWIG_exception_fail(SWIG_ERROR, "Failed to convert $input to double"); } arg$argnum[i] = temp; } - } else { - SWIG_exception_fail(SWIG_ERROR, "$input is not JSObjectRef"); + SWIG_exception_fail(SWIG_ERROR, "$input is not an array"); } } -%typemap(freearg) int[], int[ANY] { +%typemap(freearg) CTYPE[ANY] { free($1); } -%typemap(out, fragment=SWIG_From_frag(int)) int[], int[ANY] (int length = 0, int i = 0) -{ - length = $1_dim0; - v8::Local array = v8::Array::New(length); +%enddef - for (i = 0; i < length; i++) +%define JAVASCRIPT_ARRAYS_OUT_DECL(NAME, CTYPE) + +%typemap(out, fragment=NAME) CTYPE[ANY] { + int length = $1_dim0; + v8::Local array = SWIGV8_ARRAY_NEW(length); + + for (int i = 0; i < length; i++) { - array->Set(i, SWIG_From(int)($1[i])); + array->Set(i, SWIG_From(CTYPE)($1[i])); } - $result = array; } -%typemap(in, fragment="SWIG_JSCGetNumberProperty") double[], double[ANY] - (int length = 0, v8::Local array, v8::Local jsvalue, int i = 0, int res = 0, $*1_ltype temp) { - if ($input->IsArray()) - { - // Convert into Array - array = v8::Local::Cast($input); +%enddef - length = $1_dim0; +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetIntProperty", int, , array->Length()) +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetIntProperty", int, ANY, $1_dim0) +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetNumberProperty", double, , array->Length()) +JAVASCRIPT_ARRAYS_IN_DECL("SWIG_JSCGetNumberProperty", double, ANY, $1_dim0) - $1 = ($*1_ltype *)malloc(sizeof($*1_ltype) * length); +JAVASCRIPT_ARRAYS_OUT_DECL("SWIG_JSCOutInt", int) +JAVASCRIPT_ARRAYS_OUT_DECL("SWIG_JSCOutNumber", double) - // Get each element from array - for (i = 0; i < length; i++) - { - jsvalue = array->Get(i); - - // Get primitive value from JSObject - res = SWIG_AsVal(double)(jsvalue, &temp); - if (!SWIG_IsOK(res)) - { - SWIG_exception_fail(SWIG_ERROR, "Failed to convert $input to double"); - } - arg$argnum[i] = temp; - } - - } - else - { - SWIG_exception_fail(SWIG_ERROR, "$input is not JSObjectRef"); - } -} - -%typemap(freearg) double[], double[ANY] { - free($1); -} - -%typemap(out, fragment=SWIG_From_frag(double)) double[], double[ANY] (int length = 0, int i = 0) -{ - length = $1_dim0; - v8::Local array = v8::Array::New(length); - - for (i = 0; i < length; i++) - { - array->Set(i, SWIG_From(double)($1[i])); - } - - - $result = array; -} diff --git a/Lib/javascript/v8/javascriptrun.swg b/Lib/javascript/v8/javascriptrun.swg index 5ac52a51d..b0bf49834 100644 --- a/Lib/javascript/v8/javascriptrun.swg +++ b/Lib/javascript/v8/javascriptrun.swg @@ -56,7 +56,7 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; #endif #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032318) -#define SWIGV8_ARRAY_NEW() v8::Array::New() +#define SWIGV8_ARRAY_NEW(size) v8::Array::New(size) #define SWIGV8_BOOLEAN_NEW(bool) v8::Boolean::New(bool) #define SWIGV8_EXTERNAL_NEW(val) v8::External::New(val) #define SWIGV8_FUNCTEMPLATE_NEW(func) v8::FunctionTemplate::New(func) @@ -69,7 +69,7 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; #define SWIGV8_UNDEFINED() v8::Undefined() #define SWIGV8_NULL() v8::Null() #else -#define SWIGV8_ARRAY_NEW() v8::Array::New(v8::Isolate::GetCurrent()) +#define SWIGV8_ARRAY_NEW(size) v8::Array::New(v8::Isolate::GetCurrent(), size) #define SWIGV8_BOOLEAN_NEW(bool) v8::Boolean::New(v8::Isolate::GetCurrent(), bool) #define SWIGV8_EXTERNAL_NEW(val) v8::External::New(v8::Isolate::GetCurrent(), val) #define SWIGV8_FUNCTEMPLATE_NEW(func) v8::FunctionTemplate::New(v8::Isolate::GetCurrent(), func) @@ -608,7 +608,7 @@ v8::Handle SWIGV8_AppendOutput(v8::Local result, v8::Handl SWIGV8_HANDLESCOPE_ESC(); if (result->IsUndefined()) { - result = SWIGV8_ARRAY_NEW(); + result = SWIGV8_ARRAY_NEW(0); } #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) v8::Handle arr = v8::Handle::Cast(result); From 53bdc3964df3be6f380bc3e54f26561026e19f98 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 3 Mar 2021 22:19:22 +0000 Subject: [PATCH 2/7] Fix for new SWIGV8_ARRAY_NEW definition --- Lib/javascript/v8/javascriptcomplex.swg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/javascript/v8/javascriptcomplex.swg b/Lib/javascript/v8/javascriptcomplex.swg index b73d5e2dd..e6b78899c 100644 --- a/Lib/javascript/v8/javascriptcomplex.swg +++ b/Lib/javascript/v8/javascriptcomplex.swg @@ -17,7 +17,7 @@ SWIG_From_dec(Type)(%ifcplusplus(const Type&, Type) c) { SWIGV8_HANDLESCOPE_ESC(); - v8::Local vals = SWIGV8_ARRAY_NEW(); + v8::Local vals = SWIGV8_ARRAY_NEW(0); SWIGV8_ARRAY_SET(vals, 0, SWIG_From(double)(Real(c))); SWIGV8_ARRAY_SET(vals, 1, SWIG_From(double)(Imag(c))); From c4d003e4427af05c635f343b6ced44f793eed2c0 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 3 Mar 2021 22:19:29 +0000 Subject: [PATCH 3/7] Fix Javascript arrays for modern node versions --- Lib/javascript/v8/arrays_javascript.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/javascript/v8/arrays_javascript.i b/Lib/javascript/v8/arrays_javascript.i index 1808fa840..8bcbee83c 100644 --- a/Lib/javascript/v8/arrays_javascript.i +++ b/Lib/javascript/v8/arrays_javascript.i @@ -42,7 +42,7 @@ // Get each element from array for (int i = 0; i < length; i++) { - v8::Local jsvalue = array->Get(i); + v8::Local jsvalue = SWIGV8_ARRAY_GET(array, i); $*1_ltype temp; // Get primitive value from JSObject @@ -74,7 +74,7 @@ for (int i = 0; i < length; i++) { - array->Set(i, SWIG_From(CTYPE)($1[i])); + SWIGV8_ARRAY_SET(array, i, SWIG_From(CTYPE)($1[i])); } $result = array; From b6aa39b82ab8e786fe75b4ef4c687a2272ccfd58 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 3 Mar 2021 22:22:47 +0000 Subject: [PATCH 4/7] Javascript code formatting corrections --- Lib/javascript/v8/arrays_javascript.i | 20 +++++++------------- Lib/javascript/v8/javascriptcomplex.swg | 16 ++++++++-------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/Lib/javascript/v8/arrays_javascript.i b/Lib/javascript/v8/arrays_javascript.i index 8bcbee83c..6dc7e4b9b 100644 --- a/Lib/javascript/v8/arrays_javascript.i +++ b/Lib/javascript/v8/arrays_javascript.i @@ -30,38 +30,33 @@ %define JAVASCRIPT_ARRAYS_IN_DECL(NAME, CTYPE, ANY, ANYLENGTH) %typemap(in, fragment=NAME) CTYPE[ANY] { - if ($input->IsArray()) - { + if ($input->IsArray()) { // Convert into Array v8::Local array = v8::Local::Cast($input); int length = ANYLENGTH; - $1 = ($*1_ltype *)malloc(sizeof($*1_ltype) * length); + $1 = ($*1_ltype *)malloc(sizeof($*1_ltype) * length); // Get each element from array - for (int i = 0; i < length; i++) - { + for (int i = 0; i < length; i++) { v8::Local jsvalue = SWIGV8_ARRAY_GET(array, i); $*1_ltype temp; // Get primitive value from JSObject int res = SWIG_AsVal(CTYPE)(jsvalue, &temp); - if (!SWIG_IsOK(res)) - { + if (!SWIG_IsOK(res)) { SWIG_exception_fail(SWIG_ERROR, "Failed to convert $input to double"); } arg$argnum[i] = temp; } - } - else - { + } else { SWIG_exception_fail(SWIG_ERROR, "$input is not an array"); } } %typemap(freearg) CTYPE[ANY] { - free($1); + free($1); } %enddef @@ -72,8 +67,7 @@ int length = $1_dim0; v8::Local array = SWIGV8_ARRAY_NEW(length); - for (int i = 0; i < length; i++) - { + for (int i = 0; i < length; i++) { SWIGV8_ARRAY_SET(array, i, SWIG_From(CTYPE)($1[i])); } diff --git a/Lib/javascript/v8/javascriptcomplex.swg b/Lib/javascript/v8/javascriptcomplex.swg index e6b78899c..7b3c5547e 100644 --- a/Lib/javascript/v8/javascriptcomplex.swg +++ b/Lib/javascript/v8/javascriptcomplex.swg @@ -39,23 +39,23 @@ SWIG_AsVal_dec(Type) (SWIGV8_VALUE o, Type* val) if (o->IsArray()) { SWIGV8_ARRAY array = SWIGV8_ARRAY::Cast(o); - if(array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); + if (array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); double re, im; int res; res = SWIG_AsVal(double)(SWIGV8_ARRAY_GET(array, 0), &re); - if(!SWIG_IsOK(res)) { + if (!SWIG_IsOK(res)) { return SWIG_TypeError; } res = SWIG_AsVal(double)(SWIGV8_ARRAY_GET(array, 1), &im); - if(!SWIG_IsOK(res)) { + if (!SWIG_IsOK(res)) { return SWIG_TypeError; } if (val) *val = Constructor(re, im); return SWIG_OK; - } else if(o->IsNumber()){ + } else if (o->IsNumber()) { double d; int res = SWIG_AddCast(SWIG_AsVal(double)(o, &d)); if (SWIG_IsOK(res)) { @@ -81,17 +81,17 @@ SWIG_AsVal_dec(Type) (SWIGV8_VALUE o, Type* val) if (o->IsArray()) { SWIGV8_ARRAY array = SWIGV8_ARRAY::Cast(o); - if(array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); + if (array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); double re, im; int res; res = SWIG_AsVal(double)(SWIGV8_ARRAY_GET(array, 0), &re); - if(!SWIG_IsOK(res)) { + if (!SWIG_IsOK(res)) { return SWIG_TypeError; } res = SWIG_AsVal(double)(SWIGV8_ARRAY_GET(array, 1), &im); - if(!SWIG_IsOK(res)) { + if (!SWIG_IsOK(res)) { return SWIG_TypeError; } @@ -102,7 +102,7 @@ SWIG_AsVal_dec(Type) (SWIGV8_VALUE o, Type* val) } else { return SWIG_OverflowError; } - } else if(o->IsNumber()){ + } else if (o->IsNumber()) { float re; int res = SWIG_AddCast(SWIG_AsVal(float)(o, &re)); if (SWIG_IsOK(res)) { From 22c8b33eddef1d6bafeeb75f31e94326c32be0ad Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sat, 6 Mar 2021 10:54:36 +0000 Subject: [PATCH 5/7] Update .gitignore for java doxygen output --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 5df510547..0006e6ef6 100644 --- a/.gitignore +++ b/.gitignore @@ -150,6 +150,8 @@ Examples/guile/*/my-guile # Java Examples/test-suite/java/*/ +Examples/test-suite/java/expected.txt +Examples/test-suite/java/got.txt Examples/java/*/*.java !Examples/java/*/runme.java Examples/java/doxygen/javadocs From 227614056be6b9d390b05a400dd5dcec85f82567 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sat, 6 Mar 2021 10:55:47 +0000 Subject: [PATCH 6/7] Convert javascript_arrays.i example into testcase --- Examples/javascript/array/Makefile | 3 -- Examples/javascript/array/binding.gyp.in | 9 ------ Examples/javascript/array/example.i | 31 ------------------- Examples/javascript/array/example.js | 1 - Examples/javascript/array/runme.js | 7 ----- Examples/javascript/check.list | 1 - Examples/test-suite/javascript/Makefile.in | 3 ++ .../javascript/javascript_lib_arrays_runme.js | 20 ++++++++++++ Examples/test-suite/javascript_lib_arrays.i | 30 ++++++++++++++++++ 9 files changed, 53 insertions(+), 52 deletions(-) delete mode 100644 Examples/javascript/array/Makefile delete mode 100644 Examples/javascript/array/binding.gyp.in delete mode 100644 Examples/javascript/array/example.i delete mode 100644 Examples/javascript/array/example.js delete mode 100644 Examples/javascript/array/runme.js create mode 100644 Examples/test-suite/javascript/javascript_lib_arrays_runme.js create mode 100644 Examples/test-suite/javascript_lib_arrays.i diff --git a/Examples/javascript/array/Makefile b/Examples/javascript/array/Makefile deleted file mode 100644 index 0402f8d09..000000000 --- a/Examples/javascript/array/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -SRCS = - -include $(SRCDIR)../example.mk diff --git a/Examples/javascript/array/binding.gyp.in b/Examples/javascript/array/binding.gyp.in deleted file mode 100644 index 59779aef4..000000000 --- a/Examples/javascript/array/binding.gyp.in +++ /dev/null @@ -1,9 +0,0 @@ -{ - "targets": [ - { - "target_name": "example", - "sources": [ "example_wrap.cxx" ], - "include_dirs": ["$srcdir"] - } - ] -} diff --git a/Examples/javascript/array/example.i b/Examples/javascript/array/example.i deleted file mode 100644 index 3e77e2ac1..000000000 --- a/Examples/javascript/array/example.i +++ /dev/null @@ -1,31 +0,0 @@ -/* File : example.i */ -%module example - -%include - -%apply int[] {int *data1} -%apply int[3] {int data2[3]} -%apply int[4] {int data3[4]} - -%inline %{ - -int sum1(int *data1, int size) { - int sum = 0; - for (int i = 0; i < size; i++) { - sum += data1[i]; - } - return sum; -} - -int sum2(int data2[3]) { - int sum = 0; - for (int i = 0; i < 3; i++) { - sum += data2[i]; - } - return sum; -} - -int data3[4] = {1, 2, 3, 4}; - -%} - diff --git a/Examples/javascript/array/example.js b/Examples/javascript/array/example.js deleted file mode 100644 index 2e7f83a06..000000000 --- a/Examples/javascript/array/example.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("build/Release/example"); diff --git a/Examples/javascript/array/runme.js b/Examples/javascript/array/runme.js deleted file mode 100644 index 816ac4af0..000000000 --- a/Examples/javascript/array/runme.js +++ /dev/null @@ -1,7 +0,0 @@ -var example = require("example"); - -var arr = [1, 2, 3, 4, 5]; - -console.log(example.sum1(arr, arr.length)); -console.log(example.sum2(arr)); -console.log(example.data3) diff --git a/Examples/javascript/check.list b/Examples/javascript/check.list index 7ae61277c..977835755 100644 --- a/Examples/javascript/check.list +++ b/Examples/javascript/check.list @@ -1,4 +1,3 @@ -array class constant enum diff --git a/Examples/test-suite/javascript/Makefile.in b/Examples/test-suite/javascript/Makefile.in index fed028388..93602a434 100644 --- a/Examples/test-suite/javascript/Makefile.in +++ b/Examples/test-suite/javascript/Makefile.in @@ -16,6 +16,9 @@ top_builddir = @top_builddir@ C_TEST_CASES += \ ccomplextest \ +CPP_TEST_CASES += \ + javascript_lib_arrays \ + SWIGEXE = $(top_builddir)/swig SWIG_LIB_DIR = $(top_srcdir)/Lib diff --git a/Examples/test-suite/javascript/javascript_lib_arrays_runme.js b/Examples/test-suite/javascript/javascript_lib_arrays_runme.js new file mode 100644 index 000000000..1eb586134 --- /dev/null +++ b/Examples/test-suite/javascript/javascript_lib_arrays_runme.js @@ -0,0 +1,20 @@ +var javascript_lib_arrays = require("javascript_lib_arrays"); + +var arr = [1, 2, 3, 4, 5]; + +function check(a, b) { + if (a !== b) { + throw new Error("Not equal: " + a + " " + b) + } +} + +function check_array(a, b) { + if (a.length != b.length) + throw new Error("Array length mismatch " + a.length + " " + b.length) + if (!a.every(function(element, index) { return element === b[index]; })) + throw new Error("Arrays don't match a:" + a + " b:" + b) +} + +check(15, javascript_lib_arrays.sum1(arr, arr.length)); +check(6, javascript_lib_arrays.sum2(arr)); +check_array([1, 2, 3, 4], javascript_lib_arrays.data3) diff --git a/Examples/test-suite/javascript_lib_arrays.i b/Examples/test-suite/javascript_lib_arrays.i new file mode 100644 index 000000000..512084ad5 --- /dev/null +++ b/Examples/test-suite/javascript_lib_arrays.i @@ -0,0 +1,30 @@ +%module javascript_lib_arrays + +%include + +%apply int[] { int *data1 } +%apply int[3] { int data2[3] } +%apply int[4] { int data3[4] } + +%inline %{ + +int sum1(int *data1, int size) { + int sum = 0; + for (int i = 0; i < size; i++) { + sum += data1[i]; + } + return sum; +} + +int sum2(int data2[3]) { + int sum = 0; + for (int i = 0; i < 3; i++) { + sum += data2[i]; + } + return sum; +} + +int data3[4] = {1, 2, 3, 4}; + +%} + From 0b2d5ffa6ed4a7058518177cd3b3d7aa2ff6e357 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sat, 6 Mar 2021 11:06:12 +0000 Subject: [PATCH 7/7] add javascript_arays.i fix to changes file --- CHANGES.current | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.current b/CHANGES.current index 0f69796f2..81433ce15 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ Version 4.1.0 (in progress) =========================== +2021-03-06: nshmyrev + #872 [Javascript] Various typemap issues in arrays_javascript.i fixed. + 2021-03-01: xantares, Oliver Buchtala, geographika #1040 Add support for building SWIG with CMake. See documentation in Windows.html.