From 43c0189ba244265fd83e0784bb67bd1d1fded8c5 Mon Sep 17 00:00:00 2001 From: Adam Samalik Date: Thu, 29 Jun 2023 10:27:17 +0200 Subject: [PATCH] re-import sources as agreed with the maintainer --- .gitignore | 28 +- ...har-typecheck-typemap-to-accept-Null.patch | 82 - ...ed-directed-methods-with-non-void-re.patch | 101 - swig-4.0.2-Improve-PHP-object-creation.patch | 82 - swig-4.0.2-Support-PHP8.patch | 409 ---- swig-Upgrade-to-support-newer-NodeJS.patch | 1863 ----------------- 6 files changed, 27 insertions(+), 2538 deletions(-) delete mode 100644 swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch delete mode 100644 swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch delete mode 100644 swig-4.0.2-Improve-PHP-object-creation.patch delete mode 100644 swig-4.0.2-Support-PHP8.patch delete mode 100644 swig-Upgrade-to-support-newer-NodeJS.patch diff --git a/.gitignore b/.gitignore index 2507ea1..54a7eeb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,28 @@ -SOURCES/swig-4.1.1.tar.gz +swig-2.0.0.tar.gz +/swig-2.0.1.tar.gz +/swig-2.0.2.tar.gz +/swig-2.0.3.tar.gz +/swig-2.0.4.tar.gz +/swig-2.0.5.tar.gz +/swig-2.0.6.tar.gz +/swig-2.0.7.tar.gz +/swig-2.0.8.tar.gz +/swig-2.0.9.tar.gz +/swig-2.0.10.tar.gz +/swig-2.0.11.tar.gz +/swig-2.0.12.tar.gz +/swig-3.0.0.tar.gz +/swig-3.0.1.tar.gz +/swig-3.0.2.tar.gz +/swig-3.0.5.tar.gz +/swig-3.0.6.tar.gz +/swig-3.0.7.tar.gz +/swig-3.0.8.tar.gz +/swig-3.0.9.tar.gz +/swig-3.0.10.tar.gz +/swig-3.0.11.tar.gz +/swig-3.0.12.tar.gz +/swig-4.0.0.tar.gz +/swig-4.0.1.tar.gz +/swig-4.0.2.tar.gz /swig-4.1.1.tar.gz diff --git a/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch b/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch deleted file mode 100644 index b293d2f..0000000 --- a/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch +++ /dev/null @@ -1,82 +0,0 @@ -From b7dedecfdd708c5323addc1b28e16cc727e01980 Mon Sep 17 00:00:00 2001 -From: Olly Betts -Date: Thu, 18 Mar 2021 10:53:58 +1300 -Subject: [PATCH] php: Fix char* typecheck typemap to accept Null - -The corresponding in typemap already does. - -Fixes #1655, reported by CJSlominski. ---- - CHANGES.current | 4 ++++ - Examples/test-suite/overload_polymorphic.i | 3 +++ - .../test-suite/php/overload_polymorphic_runme.php | 14 ++++++++++++++ - Lib/php/php.swg | 5 ++++- - 4 files changed, 25 insertions(+), 1 deletion(-) - create mode 100644 Examples/test-suite/php/overload_polymorphic_runme.php - -#diff --git a/CHANGES.current b/CHANGES.current -#index 58fd05a56..f287e3d60 100644 -#--- a/CHANGES.current -#+++ b/CHANGES.current -#@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ -# Version 4.1.0 (in progress) -# =========================== -# -#+2021-03-18: olly -#+ #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the -#+ corresponding in typemap does. -#+ -# 2021-03-18: olly -# #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with -# non-void return. -diff --git a/Examples/test-suite/overload_polymorphic.i b/Examples/test-suite/overload_polymorphic.i -index ac004f948..72aabd840 100644 ---- a/Examples/test-suite/overload_polymorphic.i -+++ b/Examples/test-suite/overload_polymorphic.i -@@ -23,4 +23,7 @@ class Unknown; - int test2(Unknown* unknown) { return 0; } - int test2(Base* base) { return 1; } - -+int test3(const char*, const Base* = 0, bool = false) { return 0; } -+int test3(Base&, const char* = 0, const Base* = 0, bool = false) { return 1; } -+ - %} -diff --git a/Examples/test-suite/php/overload_polymorphic_runme.php b/Examples/test-suite/php/overload_polymorphic_runme.php -new file mode 100644 -index 000000000..0afe16808 ---- /dev/null -+++ b/Examples/test-suite/php/overload_polymorphic_runme.php -@@ -0,0 +1,14 @@ -+ -diff --git a/Lib/php/php.swg b/Lib/php/php.swg -index 4eba6be2a..ccfd371ab 100644 ---- a/Lib/php/php.swg -+++ b/Lib/php/php.swg -@@ -465,7 +465,10 @@ - %php_typecheck(double,SWIG_TYPECHECK_DOUBLE,IS_DOUBLE) - %php_typecheck(char,SWIG_TYPECHECK_CHAR,IS_STRING) - --%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&, char [] -+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *& -+ " $1 = (Z_TYPE($input) == IS_STRING || Z_TYPE($input) == IS_NULL); " -+ -+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char [] - " $1 = (Z_TYPE($input) == IS_STRING); " - - %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE --- -2.26.3 - diff --git a/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch b/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch deleted file mode 100644 index 1cc5e91..0000000 --- a/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 2e7da86b2ced479e48741cc8713479dee426be61 Mon Sep 17 00:00:00 2001 -From: Olly Betts -Date: Wed, 9 Dec 2020 09:48:55 +1300 -Subject: [PATCH] php: Fix overloaded directed methods with non-void return - -We were treating such methods like constructors and assigning to the -internal _cPtr, which just seems bizarrely wrong. - -Fixes #1900 ---- - CHANGES.current | 4 ++++ - Examples/test-suite/director_overload.i | 11 ++++++++++- - .../test-suite/php/director_overload_runme.php | 18 ++++++++++++++++++ - Source/Modules/php.cxx | 4 ++-- - 4 files changed, 34 insertions(+), 3 deletions(-) - create mode 100644 Examples/test-suite/php/director_overload_runme.php - -#diff --git a/CHANGES.current b/CHANGES.current -#index acaea3aea..58fd05a56 100644 -#--- a/CHANGES.current -#+++ b/CHANGES.current -#@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ -# Version 4.1.0 (in progress) -# =========================== -# -#+2021-03-18: olly -#+ #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with -#+ non-void return. -#+ -# 2021-03-11: murillo128 -# #1498 [Javascript] Support type conversion. -# -diff --git a/Examples/test-suite/director_overload.i b/Examples/test-suite/director_overload.i -index 604ffe5ca..d6feb122b 100644 ---- a/Examples/test-suite/director_overload.i -+++ b/Examples/test-suite/director_overload.i -@@ -47,5 +47,14 @@ public: - virtual void notover(int *p) const {} - }; - --%} -+class OverloadedGetSet -+{ -+ int v; -+public: -+ OverloadedGetSet() : v(42) { } -+ virtual ~OverloadedGetSet() { } -+ virtual int rw() const { return v; } -+ virtual void rw(int new_v) { v = new_v; } -+}; - -+%} -diff --git a/Examples/test-suite/php/director_overload_runme.php b/Examples/test-suite/php/director_overload_runme.php -new file mode 100644 -index 000000000..f5fc56b65 ---- /dev/null -+++ b/Examples/test-suite/php/director_overload_runme.php -@@ -0,0 +1,18 @@ -+ -+rw(), 42, "get_set() initial value not 42"); -+check::equal($o->rw(7), null, "get_set() failed to set"); -+check::equal($o->rw(), 7, "get_set() didn't return back set value"); -+ -+check::done(); -+?> -diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx -index 1edbd874c..eaae32d63 100644 ---- a/Source/Modules/php.cxx -+++ b/Source/Modules/php.cxx -@@ -1566,7 +1566,7 @@ public: - Printf(prepare, "case %d: ", ++last_handled_i); - } - if (non_void_return) { -- if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) { -+ if (!constructor) { - Append(prepare, "$r="); - } else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) { - Append(prepare, "$r="); -@@ -1590,7 +1590,7 @@ public: - if (had_a_case) - Printf(prepare, "default: "); - if (non_void_return) { -- if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) { -+ if (!constructor) { - Append(prepare, "$r="); - } else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) { - Append(prepare, "$r="); --- -2.26.3 - diff --git a/swig-4.0.2-Improve-PHP-object-creation.patch b/swig-4.0.2-Improve-PHP-object-creation.patch deleted file mode 100644 index 2239053..0000000 --- a/swig-4.0.2-Improve-PHP-object-creation.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 71475b0af9677deeaf6fe55c0c5f53fec9f730d2 Mon Sep 17 00:00:00 2001 -From: Olly Betts -Date: Thu, 18 Mar 2021 15:50:52 +1300 -Subject: [PATCH] Improve PHP object creation - -Reportedly the code we were using in the directorin case gave segfaults -in PHP 7.2 and later - we've been unable to reproduce these, but the new -approach is also simpler and should be bit faster too. - -Fixes #1527, #1975 ---- - CHANGES.current | 6 ++++++ - Lib/php/phprun.swg | 14 +++++--------- - 2 files changed, 11 insertions(+), 9 deletions(-) - -#diff --git a/CHANGES.current b/CHANGES.current -#index f287e3d60..79d41001f 100644 -#--- a/CHANGES.current -#+++ b/CHANGES.current -#@@ -7,6 +7,12 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ -# Version 4.1.0 (in progress) -# =========================== -# -#+2021-03-19: olly -#+ #1527 [PHP] Improve PHP object creation in directorin case. -#+ Reportedly the code we were using in this case gave segfaults in -#+ PHP 7.2 and later - we've been unable to reproduce these, but the -#+ new approach is also simpler and should be bit faster too. -#+ -# 2021-03-18: olly -# #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the -# corresponding in typemap does. -diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg -index a07a1b9f8..f3a4e6ad1 100644 ---- a/Lib/php/phprun.swg -+++ b/Lib/php/phprun.swg -@@ -90,15 +90,13 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) { - } else { - /* - * Wrap the resource in an object, the resource will be accessible -- * via the "_cPtr" member. This is currently only used by -+ * via the "_cPtr" property. This code path is currently only used by - * directorin typemaps. - */ -- zval resource; - zend_class_entry *ce = NULL; - const char *type_name = type->name+3; /* +3 so: _p_Foo -> Foo */ - size_t type_name_len; - const char * p; -- HashTable * ht; - - /* Namespace__Foo -> Foo */ - /* FIXME: ugly and goes wrong for classes with __ in their names. */ -@@ -107,7 +105,6 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) { - } - type_name_len = strlen(type_name); - -- ZVAL_RES(&resource, zend_register_resource(value, *(int *)(type->clientdata))); - if (SWIG_PREFIX_LEN > 0) { - zend_string * classname = zend_string_alloc(SWIG_PREFIX_LEN + type_name_len, 0); - memcpy(classname->val, SWIG_PREFIX, SWIG_PREFIX_LEN); -@@ -121,13 +118,12 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) { - } - if (ce == NULL) { - /* class does not exist */ -- ce = zend_standard_class_def; -+ object_init(z); -+ } else { -+ object_init_ex(z, ce); - } - -- ALLOC_HASHTABLE(ht); -- zend_hash_init(ht, 1, NULL, NULL, 0); -- zend_hash_str_update(ht, "_cPtr", sizeof("_cPtr") - 1, &resource); -- object_and_properties_init(z, ce, ht); -+ add_property_resource_ex(z, "_cPtr", sizeof("_cPtr") - 1, zend_register_resource(value, *(int *)(type->clientdata))); - } - return; - } --- -2.26.3 - diff --git a/swig-4.0.2-Support-PHP8.patch b/swig-4.0.2-Support-PHP8.patch deleted file mode 100644 index 56e9831..0000000 --- a/swig-4.0.2-Support-PHP8.patch +++ /dev/null @@ -1,409 +0,0 @@ -From 3584c7d49cb598ce79d5e285d6c17b2dedfe3ecb Mon Sep 17 00:00:00 2001 -From: Olly Betts -Date: Wed, 17 Mar 2021 12:45:17 +1300 -Subject: [PATCH 1/4] Add initial support for PHP8 - -Testcase director_overload2 is failing, but the rest of the testsuite -passes. ---- - .travis.yml | 4 ++ - Doc/Manual/Php.html | 6 +- - Doc/Manual/Preprocessor.html | 2 +- - Doc/Manual/SWIG.html | 2 +- - Examples/Makefile.in | 6 +- - .../php/evil_diamond_prop_runme.php | 2 +- - Lib/cdata.i | 2 +- - Lib/exception.i | 2 +- - Lib/php/phprun.swg | 8 ++- - Source/Modules/php.cxx | 55 +++++++++++++++---- - configure.ac | 10 ++-- - 11 files changed, 72 insertions(+), 27 deletions(-) - -#diff --git a/.travis.yml b/.travis.yml -#index 8c293c2f9fb..9477bed946f 100644 -#--- a/.travis.yml -#+++ b/.travis.yml -#@@ -154,6 +154,10 @@ matrix: -# os: linux -# env: SWIGLANG=php VER=7.4 -# dist: xenial -#+ - compiler: gcc -#+ os: linux -#+ env: SWIGLANG=php VER=8.0 -#+ dist: xenial -# - compiler: gcc -# os: linux -# env: SWIGLANG=python # 2.7 -diff --git a/Doc/Manual/Php.html b/Doc/Manual/Php.html -index 09c514e944a..4b91958894a 100644 ---- a/Doc/Manual/Php.html -+++ b/Doc/Manual/Php.html -@@ -51,12 +51,12 @@

32 SWIG and PHP

- -

- In this chapter, we discuss SWIG's support of PHP. SWIG currently supports --generating wrappers for PHP7. Support for PHP5 was removed in SWIG 4.0.0 --and support for PHP4 was removed in SWIG 1.3.37. -+generating wrappers for PHP7 and PHP8. Support for PHP5 was removed in SWIG -+4.0.0 and support for PHP4 was removed in SWIG 1.3.37. -

- -

--Currently any PHP7 release should work. -+Currently any PHP7 or PHP8 release should work. -

- -

-diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html -index 51cc0637836..0c704bde959 100644 ---- a/Doc/Manual/Preprocessor.html -+++ b/Doc/Manual/Preprocessor.html -@@ -123,7 +123,7 @@

11.3 Conditional Compilation5.1 Running SWIG

- -lua - Generate Lua wrappers - -octave - Generate Octave wrappers - -perl5 - Generate Perl 5 wrappers -- -php7 - Generate PHP 7 wrappers -+ -php7 - Generate PHP 7 or later wrappers - -python - Generate Python wrappers - -r - Generate R (aka GNU S) wrappers - -ruby - Generate Ruby wrappers -diff --git a/Examples/Makefile.in b/Examples/Makefile.in -index 3f6140b5e79..3978a959836 100644 ---- a/Examples/Makefile.in -+++ b/Examples/Makefile.in -@@ -1045,7 +1045,7 @@ ruby_clean: - rm -f *.@OBJEXT@ *$(RUBY_SO) - - ################################################################## --##### PHP7 ###### -+##### PHP ###### - ################################################################## - - PHP = @PHP@ -@@ -1058,7 +1058,7 @@ PHP_SCRIPT = $(SRCDIR)$(RUNME).php - # ------------------------------------------------------------------- - - php: $(SRCDIR_SRCS) -- $(SWIG) -php7 $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH) -+ $(SWIG) -php $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH) - $(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(SRCDIR_SRCS) $(ISRCS) $(INCLUDES) $(PHP_INCLUDE) - $(LDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO) - -@@ -1067,7 +1067,7 @@ php: $(SRCDIR_SRCS) - # -------------------------------------------------------------------- - - php_cpp: $(SRCDIR_SRCS) -- $(SWIG) -php7 -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH) -+ $(SWIG) -php -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH) - $(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(ICXXSRCS) $(INCLUDES) $(PHP_INCLUDE) - $(CXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO) - -diff --git a/Examples/test-suite/php/evil_diamond_prop_runme.php b/Examples/test-suite/php/evil_diamond_prop_runme.php -index 9bdb7435f1c..645328affda 100644 ---- a/Examples/test-suite/php/evil_diamond_prop_runme.php -+++ b/Examples/test-suite/php/evil_diamond_prop_runme.php -@@ -31,7 +31,7 @@ - check::equal(1,$spam->_foo,"1==spam->_foo"); - check::equal(2,$spam->_bar,"2==spam->_bar"); - // multiple inheritance not supported in PHP --set_error_handler(NULL, 0); // Don't complain that _baz is unknown. -+set_error_handler(function () {return true;}, E_NOTICE|E_WARNING); // Don't complain that _baz is unknown. - check::equal(null,$spam->_baz,"null==spam->_baz"); - restore_error_handler(); - check::equal(4,$spam->_spam,"4==spam->_spam"); -diff --git a/Lib/cdata.i b/Lib/cdata.i -index f18ed4af53c..cd15266431e 100644 ---- a/Lib/cdata.i -+++ b/Lib/cdata.i -@@ -21,7 +21,7 @@ typedef struct SWIGCDATA { - } - %typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); - --#elif SWIGPHP7 -+#elif SWIGPHP - - %typemap(out) SWIGCDATA { - ZVAL_STRINGL($result, $1.data, $1.len); -diff --git a/Lib/exception.i b/Lib/exception.i -index ee9ce9bc632..3d6eeccdf2e 100644 ---- a/Lib/exception.i -+++ b/Lib/exception.i -@@ -12,7 +12,7 @@ - %insert("runtime") "swigerrors.swg" - - --#ifdef SWIGPHP7 -+#ifdef SWIGPHP - %{ - #include "zend_exceptions.h" - #define SWIG_exception(code, msg) do { zend_throw_exception(NULL, (char*)msg, code); goto thrown; } while (0) -diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg -index f3a4e6ad1a9..04919878743 100644 ---- a/Lib/php/phprun.swg -+++ b/Lib/php/phprun.swg -@@ -12,8 +12,8 @@ extern "C" { - #include "zend_exceptions.h" - #include "php.h" - --#if PHP_MAJOR_VERSION != 7 --# error These bindings need PHP7 - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5 -+#if PHP_MAJOR_VERSION < 7 -+# error These bindings need PHP 7 or later - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5 - #endif - - #include "ext/standard/php_string.h" -@@ -200,7 +200,11 @@ SWIG_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags) { - - switch (Z_TYPE_P(z)) { - case IS_OBJECT: { -+#if PHP_MAJOR_VERSION < 8 - HashTable * ht = Z_OBJ_HT_P(z)->get_properties(z); -+#else -+ HashTable * ht = Z_OBJ_HT_P(z)->get_properties(Z_OBJ_P(z)); -+#endif - if (ht) { - zval * _cPtr = zend_hash_str_find(ht, "_cPtr", sizeof("_cPtr") - 1); - if (_cPtr) { -diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx -index eaae32d633b..d8ee75b45fb 100644 ---- a/Source/Modules/php.cxx -+++ b/Source/Modules/php.cxx -@@ -473,6 +473,20 @@ class PHP : public Language { - s_arginfo = NewString("/* arginfo subsection */\n"); - arginfo_used = NewHash(); - -+ // Add arginfo we'll definitely need for *_alter_newobject and *_get_newobject. -+ SetFlag(arginfo_used, "1"); -+ Append(s_arginfo, -+ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_1, 0, 0, 0)\n" -+ " ZEND_ARG_INFO(0,arg1)\n" -+ "ZEND_END_ARG_INFO()\n"); -+ -+ SetFlag(arginfo_used, "2"); -+ Append(s_arginfo, -+ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_2, 0, 0, 0)\n" -+ " ZEND_ARG_INFO(0,arg1)\n" -+ " ZEND_ARG_INFO(0,arg2)\n" -+ "ZEND_END_ARG_INFO()\n"); -+ - /* start the function entry section */ - s_entry = NewString("/* entry subsection */\n"); - -@@ -653,8 +667,8 @@ class PHP : public Language { - } - Printv(f_begin, s_vdecl, s_wrappers, NIL); - Printv(f_begin, all_cs_entry, "\n\n", s_arginfo, "\n\n", s_entry, -- " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,NULL)\n" -- " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,NULL)\n" -+ " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,swig_arginfo_2)\n" -+ " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,swig_arginfo_1)\n" - " ZEND_FE_END\n};\n\n", NIL); - Printv(f_begin, s_init, NIL); - Delete(s_header); -@@ -689,25 +703,46 @@ class PHP : public Language { - - // We want to only emit each different arginfo once, as that reduces the - // size of both the generated source code and the compiled extension -- // module. To do this, we name the arginfo to encode the number of -- // parameters and which (if any) are passed by reference by using a -- // sequence of 0s (for non-reference) and 1s (for by references). -+ // module. The parameters at this level are just named arg1, arg2, etc -+ // so we generate an arginfo name with the number of parameters and a -+ // bitmap value saying which (if any) are passed by reference. - ParmList *l = Getattr(n, "parms"); -- String * arginfo_code = NewStringEmpty(); -+ unsigned long bitmap = 0, bit = 1; -+ int n_params = 0; -+ bool overflowed = false; - for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) { - /* Ignored parameters */ - if (checkAttribute(p, "tmap:in:numinputs", "0")) { - continue; - } -- Append(arginfo_code, GetFlag(p, "tmap:in:byref") ? "1" : "0"); -+ ++n_params; -+ if (GetFlag(p, "tmap:in:byref")) { -+ bitmap |= bit; -+ if (bit == 0) overflowed = true; -+ } -+ bit <<= 1; -+ } -+ String * arginfo_code; -+ if (overflowed) { -+ // We overflowed the bitmap so just generate a unique name - this only -+ // happens for a function with more parameters than bits in a long -+ // where a high numbered parameter is passed by reference, so should be -+ // rare in practice. -+ static int overflowed_counter = 0; -+ arginfo_code = NewStringf("z%d", ++overflowed_counter); -+ } else if (bitmap == 0) { -+ // No parameters passed by reference. -+ arginfo_code = NewStringf("%d", n_params); -+ } else { -+ arginfo_code = NewStringf("%d_%lx", n_params, bitmap); - } - - if (!GetFlag(arginfo_used, arginfo_code)) { -- // Not had this one before, so emit it. -+ // Not had this one before so emit it. - SetFlag(arginfo_used, arginfo_code); - Printf(s_arginfo, "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_%s, 0, 0, 0)\n", arginfo_code); -- for (const char * p = Char(arginfo_code); *p; ++p) { -- Printf(s_arginfo, " ZEND_ARG_PASS_INFO(%c)\n", *p); -+ for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) { -+ Printf(s_arginfo, " ZEND_ARG_INFO(%d,%s)\n", GetFlag(p, "tmap:in:byref"), Getattr(p, "lname")); - } - Printf(s_arginfo, "ZEND_END_ARG_INFO()\n"); - } -diff --git a/configure.ac b/configure.ac -index 7d5824a06b5..1894001c521 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2021,7 +2021,7 @@ AC_SUBST(RUBYSO) - AC_SUBST(RUBYDYNAMICLINKING) - - #------------------------------------------------------------------------- --# Look for PHP7 -+# Look for PHP - #------------------------------------------------------------------------- - - PHPBIN= -@@ -2035,7 +2035,7 @@ if test x"${PHPBIN}" = xno; then - PHP= - else - if test "x$PHPBIN" = xyes; then -- AC_CHECK_PROGS(PHP, [php7.3 php7.2 php7.1 php7.0 php]) -+ AC_CHECK_PROGS(PHP, [php8.0 php7.4 php7.3 php7.2 php7.1 php7.0 php]) - else - PHP=$PHPBIN - fi -@@ -2046,12 +2046,14 @@ else - case $PHP in - *7.*) - PHPCONFIG=`echo "$PHP"|sed 's/7\...*$/-config&/'` ;; -+ *8.*) -+ PHPCONFIG=`echo "$PHP"|sed 's/8\...*$/-config&/'` ;; - *) - PHPCONFIG=$PHP-config ;; - esac - php_version=`$PHPCONFIG --version 2>/dev/null` - case $php_version in -- 7.*) -+ 7.*|8.*) - PHPINC=`$PHPCONFIG --includes 2>/dev/null` - if test -n "$PHPINC"; then - AC_MSG_RESULT($PHPINC) -@@ -2062,7 +2064,7 @@ else - "") - AC_MSG_RESULT([could not find $PHPCONFIG or obtain PHP version from it]) ;; - *) -- AC_MSG_RESULT([found PHP $php_version - not PHP 7]) ;; -+ AC_MSG_RESULT([found PHP $php_version - not PHP 7 or 8]) ;; - esac - fi - fi - -From fd96627b2fc65353c03b160efd60fdce864d386c Mon Sep 17 00:00:00 2001 -From: Olly Betts -Date: Wed, 17 Mar 2021 13:00:02 +1300 -Subject: [PATCH 2/4] Temporary hack so testsuite passes for PHP8 - ---- - Examples/test-suite/director_overload2.i | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/Examples/test-suite/director_overload2.i b/Examples/test-suite/director_overload2.i -index e467c18cea6..ddfa65bb4d3 100644 ---- a/Examples/test-suite/director_overload2.i -+++ b/Examples/test-suite/director_overload2.i -@@ -14,11 +14,15 @@ struct OverloadDerived1 : OverloadBase { - virtual void nnn(int vvv) {} - #if defined(__SUNPRO_CC) - virtual void nnn() {} -+#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8 -+ virtual void nnn() {} - #endif - }; - struct OverloadDerived2 : OverloadBase { - #if defined(__SUNPRO_CC) - virtual void nnn(int vvv) {} -+#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8 -+ virtual void nnn(int vvv) {} - #endif - virtual void nnn() {} - }; - -From 4c3e85fbd47f804b5956bf37f0073795296ddde2 Mon Sep 17 00:00:00 2001 -From: Olly Betts -Date: Sun, 21 Mar 2021 10:43:06 +1300 -Subject: [PATCH 3/4] Clarify what SWIGPHP7 means - ---- - Doc/Manual/Preprocessor.html | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html -index 0c704bde959..7611ea40c2b 100644 ---- a/Doc/Manual/Preprocessor.html -+++ b/Doc/Manual/Preprocessor.html -@@ -123,7 +123,7 @@

11.3 Conditional Compilation -Date: Sun, 21 Mar 2021 10:54:17 +1300 -Subject: [PATCH 4/4] Update CHANGES.current and RELEASENOTES re PHP8 - ---- - CHANGES.current | 3 +++ - RELEASENOTES | 3 +++ - 2 files changed, 6 insertions(+) - -#diff --git a/CHANGES.current b/CHANGES.current -#index 79d41001f0a..6ae5689ee37 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-21: olly -#+ #1929, #1978 [PHP] Add support for PHP 8. -#+ -# 2021-03-19: olly -# #1527 [PHP] Improve PHP object creation in directorin case. -# Reportedly the code we were using in this case gave segfaults in -diff --git a/RELEASENOTES b/RELEASENOTES -index cc3ba07121d..55590108759 100644 ---- a/RELEASENOTES -+++ b/RELEASENOTES -@@ -7,6 +7,9 @@ Release Notes - Detailed release notes are available with the release and are also - published on the SWIG web site at http://swig.org/release.html. - -+SWIG-4.2.0 summary: -+- Add PHP 8 support. -+ - SWIG-4.0.2 summary: - - A few fixes around doxygen comment handling. - - Ruby 2.7 support added. diff --git a/swig-Upgrade-to-support-newer-NodeJS.patch b/swig-Upgrade-to-support-newer-NodeJS.patch deleted file mode 100644 index e3338ef..0000000 --- a/swig-Upgrade-to-support-newer-NodeJS.patch +++ /dev/null @@ -1,1863 +0,0 @@ -From 5e1bdcfd6e5bd8353993433bd0efb4a3cb3ca639 Mon Sep 17 00:00:00 2001 -From: Alexandre Lissy -Date: Thu, 25 Apr 2019 12:29:19 +0200 -Subject: [PATCH] Upgrade SWIG to support NodeJS v12, v13 / V8 v7.6, v7.8 - runtime - ---- - .travis.yml | 35 ++++++++ - Examples/test-suite/javascript/Makefile.in | 15 +++- - .../javascript/abstract_access_runme.js | 4 +- - .../javascript/abstract_inherit_runme.js | 4 +- - .../javascript/abstract_typedef2_runme.js | 4 +- - .../javascript/abstract_typedef_runme.js | 4 +- - .../javascript/abstract_virtual_runme.js | 4 +- - .../javascript/array_member_runme.js | 4 +- - .../javascript/arrays_global_runme.js | 4 +- - .../test-suite/javascript/callback_runme.js | 4 +- - .../javascript/char_binary_runme.js | 4 +- - .../javascript/char_strings_runme.js | 4 +- - .../javascript/class_ignore_runme.js | 4 +- - .../javascript/class_scope_weird_runme.js | 4 +- - .../javascript/complextest_runme.js | 4 +- - .../test-suite/javascript/constover_runme.js | 4 +- - .../javascript/constructor_copy_runme.js | 4 +- - ...cpp11_strongly_typed_enumerations_runme.js | 4 +- - .../test-suite/javascript/cpp_enum_runme.js | 4 +- - .../javascript/cpp_namespace_runme.js | 4 +- - .../test-suite/javascript/cpp_static_runme.js | 4 +- - .../javascript/director_alternating_runme.js | 4 +- - .../test-suite/javascript/disown_runme.js | 4 +- - .../javascript/dynamic_cast_runme.js | 4 +- - .../test-suite/javascript/empty_c_runme.js | 4 +- - Examples/test-suite/javascript/empty_runme.js | 3 +- - .../javascript/enum_template_runme.js | 4 +- - .../test-suite/javascript/infinity_runme.js | 4 +- - .../namespace_virtual_method_runme.js | 4 +- - .../javascript/native_directive_runme.js | 4 +- - .../javascript/nspace_extend_runme.js | 4 +- - .../test-suite/javascript/nspace_runme.js | 4 +- - .../javascript/null_pointer_runme.js | 4 +- - .../javascript/overload_copy_runme.js | 4 +- - .../javascript/overload_null_runme.js | 4 +- - .../javascript/preproc_include_runme.js | 4 +- - .../test-suite/javascript/preproc_runme.js | 4 +- - .../test-suite/javascript/rename1_runme.js | 4 +- - .../test-suite/javascript/rename2_runme.js | 4 +- - .../test-suite/javascript/rename3_runme.js | 4 +- - .../test-suite/javascript/rename4_runme.js | 4 +- - .../javascript/rename_scope_runme.js | 4 +- - .../javascript/rename_simple_runme.js | 4 +- - .../javascript/ret_by_value_runme.js | 4 +- - .../javascript/string_simple_runme.js | 4 +- - .../javascript/struct_value_runme.js | 4 +- - .../javascript/swig_exception_runme.js | 4 +- - .../javascript/template_static_runme.js | 4 +- - .../javascript/typedef_class_runme.js | 4 +- - .../javascript/typedef_inherit_runme.js | 4 +- - .../javascript/typedef_scope_runme.js | 4 +- - .../javascript/typemap_arrays_runme.js | 4 +- - .../javascript/typemap_delete_runme.js | 4 +- - .../javascript/typemap_namespace_runme.js | 4 +- - .../javascript/typemap_ns_using_runme.js | 4 +- - .../test-suite/javascript/using1_runme.js | 4 +- - .../test-suite/javascript/using2_runme.js | 4 +- - .../test-suite/javascript/varargs_runme.js | 4 +- - Lib/javascript/v8/javascriptcode.swg | 30 ++++--- - Lib/javascript/v8/javascriptcomplex.swg | 10 +-- - Lib/javascript/v8/javascripthelpers.swg | 26 +++--- - Lib/javascript/v8/javascriptinit.swg | 4 +- - Lib/javascript/v8/javascriptprimtypes.swg | 28 +++---- - Lib/javascript/v8/javascriptrun.swg | 80 +++++++++++++------ - Lib/javascript/v8/javascriptruntime.swg | 5 ++ - Lib/javascript/v8/javascriptstrings.swg | 10 +-- - Lib/javascript/v8/javascripttypemaps.swg | 2 +- - Source/Modules/javascript.cxx | 4 +- - Tools/javascript/v8_shell.cxx | 18 ++--- - Tools/testflags.py | 5 +- - Tools/travis-linux-install.sh | 7 +- - 71 files changed, 358 insertions(+), 144 deletions(-) - -diff --git a/.travis.yml b/.travis.yml -index 32c6656dd2..a53da19f68 100644 ---- a/.travis.yml -+++ b/.travis.yml -@@ -112,6 +112,41 @@ matrix: - env: SWIGLANG=javascript ENGINE=node VER=10 CPP11=1 - sudo: required - dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=node VER=12.8.1 CPP11=1 -+ sudo: required -+ dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=node VER=12.10.0 CPP11=1 -+ sudo: required -+ dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=node VER=12.14.1 CPP11=1 -+ sudo: required -+ dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=node VER=13.1.0 CPP11=1 -+ sudo: required -+ dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=node VER=13.6.0 CPP11=1 -+ sudo: required -+ dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=electron VER=12.14.1 ELECTRON_VER=7.0.1 CPP11=1 -+ sudo: required -+ dist: xenial -+ - compiler: gcc -+ os: linux -+ env: SWIGLANG=javascript ENGINE=electron VER=12.14.1 ELECTRON_VER=7.1.8 CPP11=1 -+ sudo: required -+ dist: xenial - - compiler: gcc - os: linux - env: SWIGLANG=javascript ENGINE=jsc -diff --git a/Examples/test-suite/javascript/Makefile.in b/Examples/test-suite/javascript/Makefile.in -index 8127415f12..b780a9e9cf 100644 ---- a/Examples/test-suite/javascript/Makefile.in -+++ b/Examples/test-suite/javascript/Makefile.in -@@ -16,6 +16,17 @@ top_builddir = @top_builddir@ - SWIGEXE = $(top_builddir)/swig - SWIG_LIB_DIR = $(top_srcdir)/Lib - -+ifeq (electron, $(ENGINE)) -+NODE_DISTURL = --disturl=https://electronjs.org/headers -+NODE_RUNTIME = --runtime=electron -+NODE_ABI_TARGET = --target=${ELECTRON_VER} -+ENGINE = -+NODEJS = electron -+else -+NODE_DISTURL = -+NODE_RUNTIME = -+endif -+ - ifneq (, $(ENGINE)) - JSENGINE=$(ENGINE) - else -@@ -66,14 +77,14 @@ ifeq (node,$(JSENGINE)) - $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' \ - SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \ - SWIGOPT='-javascript $(SWIGOPT) -o $*_wrap.cxx $(srcdir)/../$*.i' swiginvoke && \ -- MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null -+ MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) $(NODE_ABI_TARGET) $(NODE_DISTURL) $(NODE_RUNTIME) --loglevel=silent --directory $* configure build 1>>/dev/null - - swig_and_compile_cpp = \ - $(setup_node) && \ - $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' \ - SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \ - SWIGOPT='-c++ -javascript $(SWIGOPT) $(srcdir)/../$*.i' swiginvoke && \ -- MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null -+ MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) $(NODE_ABI_TARGET) $(NODE_DISTURL) $(NODE_RUNTIME) --loglevel=silent --directory $* configure build 1>>/dev/null - - run_testcase = \ - if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \ -diff --git a/Examples/test-suite/javascript/abstract_access_runme.js b/Examples/test-suite/javascript/abstract_access_runme.js -index f61bb4358b..b2b5e95fb4 100644 ---- a/Examples/test-suite/javascript/abstract_access_runme.js -+++ b/Examples/test-suite/javascript/abstract_access_runme.js -@@ -1,6 +1,8 @@ --var abstract_access = require("abstract_access"); -+var abstract_access = require("./abstract_access"); - - var d = new abstract_access.D() - if (d.do_x() != 1) { - throw "Error"; - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/abstract_inherit_runme.js b/Examples/test-suite/javascript/abstract_inherit_runme.js -index f732e87673..6f58400373 100644 ---- a/Examples/test-suite/javascript/abstract_inherit_runme.js -+++ b/Examples/test-suite/javascript/abstract_inherit_runme.js -@@ -1,4 +1,4 @@ --var abstract_inherit = require("abstract_inherit"); -+var abstract_inherit = require("./abstract_inherit"); - - // Shouldn't be able to instantiate any of these classes - // since none of them implements the pure virtual function -@@ -38,3 +38,5 @@ try { - if (!caughtException) { - throw new Error("Spam should be instantiated as it is abstract"); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/abstract_typedef2_runme.js b/Examples/test-suite/javascript/abstract_typedef2_runme.js -index d8a533ab1d..f1c293818d 100644 ---- a/Examples/test-suite/javascript/abstract_typedef2_runme.js -+++ b/Examples/test-suite/javascript/abstract_typedef2_runme.js -@@ -1,6 +1,8 @@ --var abstract_typedef2 = require("abstract_typedef2"); -+var abstract_typedef2 = require("./abstract_typedef2"); - - var a = new abstract_typedef2.A_UF(); - - if (a == undefined) - throw "Error"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/abstract_typedef_runme.js b/Examples/test-suite/javascript/abstract_typedef_runme.js -index 286328fa8c..09b271218c 100644 ---- a/Examples/test-suite/javascript/abstract_typedef_runme.js -+++ b/Examples/test-suite/javascript/abstract_typedef_runme.js -@@ -1,4 +1,4 @@ --var abstract_typedef = require("abstract_typedef"); -+var abstract_typedef = require("./abstract_typedef"); - - var e = new abstract_typedef.Engine(); - var a = new abstract_typedef.A() -@@ -6,3 +6,5 @@ var a = new abstract_typedef.A() - if (a.write(e) != 1) { - throw "Error"; - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/abstract_virtual_runme.js b/Examples/test-suite/javascript/abstract_virtual_runme.js -index 9a9ce99885..f0d505d922 100644 ---- a/Examples/test-suite/javascript/abstract_virtual_runme.js -+++ b/Examples/test-suite/javascript/abstract_virtual_runme.js -@@ -1,4 +1,4 @@ --var abstract_virtual = require("abstract_virtual"); -+var abstract_virtual = require("./abstract_virtual"); - - d = new abstract_virtual.D() - -@@ -9,3 +9,5 @@ e = new abstract_virtual.E() - - if (e == undefined) - throw "Error"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/array_member_runme.js b/Examples/test-suite/javascript/array_member_runme.js -index 3d9bb0e5b3..64d158df59 100644 ---- a/Examples/test-suite/javascript/array_member_runme.js -+++ b/Examples/test-suite/javascript/array_member_runme.js -@@ -1,4 +1,4 @@ --var array_member = require("array_member"); -+var array_member = require("./array_member"); - - var f = new array_member.Foo(); - f.data = array_member.global_data; -@@ -20,3 +20,5 @@ for (var i=0; i<8; i++){ - throw "Bad array assignment (2)"; - } - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/arrays_global_runme.js b/Examples/test-suite/javascript/arrays_global_runme.js -index 0cbb28efba..db4ac20526 100644 ---- a/Examples/test-suite/javascript/arrays_global_runme.js -+++ b/Examples/test-suite/javascript/arrays_global_runme.js -@@ -1,4 +1,4 @@ --var arrays_global = require("arrays_global"); -+var arrays_global = require("./arrays_global"); - - arrays_global.array_i = arrays_global.array_const_i; - -@@ -16,3 +16,5 @@ arrays_global.BeginString_FIX44f; - arrays_global.test_a("hello","hi","chello","chi"); - - arrays_global.test_b("1234567","hi"); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/callback_runme.js b/Examples/test-suite/javascript/callback_runme.js -index 0218886419..aa22cd21fd 100644 ---- a/Examples/test-suite/javascript/callback_runme.js -+++ b/Examples/test-suite/javascript/callback_runme.js -@@ -1,4 +1,4 @@ --var callback = require("callback"); -+var callback = require("./callback"); - - if (callback.foo(2) !== 2) { - throw new Error("Failed."); -@@ -28,3 +28,5 @@ var a = new callback.A(); - if (callback.foobarm(3, a, callback.A.foom_cb_ptr) != a.foom(3)) { - throw new Error("Failed."); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/char_binary_runme.js b/Examples/test-suite/javascript/char_binary_runme.js -index 01b72ebe14..8b7e400349 100644 ---- a/Examples/test-suite/javascript/char_binary_runme.js -+++ b/Examples/test-suite/javascript/char_binary_runme.js -@@ -1,4 +1,4 @@ --var char_binary = require("char_binary"); -+var char_binary = require("./char_binary"); - - var t = new char_binary.Test(); - if (t.strlen('hile') != 4) { -@@ -46,3 +46,5 @@ if (char_binary.var_namet != "hola") { - throw("bad pointer case (2)"); - } - char_binary.delete_pchar(pc); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/char_strings_runme.js b/Examples/test-suite/javascript/char_strings_runme.js -index fe17cb9827..0cbe81e542 100644 ---- a/Examples/test-suite/javascript/char_strings_runme.js -+++ b/Examples/test-suite/javascript/char_strings_runme.js -@@ -1,4 +1,4 @@ --var char_strings = require("char_strings"); -+var char_strings = require("./char_strings"); - - var assertIsEqual = function(expected, actual) { - if (expected !== actual) { -@@ -9,3 +9,5 @@ var assertIsEqual = function(expected, actual) { - assertIsEqual("hi there", char_strings.CharPingPong("hi there")); - assertIsEqual("hi there", char_strings.CharArrayPingPong("hi there")); - assertIsEqual("hi there", char_strings.CharArrayDimsPingPong("hi there")); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/class_ignore_runme.js b/Examples/test-suite/javascript/class_ignore_runme.js -index ffbe021c71..938a19fc8d 100644 ---- a/Examples/test-suite/javascript/class_ignore_runme.js -+++ b/Examples/test-suite/javascript/class_ignore_runme.js -@@ -1,6 +1,8 @@ --var class_ignore = require("class_ignore"); -+var class_ignore = require("./class_ignore"); - - a = new class_ignore.Bar(); - - if (class_ignore.do_blah(a) != "Bar::blah") - throw "Error"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/class_scope_weird_runme.js b/Examples/test-suite/javascript/class_scope_weird_runme.js -index 73c118d617..325fefbac5 100644 ---- a/Examples/test-suite/javascript/class_scope_weird_runme.js -+++ b/Examples/test-suite/javascript/class_scope_weird_runme.js -@@ -1,6 +1,8 @@ --var class_scope_weird = require("class_scope_weird"); -+var class_scope_weird = require("./class_scope_weird"); - - f = new class_scope_weird.Foo(); - g = new class_scope_weird.Foo(3); - if (f.bar(3) != 3) - throw RuntimeError; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/complextest_runme.js b/Examples/test-suite/javascript/complextest_runme.js -index 1d9825f3b2..7e3e3e984b 100644 ---- a/Examples/test-suite/javascript/complextest_runme.js -+++ b/Examples/test-suite/javascript/complextest_runme.js -@@ -1,4 +1,4 @@ --var complextest = require("complextest"); -+var complextest = require("./complextest"); - - a = [-1,2]; - -@@ -29,3 +29,5 @@ v.add(1); - // TODO: how to check validity? - complextest.CopyHalf(v); - complextest.CopyHalfRef(v); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/constover_runme.js b/Examples/test-suite/javascript/constover_runme.js -index 9b192b5ff7..bae3344072 100644 ---- a/Examples/test-suite/javascript/constover_runme.js -+++ b/Examples/test-suite/javascript/constover_runme.js -@@ -1,4 +1,4 @@ --var constover = require("constover"); -+var constover = require("./constover"); - - p = constover.test("test"); - if (p != "test") { -@@ -31,3 +31,5 @@ p = f.test_pconstm("test"); - if (p != "test_pconstmethod") { - throw "member-test_pconstm failed!"; - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/constructor_copy_runme.js b/Examples/test-suite/javascript/constructor_copy_runme.js -index 179b9fb406..0d811470f1 100644 ---- a/Examples/test-suite/javascript/constructor_copy_runme.js -+++ b/Examples/test-suite/javascript/constructor_copy_runme.js -@@ -1,4 +1,4 @@ --var constructor_copy = require("constructor_copy"); -+var constructor_copy = require("./constructor_copy"); - - f1 = new constructor_copy.Foo1(3); - f11 = new constructor_copy.Foo1(f1); -@@ -40,3 +40,5 @@ try { - if (good == 0) { - throw "Error: should not allow calling copy ctor for Bard"; - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js b/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js -index ad9d4e8833..241e38b768 100644 ---- a/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js -+++ b/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js -@@ -1,4 +1,4 @@ --var cpp11_strongly_typed_enumerations = require("cpp11_strongly_typed_enumerations"); -+var cpp11_strongly_typed_enumerations = require("./cpp11_strongly_typed_enumerations"); - - function enumCheck(actual, expected) { - if (actual != expected) { -@@ -163,3 +163,5 @@ enumCheck(class1.class1Test2(cpp11_strongly_typed_enumerations.Class1.Enum12_Val - enumCheck(cpp11_strongly_typed_enumerations.globalTest1(cpp11_strongly_typed_enumerations.Enum1_Val5a), 13); - enumCheck(cpp11_strongly_typed_enumerations.globalTest2(cpp11_strongly_typed_enumerations.Class1.Enum12_Val5c), 1121); - //enumCheck(globalTest3(cpp11_strongly_typed_enumerations.Class1.Struct1_Enum12_Val5f), 3121); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/cpp_enum_runme.js b/Examples/test-suite/javascript/cpp_enum_runme.js -index 8a248c372a..990f703c39 100644 ---- a/Examples/test-suite/javascript/cpp_enum_runme.js -+++ b/Examples/test-suite/javascript/cpp_enum_runme.js -@@ -1,4 +1,4 @@ --var cpp_enum = require("cpp_enum"); -+var cpp_enum = require("./cpp_enum"); - - var f = new cpp_enum.Foo() - -@@ -26,3 +26,5 @@ if(cpp_enum.Foo.hi != cpp_enum.Hello){ - throw "Error"; - } - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/cpp_namespace_runme.js b/Examples/test-suite/javascript/cpp_namespace_runme.js -index a6ab799646..69e74ae4ed 100644 ---- a/Examples/test-suite/javascript/cpp_namespace_runme.js -+++ b/Examples/test-suite/javascript/cpp_namespace_runme.js -@@ -1,4 +1,4 @@ --var cpp_namespace = require("cpp_namespace"); -+var cpp_namespace = require("./cpp_namespace"); - - var n = cpp_namespace.fact(4); - if (n != 24){ -@@ -45,3 +45,5 @@ if (cpp_namespace.do_method3(t4,40) != "Test4::method"){ - if (cpp_namespace.do_method3(t5,40) != "Test5::method"){ - throw ("Bad return value error!"); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/cpp_static_runme.js b/Examples/test-suite/javascript/cpp_static_runme.js -index c7917e12ea..e78b7016bd 100644 ---- a/Examples/test-suite/javascript/cpp_static_runme.js -+++ b/Examples/test-suite/javascript/cpp_static_runme.js -@@ -1,4 +1,4 @@ --var cpp_static = require("cpp_static"); -+var cpp_static = require("./cpp_static"); - - cpp_static.StaticFunctionTest.static_func(); - cpp_static.StaticFunctionTest.static_func_2(1); -@@ -7,3 +7,5 @@ cpp_static.StaticMemberTest.static_int = 10; - if (cpp_static.StaticMemberTest.static_int != 10) - throw "error"; - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/director_alternating_runme.js b/Examples/test-suite/javascript/director_alternating_runme.js -index cff288d35c..40da25af0c 100644 ---- a/Examples/test-suite/javascript/director_alternating_runme.js -+++ b/Examples/test-suite/javascript/director_alternating_runme.js -@@ -1,5 +1,7 @@ --var director_alternating = require("director_alternating"); -+var director_alternating = require("./director_alternating"); - - id = director_alternating.getBar().id(); - if (id != director_alternating.idFromGetBar()) - throw ("Error, Got wrong id: " + str(id)); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/disown_runme.js b/Examples/test-suite/javascript/disown_runme.js -index ea742b51e5..1950a2fb6c 100644 ---- a/Examples/test-suite/javascript/disown_runme.js -+++ b/Examples/test-suite/javascript/disown_runme.js -@@ -1,4 +1,4 @@ --var disown = require("disown"); -+var disown = require("./disown"); - - var a = new disown.A(); - var tmp = a.thisown; -@@ -20,3 +20,5 @@ b.acquire(a); - if (a.thisown) { - throw new Error("Failed."); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/dynamic_cast_runme.js b/Examples/test-suite/javascript/dynamic_cast_runme.js -index 32eabcf8b0..b807a93ca2 100644 ---- a/Examples/test-suite/javascript/dynamic_cast_runme.js -+++ b/Examples/test-suite/javascript/dynamic_cast_runme.js -@@ -1,4 +1,4 @@ --var dynamic_cast = require("dynamic_cast"); -+var dynamic_cast = require("./dynamic_cast"); - - var f = new dynamic_cast.Foo(); - var b = new dynamic_cast.Bar(); -@@ -10,3 +10,5 @@ var a = dynamic_cast.do_test(y); - if (a != "Bar::test") { - throw new Error("Failed."); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/empty_c_runme.js b/Examples/test-suite/javascript/empty_c_runme.js -index 1cc22e4ce7..61d57853bf 100644 ---- a/Examples/test-suite/javascript/empty_c_runme.js -+++ b/Examples/test-suite/javascript/empty_c_runme.js -@@ -1 +1,3 @@ --var empty_c = require("empty_c"); -+var empty_c = require("./empty_c"); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/empty_runme.js b/Examples/test-suite/javascript/empty_runme.js -index 7894379bee..a16eed15a1 100644 ---- a/Examples/test-suite/javascript/empty_runme.js -+++ b/Examples/test-suite/javascript/empty_runme.js -@@ -1 +1,2 @@ --var empty = require("empty"); -\ No newline at end of file -+var empty = require("./empty"); -+process.exit(0); -diff --git a/Examples/test-suite/javascript/enum_template_runme.js b/Examples/test-suite/javascript/enum_template_runme.js -index 1e71e5f640..c44b813644 100644 ---- a/Examples/test-suite/javascript/enum_template_runme.js -+++ b/Examples/test-suite/javascript/enum_template_runme.js -@@ -1,4 +1,4 @@ --var enum_template = require("enum_template"); -+var enum_template = require("./enum_template"); - - if (enum_template.MakeETest() != 1) - throw "RuntimeError"; -@@ -6,3 +6,5 @@ if (enum_template.MakeETest() != 1) - if (enum_template.TakeETest(0) != null) - throw "RuntimeError"; - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/infinity_runme.js b/Examples/test-suite/javascript/infinity_runme.js -index 8ebe496a6b..4bef97a1c1 100644 ---- a/Examples/test-suite/javascript/infinity_runme.js -+++ b/Examples/test-suite/javascript/infinity_runme.js -@@ -1,5 +1,7 @@ --var infinity = require("infinity"); -+var infinity = require("./infinity"); - - infinity.initialise_MYINFINITY(); - var my_infinity = infinity.INFINITY; - var ret_val = infinity.use_infinity(my_infinity); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/namespace_virtual_method_runme.js b/Examples/test-suite/javascript/namespace_virtual_method_runme.js -index 4f1e05c848..9dfe33a3ea 100644 ---- a/Examples/test-suite/javascript/namespace_virtual_method_runme.js -+++ b/Examples/test-suite/javascript/namespace_virtual_method_runme.js -@@ -1,3 +1,5 @@ --var namespace_virtual_method = require("namespace_virtual_method"); -+var namespace_virtual_method = require("./namespace_virtual_method"); - - x = new namespace_virtual_method.Spam(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/native_directive_runme.js b/Examples/test-suite/javascript/native_directive_runme.js -index 5c1d69cf17..c7573cf7d8 100644 ---- a/Examples/test-suite/javascript/native_directive_runme.js -+++ b/Examples/test-suite/javascript/native_directive_runme.js -@@ -1,4 +1,4 @@ --var native_directive = require("native_directive"); -+var native_directive = require("./native_directive"); - - (function main() { - var s = "abc.DEF-123"; -@@ -7,3 +7,5 @@ var native_directive = require("native_directive"); - if (native_directive.CountAlphaCharacters(s) !== 6) - throw "CountAlphaCharacters failed"; - })(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/nspace_extend_runme.js b/Examples/test-suite/javascript/nspace_extend_runme.js -index 8cabfe9457..b7daf883a9 100644 ---- a/Examples/test-suite/javascript/nspace_extend_runme.js -+++ b/Examples/test-suite/javascript/nspace_extend_runme.js -@@ -1,4 +1,4 @@ --var nspace_extend = require("nspace_extend"); -+var nspace_extend = require("./nspace_extend"); - - // constructors and destructors - var color1 = new nspace_extend.Outer.Inner1.Color(); -@@ -25,3 +25,5 @@ created = nspace_extend.Outer.Inner2.Color.create(); - var col1 = new nspace_extend.Outer.Inner1.Color(); - var col2 = nspace_extend.Outer.Inner2.Color.create(); - col2.colors(col1, col1, col2, col2, col2); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/nspace_runme.js b/Examples/test-suite/javascript/nspace_runme.js -index 993610dd62..5402b13af9 100644 ---- a/Examples/test-suite/javascript/nspace_runme.js -+++ b/Examples/test-suite/javascript/nspace_runme.js -@@ -1,4 +1,4 @@ --var nspace = require("nspace"); -+var nspace = require("./nspace"); - - var color1 = new nspace.Outer.Inner1.Color(); - var color = new nspace.Outer.Inner1.Color(color1); -@@ -74,3 +74,5 @@ var blue3 = new nspace.Outer.Inner3.Blue(); - blue3.blueInstanceMethod(); - var blue4 = new nspace.Outer.Inner4.Blue(); - blue4.blueInstanceMethod(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/null_pointer_runme.js b/Examples/test-suite/javascript/null_pointer_runme.js -index 8a9b611867..25d1e535f4 100644 ---- a/Examples/test-suite/javascript/null_pointer_runme.js -+++ b/Examples/test-suite/javascript/null_pointer_runme.js -@@ -1,4 +1,4 @@ --var null_pointer = require("null_pointer"); -+var null_pointer = require("./null_pointer"); - - if (!null_pointer.funk(null)) { - throw new Error("Javascript 'null' should be converted into NULL."); -@@ -7,3 +7,5 @@ if (!null_pointer.funk(null)) { - if (null_pointer.getnull() != null) { - throw new Error("NULL should be converted into Javascript 'null'."); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/overload_copy_runme.js b/Examples/test-suite/javascript/overload_copy_runme.js -index e2f6107884..a1e1459317 100644 ---- a/Examples/test-suite/javascript/overload_copy_runme.js -+++ b/Examples/test-suite/javascript/overload_copy_runme.js -@@ -1,4 +1,6 @@ --var overload_copy = require("overload_copy"); -+var overload_copy = require("./overload_copy"); - - f = new overload_copy.Foo(); - g = new overload_copy.Foo(f); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/overload_null_runme.js b/Examples/test-suite/javascript/overload_null_runme.js -index f1e35cac76..74d855248e 100644 ---- a/Examples/test-suite/javascript/overload_null_runme.js -+++ b/Examples/test-suite/javascript/overload_null_runme.js -@@ -1,6 +1,6 @@ - // There are no typecheck typemaps in Javascript yet, so most of this test - // does not actually worked - the check functions have thus been commented out. --var overload_null = require("overload_null"); -+var overload_null = require("./overload_null"); - - var check = function(expected, actual) { - if (expected !== actual) { -@@ -47,3 +47,5 @@ check(20, o.byval2forwardptr(x)); - check(21, o.byval1forwardref(x)); - - check(22, o.byval2forwardref(x)); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/preproc_include_runme.js b/Examples/test-suite/javascript/preproc_include_runme.js -index 5ec72b842d..8d4e8601f6 100644 ---- a/Examples/test-suite/javascript/preproc_include_runme.js -+++ b/Examples/test-suite/javascript/preproc_include_runme.js -@@ -1,4 +1,4 @@ --var preproc_include = require("preproc_include"); -+var preproc_include = require("./preproc_include"); - - if (preproc_include.multiply10(10) != 100) - throw "RuntimeError"; -@@ -21,3 +21,5 @@ if (preproc_include.multiply60(10) != 600) - if (preproc_include.multiply70(10) != 700) - throw "RuntimeError"; - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/preproc_runme.js b/Examples/test-suite/javascript/preproc_runme.js -index 167ca5ac1c..15e026d8a6 100644 ---- a/Examples/test-suite/javascript/preproc_runme.js -+++ b/Examples/test-suite/javascript/preproc_runme.js -@@ -1,4 +1,4 @@ --var preproc = require("preproc"); -+var preproc = require("./preproc"); - - if (preproc.endif != 1) - throw "RuntimeError"; -@@ -12,3 +12,5 @@ if (preproc.defined != 1) - if (2*preproc.one != preproc.two) - throw "RuntimeError"; - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/rename1_runme.js b/Examples/test-suite/javascript/rename1_runme.js -index 7b2ac37b6d..4741673c90 100644 ---- a/Examples/test-suite/javascript/rename1_runme.js -+++ b/Examples/test-suite/javascript/rename1_runme.js -@@ -1,4 +1,4 @@ --var rename = require("rename1"); -+var rename = require("./rename1"); - - function part1() { - var xyz = new rename.XYZInt(); -@@ -62,3 +62,5 @@ part2(); - part3(); - part4(); - part5(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/rename2_runme.js b/Examples/test-suite/javascript/rename2_runme.js -index 040c798bb5..6f6a7d3814 100644 ---- a/Examples/test-suite/javascript/rename2_runme.js -+++ b/Examples/test-suite/javascript/rename2_runme.js -@@ -1,4 +1,4 @@ --var rename = require("rename2"); -+var rename = require("./rename2"); - - function part1() { - var xyz = new rename.XYZInt(); -@@ -62,3 +62,5 @@ part2(); - part3(); - part4(); - part5(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/rename3_runme.js b/Examples/test-suite/javascript/rename3_runme.js -index fb9393b037..fcac4dfe02 100644 ---- a/Examples/test-suite/javascript/rename3_runme.js -+++ b/Examples/test-suite/javascript/rename3_runme.js -@@ -1,4 +1,4 @@ --var rename = require("rename3"); -+var rename = require("./rename3"); - - function part1() { - var xyz = new rename.XYZInt(); -@@ -62,3 +62,5 @@ part2(); - part3(); - part4(); - part5(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/rename4_runme.js b/Examples/test-suite/javascript/rename4_runme.js -index 1c3d8e77f5..9bf1c45a24 100644 ---- a/Examples/test-suite/javascript/rename4_runme.js -+++ b/Examples/test-suite/javascript/rename4_runme.js -@@ -1,4 +1,4 @@ --var rename = require("rename4"); -+var rename = require("./rename4"); - - function part1() { - var xyz = new rename.XYZInt(); -@@ -62,3 +62,5 @@ part2(); - part3(); - part4(); - part5(); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/rename_scope_runme.js b/Examples/test-suite/javascript/rename_scope_runme.js -index fea4d2ca99..dffbcded7d 100644 ---- a/Examples/test-suite/javascript/rename_scope_runme.js -+++ b/Examples/test-suite/javascript/rename_scope_runme.js -@@ -1,4 +1,4 @@ --var rename_scope = require("rename_scope"); -+var rename_scope = require("./rename_scope"); - - var a = new rename_scope.Natural_UP(); - var b = new rename_scope.Natural_BP(); -@@ -15,3 +15,5 @@ var f = rename_scope.equals; - if (f === undefined) { - throw new Error("Equality operator has not been renamed."); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/rename_simple_runme.js b/Examples/test-suite/javascript/rename_simple_runme.js -index 21350cd3ee..9d39f1a62e 100644 ---- a/Examples/test-suite/javascript/rename_simple_runme.js -+++ b/Examples/test-suite/javascript/rename_simple_runme.js -@@ -1,4 +1,4 @@ --var rename_simple = require("rename_simple"); -+var rename_simple = require("./rename_simple"); - var NewStruct = rename_simple.NewStruct; - - var s = new NewStruct(); -@@ -48,3 +48,5 @@ rename_simple.NewGlobalVariable = 6666; - if (rename_simple.NewGlobalVariable !== 6666) { - throw new Error("rename_simple.NewGlobalVariable: Expected 6666, was " + rename_simple.NewGlobalVariable); - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/ret_by_value_runme.js b/Examples/test-suite/javascript/ret_by_value_runme.js -index 9d0840602a..e0eec07cf7 100644 ---- a/Examples/test-suite/javascript/ret_by_value_runme.js -+++ b/Examples/test-suite/javascript/ret_by_value_runme.js -@@ -1,4 +1,4 @@ --var ret_by_value = require("ret_by_value"); -+var ret_by_value = require("./ret_by_value"); - - a = ret_by_value.get_test(); - if (a.myInt != 100) -@@ -6,3 +6,5 @@ if (a.myInt != 100) - - if (a.myShort != 200) - throw "RuntimeError"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/string_simple_runme.js b/Examples/test-suite/javascript/string_simple_runme.js -index 71fbb7bd07..21668fc05f 100644 ---- a/Examples/test-suite/javascript/string_simple_runme.js -+++ b/Examples/test-suite/javascript/string_simple_runme.js -@@ -1,4 +1,4 @@ --var string_simple = require("string_simple"); -+var string_simple = require("./string_simple"); - - // Test unicode string - var str = "olé"; -@@ -8,3 +8,5 @@ var copy = string_simple.copy_str(str); - if (str !== copy) { - throw "Error: copy is not equal: original="+str+", copy="+copy; - } -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/struct_value_runme.js b/Examples/test-suite/javascript/struct_value_runme.js -index 5b171b8fed..d277481ed0 100644 ---- a/Examples/test-suite/javascript/struct_value_runme.js -+++ b/Examples/test-suite/javascript/struct_value_runme.js -@@ -1,4 +1,4 @@ --var struct_value = require("struct_value"); -+var struct_value = require("./struct_value"); - - b = new struct_value.Bar(); - -@@ -9,3 +9,5 @@ throw "RuntimeError"; - b.b.x = 3; - if (b.b.x != 3) - throw "RuntimeError" -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/swig_exception_runme.js b/Examples/test-suite/javascript/swig_exception_runme.js -index 55435e9477..257dedc8fc 100644 ---- a/Examples/test-suite/javascript/swig_exception_runme.js -+++ b/Examples/test-suite/javascript/swig_exception_runme.js -@@ -1,4 +1,4 @@ --var swig_exception = require("swig_exception"); -+var swig_exception = require("./swig_exception"); - - var c = new swig_exception.Circle(10); - var s = new swig_exception.Square(10); -@@ -28,3 +28,5 @@ if (swig_exception.Shape.nshapes != 0) { - throw "Shape.nshapes should be 0, actually " + swig_exception.Shape.nshapes; - } - */ -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/template_static_runme.js b/Examples/test-suite/javascript/template_static_runme.js -index d6106138ae..aa3e548b8d 100644 ---- a/Examples/test-suite/javascript/template_static_runme.js -+++ b/Examples/test-suite/javascript/template_static_runme.js -@@ -1,3 +1,5 @@ --var template_static = require("template_static"); -+var template_static = require("./template_static"); - - template_static.Foo.bar_double(1); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typedef_class_runme.js b/Examples/test-suite/javascript/typedef_class_runme.js -index 64e0051c37..5d6df5b6b7 100644 ---- a/Examples/test-suite/javascript/typedef_class_runme.js -+++ b/Examples/test-suite/javascript/typedef_class_runme.js -@@ -1,7 +1,9 @@ --var typedef_class = require("typedef_class"); -+var typedef_class = require("./typedef_class"); - - a = new typedef_class.RealA(); - a.a = 3; - - b = new typedef_class.B(); - b.testA(a); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typedef_inherit_runme.js b/Examples/test-suite/javascript/typedef_inherit_runme.js -index 7590e1e6ec..b13c59a030 100644 ---- a/Examples/test-suite/javascript/typedef_inherit_runme.js -+++ b/Examples/test-suite/javascript/typedef_inherit_runme.js -@@ -1,4 +1,4 @@ --var typedef_inherit = require("typedef_inherit"); -+var typedef_inherit = require("./typedef_inherit"); - - a = new typedef_inherit.Foo(); - b = new typedef_inherit.Bar(); -@@ -21,3 +21,5 @@ if (x != "Spam::blah") - x = typedef_inherit.do_blah2(d); - if (x != "Grok::blah") - print ("Whoa! Bad return" + x); -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typedef_scope_runme.js b/Examples/test-suite/javascript/typedef_scope_runme.js -index 5c1368ab78..e8b2a8255c 100644 ---- a/Examples/test-suite/javascript/typedef_scope_runme.js -+++ b/Examples/test-suite/javascript/typedef_scope_runme.js -@@ -1,4 +1,4 @@ --var typedef_scope = require("typedef_scope"); -+var typedef_scope = require("./typedef_scope"); - - b = new typedef_scope.Bar(); - x = b.test1(42,"hello"); -@@ -10,3 +10,5 @@ if (x != "hello") - print("Failed!!"); - - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typemap_arrays_runme.js b/Examples/test-suite/javascript/typemap_arrays_runme.js -index 610ecdd9c7..c333f43930 100644 ---- a/Examples/test-suite/javascript/typemap_arrays_runme.js -+++ b/Examples/test-suite/javascript/typemap_arrays_runme.js -@@ -1,5 +1,7 @@ --var typemap_arrays = require("typemap_arrays"); -+var typemap_arrays = require("./typemap_arrays"); - - if (typemap_arrays.sumA(null) != 60) - throw "RuntimeError, Sum is wrong"; - -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typemap_delete_runme.js b/Examples/test-suite/javascript/typemap_delete_runme.js -index 1d42ce4daf..72252fe013 100644 ---- a/Examples/test-suite/javascript/typemap_delete_runme.js -+++ b/Examples/test-suite/javascript/typemap_delete_runme.js -@@ -1,5 +1,7 @@ --var typemap_delete = require("typemap_delete"); -+var typemap_delete = require("./typemap_delete"); - - r = new typemap_delete.Rect(123); - if (r.val != 123) - throw "RuntimeError"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typemap_namespace_runme.js b/Examples/test-suite/javascript/typemap_namespace_runme.js -index 2aa3580249..962e54afa4 100644 ---- a/Examples/test-suite/javascript/typemap_namespace_runme.js -+++ b/Examples/test-suite/javascript/typemap_namespace_runme.js -@@ -1,7 +1,9 @@ --var typemap_namespace = require("typemap_namespace"); -+var typemap_namespace = require("./typemap_namespace"); - - if (typemap_namespace.test1("hello") != "hello") - throw "RuntimeError"; - - if (typemap_namespace.test2("hello") != "hello") - throw "RuntimeError"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/typemap_ns_using_runme.js b/Examples/test-suite/javascript/typemap_ns_using_runme.js -index 7e4019ab24..e97ea473c6 100644 ---- a/Examples/test-suite/javascript/typemap_ns_using_runme.js -+++ b/Examples/test-suite/javascript/typemap_ns_using_runme.js -@@ -1,4 +1,6 @@ --var typemap_ns_using = require("typemap_ns_using"); -+var typemap_ns_using = require("./typemap_ns_using"); - - if (typemap_ns_using.spam(37) != 37) - throw "RuntimeError"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/using1_runme.js b/Examples/test-suite/javascript/using1_runme.js -index 2415156f08..68917b0156 100644 ---- a/Examples/test-suite/javascript/using1_runme.js -+++ b/Examples/test-suite/javascript/using1_runme.js -@@ -1,4 +1,6 @@ --var using1 = require("using1"); -+var using1 = require("./using1"); - - if (using1.spam(37) != 37) - throw "RuntimeError"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/using2_runme.js b/Examples/test-suite/javascript/using2_runme.js -index 2ef08faca1..001f551403 100644 ---- a/Examples/test-suite/javascript/using2_runme.js -+++ b/Examples/test-suite/javascript/using2_runme.js -@@ -1,4 +1,6 @@ --var using2 = require("using2"); -+var using2 = require("./using2"); - - if (using2.spam(37) != 37) - throw "RuntimeError"; -+ -+process.exit(0); -diff --git a/Examples/test-suite/javascript/varargs_runme.js b/Examples/test-suite/javascript/varargs_runme.js -index fc6d945c1a..66348f2983 100644 ---- a/Examples/test-suite/javascript/varargs_runme.js -+++ b/Examples/test-suite/javascript/varargs_runme.js -@@ -1,4 +1,4 @@ --var varargs = require("varargs"); -+var varargs = require("./varargs"); - - if (varargs.test("Hello") != "Hello") { - throw new Error("Failed"); -@@ -42,3 +42,5 @@ try { - if (!thrown) { - throw new Error("Failed"); - } -+ -+process.exit(0); -diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg -index c4aaf3db0c..c2aacc61a5 100644 ---- a/Lib/javascript/v8/javascriptcode.swg -+++ b/Lib/javascript/v8/javascriptcode.swg -@@ -11,7 +11,7 @@ - static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle self = args.Holder(); -+ v8::Local self = args.Holder(); - $jslocals - if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); - $jscode -@@ -53,7 +53,7 @@ static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { - SWIGV8_HANDLESCOPE(); - - OverloadErrorHandler errorHandler; -- v8::Handle self; -+ v8::Local self; - - // switch all cases by means of series of if-returns. - $jsdispatchcases -@@ -78,7 +78,7 @@ fail: - static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args, V8ErrorHandler &SWIGV8_ErrorHandler) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle self = args.Holder(); -+ v8::Local self = args.Holder(); - $jslocals - if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); - $jscode -@@ -226,7 +226,7 @@ static SwigV8ReturnValue $jswrapper(v8::Local property, const SwigV8Pr - #endif - SWIGV8_HANDLESCOPE(); - -- v8::Handle jsresult; -+ v8::Local jsresult; - $jslocals - $jscode - SWIGV8_RETURN_INFO(jsresult, info); -@@ -271,7 +271,7 @@ fail: - static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle jsresult; -+ v8::Local jsresult; - $jslocals - if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); - -@@ -296,7 +296,7 @@ fail: - static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle jsresult; -+ v8::Local jsresult; - OverloadErrorHandler errorHandler; - $jscode - -@@ -320,7 +320,7 @@ static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args, V8ErrorHandler - { - SWIGV8_HANDLESCOPE(); - -- v8::Handle jsresult; -+ v8::Local jsresult; - $jslocals - $jscode - SWIGV8_RETURN(jsresult); -@@ -374,7 +374,7 @@ fail: - %fragment("jsv8_define_class_template", "templates") - %{ - /* Name: $jsmangledname, Type: $jsmangledtype, Dtor: $jsdtor */ -- v8::Handle $jsmangledname_class = SWIGV8_CreateClassTemplate("$jsmangledname"); -+ v8::Local $jsmangledname_class = SWIGV8_CreateClassTemplate("$jsmangledname"); - SWIGV8_SET_CLASS_TEMPL($jsmangledname_clientData.class_templ, $jsmangledname_class); - $jsmangledname_clientData.dtor = $jsdtor; - if (SWIGTYPE_$jsmangledtype->clientdata == 0) { -@@ -420,11 +420,15 @@ fail: - %fragment("jsv8_create_class_instance", "templates") - %{ - /* Class: $jsname ($jsmangledname) */ -- v8::Handle $jsmangledname_class_0 = SWIGV8_CreateClassTemplate("$jsname"); -+ v8::Local $jsmangledname_class_0 = SWIGV8_CreateClassTemplate("$jsname"); - $jsmangledname_class_0->SetCallHandler($jsctor); - $jsmangledname_class_0->Inherit($jsmangledname_class); -+#if (SWIG_V8_VERSION < 0x0705) - $jsmangledname_class_0->SetHiddenPrototype(true); -- v8::Handle $jsmangledname_obj = $jsmangledname_class_0->GetFunction(); -+ v8::Local $jsmangledname_obj = $jsmangledname_class_0->GetFunction(); -+#else -+ v8::Local $jsmangledname_obj = $jsmangledname_class_0->GetFunction(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); -+#endif - %} - - /* ----------------------------------------------------------------------------- -@@ -435,7 +439,11 @@ fail: - * ----------------------------------------------------------------------------- */ - %fragment("jsv8_register_class", "templates") - %{ -+#if (SWIG_V8_VERSION < 0x0706) - $jsparent_obj->Set(SWIGV8_SYMBOL_NEW("$jsname"), $jsmangledname_obj); -+#else -+ $jsparent_obj->Set(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW("$jsname"), $jsmangledname_obj); -+#endif - %} - - /* ----------------------------------------------------------------------------- -@@ -444,7 +452,7 @@ fail: - * ----------------------------------------------------------------------------- */ - %fragment("jsv8_create_namespace", "templates") - %{ -- v8::Handle $jsmangledname_obj = SWIGV8_OBJECT_NEW(); -+ v8::Local $jsmangledname_obj = SWIGV8_OBJECT_NEW(); - %} - - /* ----------------------------------------------------------------------------- -diff --git a/Lib/javascript/v8/javascriptcomplex.swg b/Lib/javascript/v8/javascriptcomplex.swg -index d3b4aaffa6..533e548131 100644 ---- a/Lib/javascript/v8/javascriptcomplex.swg -+++ b/Lib/javascript/v8/javascriptcomplex.swg -@@ -12,7 +12,7 @@ - %fragment(SWIG_From_frag(Type),"header", - fragment=SWIG_From_frag(double)) - { --SWIGINTERNINLINE v8::Handle -+SWIGINTERNINLINE v8::Local - SWIG_From_dec(Type)(%ifcplusplus(const Type&, Type) c) - { - SWIGV8_HANDLESCOPE_ESC(); -@@ -32,12 +32,12 @@ SWIG_From_dec(Type)(%ifcplusplus(const Type&, Type) c) - fragment=SWIG_AsVal_frag(double)) - { - SWIGINTERN int --SWIG_AsVal_dec(Type) (v8::Handle o, Type* val) -+SWIG_AsVal_dec(Type) (v8::Local o, Type* val) - { - SWIGV8_HANDLESCOPE(); - - if (o->IsArray()) { -- v8::Handle array = v8::Handle::Cast(o); -+ v8::Local array = v8::Local::Cast(o); - - if(array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); - double re, im; -@@ -74,12 +74,12 @@ SWIG_AsVal_dec(Type) (v8::Handle o, Type* val) - %fragment(SWIG_AsVal_frag(Type),"header", - fragment=SWIG_AsVal_frag(float)) { - SWIGINTERN int --SWIG_AsVal_dec(Type) (v8::Handle o, Type* val) -+SWIG_AsVal_dec(Type) (v8::Local o, Type* val) - { - SWIGV8_HANDLESCOPE(); - - if (o->IsArray()) { -- v8::Handle array = v8::Handle::Cast(o); -+ v8::Local array = v8::Local::Cast(o); - - if(array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); - double re, im; -diff --git a/Lib/javascript/v8/javascripthelpers.swg b/Lib/javascript/v8/javascripthelpers.swg -index 80fbd7aa1a..0cd24a1942 100644 ---- a/Lib/javascript/v8/javascripthelpers.swg -+++ b/Lib/javascript/v8/javascripthelpers.swg -@@ -21,19 +21,19 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfoVoid; - /** - * Creates a class template for a class with specified initialization function. - */ --SWIGRUNTIME v8::Handle SWIGV8_CreateClassTemplate(const char* symbol) { -+SWIGRUNTIME v8::Local SWIGV8_CreateClassTemplate(const char* symbol) { - SWIGV8_HANDLESCOPE_ESC(); - - v8::Local class_templ = SWIGV8_FUNCTEMPLATE_NEW_VOID(); - class_templ->SetClassName(SWIGV8_SYMBOL_NEW(symbol)); - -- v8::Handle inst_templ = class_templ->InstanceTemplate(); -+ v8::Local inst_templ = class_templ->InstanceTemplate(); - inst_templ->SetInternalFieldCount(1); - -- v8::Handle equals_templ = class_templ->PrototypeTemplate(); -+ v8::Local equals_templ = class_templ->PrototypeTemplate(); - equals_templ->Set(SWIGV8_SYMBOL_NEW("equals"), SWIGV8_FUNCTEMPLATE_NEW(_SWIGV8_wrap_equals)); - -- v8::Handle cptr_templ = class_templ->PrototypeTemplate(); -+ v8::Local cptr_templ = class_templ->PrototypeTemplate(); - cptr_templ->Set(SWIGV8_SYMBOL_NEW("getCPtr"), SWIGV8_FUNCTEMPLATE_NEW(_wrap_getCPtr)); - - SWIGV8_ESCAPE(class_templ); -@@ -42,33 +42,39 @@ SWIGRUNTIME v8::Handle SWIGV8_CreateClassTemplate(const ch - /** - * Registers a class method with given name for a given class template. - */ --SWIGRUNTIME void SWIGV8_AddMemberFunction(v8::Handle class_templ, const char* symbol, -+SWIGRUNTIME void SWIGV8_AddMemberFunction(v8::Local class_templ, const char* symbol, - SwigV8FunctionCallback _func) { -- v8::Handle proto_templ = class_templ->PrototypeTemplate(); -+ v8::Local proto_templ = class_templ->PrototypeTemplate(); - proto_templ->Set(SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)); - } - - /** - * Registers a class property with given name for a given class template. - */ --SWIGRUNTIME void SWIGV8_AddMemberVariable(v8::Handle class_templ, const char* symbol, -+SWIGRUNTIME void SWIGV8_AddMemberVariable(v8::Local class_templ, const char* symbol, - SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) { -- v8::Handle proto_templ = class_templ->InstanceTemplate(); -+ v8::Local proto_templ = class_templ->InstanceTemplate(); - proto_templ->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter); - } - - /** - * Registers a class method with given name for a given object. - */ --SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Handle obj, const char* symbol, -+SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Local obj, const char* symbol, - const SwigV8FunctionCallback& _func) { -+#if (SWIG_V8_VERSION < 0x0705) - obj->Set(SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)->GetFunction()); -+#elif (SWIG_V8_VERSION < 0x0706) -+ obj->Set(SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)->GetFunction(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked()); -+#else -+ obj->Set(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)->GetFunction(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked()); -+#endif - } - - /** - * Registers a class method with given name for a given object. - */ --SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle obj, const char* symbol, -+SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Local obj, const char* symbol, - SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) { - #if (V8_MAJOR_VERSION-0) < 5 - obj->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter); -diff --git a/Lib/javascript/v8/javascriptinit.swg b/Lib/javascript/v8/javascriptinit.swg -index 8faf2dd8e1..450aa9c6d9 100644 ---- a/Lib/javascript/v8/javascriptinit.swg -+++ b/Lib/javascript/v8/javascriptinit.swg -@@ -70,14 +70,14 @@ extern "C" - #if (NODE_MODULE_VERSION < 0x000C) - void SWIGV8_INIT (v8::Handle exports) - #else --void SWIGV8_INIT (v8::Handle exports, v8::Handle /*module*/) -+void SWIGV8_INIT (v8::Local exports, v8::Local /*module*/) - #endif - { - SWIG_InitializeModule(static_cast(&exports)); - - SWIGV8_HANDLESCOPE(); - -- v8::Handle exports_obj = exports; -+ v8::Local exports_obj = exports; - %} - - -diff --git a/Lib/javascript/v8/javascriptprimtypes.swg b/Lib/javascript/v8/javascriptprimtypes.swg -index f76be983b1..24f5daf7c5 100644 ---- a/Lib/javascript/v8/javascriptprimtypes.swg -+++ b/Lib/javascript/v8/javascriptprimtypes.swg -@@ -6,7 +6,7 @@ - - %fragment(SWIG_From_frag(bool),"header") { - SWIGINTERNINLINE --v8::Handle -+v8::Local - SWIG_From_dec(bool)(bool value) - { - return SWIGV8_BOOLEAN_NEW(value); -@@ -16,7 +16,7 @@ SWIG_From_dec(bool)(bool value) - %fragment(SWIG_AsVal_frag(bool),"header", - fragment=SWIG_AsVal_frag(long)) { - SWIGINTERN --int SWIG_AsVal_dec(bool)(v8::Handle obj, bool *val) -+int SWIG_AsVal_dec(bool)(v8::Local obj, bool *val) - { - if(!obj->IsBoolean()) { - return SWIG_ERROR; -@@ -31,7 +31,7 @@ int SWIG_AsVal_dec(bool)(v8::Handle obj, bool *val) - - %fragment(SWIG_From_frag(int),"header") { - SWIGINTERNINLINE --v8::Handle SWIG_From_dec(int)(int value) -+v8::Local SWIG_From_dec(int)(int value) - { - return SWIGV8_INT32_NEW(value); - } -@@ -39,7 +39,7 @@ v8::Handle SWIG_From_dec(int)(int value) - - %fragment(SWIG_AsVal_frag(int),"header") { - SWIGINTERN --int SWIG_AsVal_dec(int)(v8::Handle valRef, int* val) -+int SWIG_AsVal_dec(int)(v8::Local valRef, int* val) - { - if (!valRef->IsNumber()) { - return SWIG_TypeError; -@@ -54,7 +54,7 @@ int SWIG_AsVal_dec(int)(v8::Handle valRef, int* val) - - %fragment(SWIG_From_frag(long),"header") { - SWIGINTERNINLINE --v8::Handle SWIG_From_dec(long)(long value) -+v8::Local SWIG_From_dec(long)(long value) - { - return SWIGV8_NUMBER_NEW(value); - } -@@ -63,7 +63,7 @@ v8::Handle SWIG_From_dec(long)(long value) - %fragment(SWIG_AsVal_frag(long),"header", - fragment="SWIG_CanCastAsInteger") { - SWIGINTERN --int SWIG_AsVal_dec(long)(v8::Handle obj, long* val) -+int SWIG_AsVal_dec(long)(v8::Local obj, long* val) - { - if (!obj->IsNumber()) { - return SWIG_TypeError; -@@ -79,7 +79,7 @@ int SWIG_AsVal_dec(long)(v8::Handle obj, long* val) - %fragment(SWIG_From_frag(unsigned long),"header", - fragment=SWIG_From_frag(long)) { - SWIGINTERNINLINE --v8::Handle SWIG_From_dec(unsigned long)(unsigned long value) -+v8::Local SWIG_From_dec(unsigned long)(unsigned long value) - { - return (value > LONG_MAX) ? - SWIGV8_INTEGER_NEW_UNS(value) : SWIGV8_INTEGER_NEW(%numeric_cast(value,long)); -@@ -89,7 +89,7 @@ v8::Handle SWIG_From_dec(unsigned long)(unsigned long value) - %fragment(SWIG_AsVal_frag(unsigned long),"header", - fragment="SWIG_CanCastAsInteger") { - SWIGINTERN --int SWIG_AsVal_dec(unsigned long)(v8::Handle obj, unsigned long *val) -+int SWIG_AsVal_dec(unsigned long)(v8::Local obj, unsigned long *val) - { - if(!obj->IsNumber()) { - return SWIG_TypeError; -@@ -115,7 +115,7 @@ int SWIG_AsVal_dec(unsigned long)(v8::Handle obj, unsigned long *val) - fragment="SWIG_LongLongAvailable") { - %#ifdef SWIG_LONG_LONG_AVAILABLE - SWIGINTERNINLINE --v8::Handle SWIG_From_dec(long long)(long long value) -+v8::Local SWIG_From_dec(long long)(long long value) - { - return SWIGV8_NUMBER_NEW(value); - } -@@ -128,7 +128,7 @@ v8::Handle SWIG_From_dec(long long)(long long value) - fragment="SWIG_LongLongAvailable") { - %#ifdef SWIG_LONG_LONG_AVAILABLE - SWIGINTERN --int SWIG_AsVal_dec(long long)(v8::Handle obj, long long* val) -+int SWIG_AsVal_dec(long long)(v8::Local obj, long long* val) - { - if (!obj->IsNumber()) { - return SWIG_TypeError; -@@ -148,7 +148,7 @@ int SWIG_AsVal_dec(long long)(v8::Handle obj, long long* val) - fragment="SWIG_LongLongAvailable") { - %#ifdef SWIG_LONG_LONG_AVAILABLE - SWIGINTERNINLINE --v8::Handle SWIG_From_dec(unsigned long long)(unsigned long long value) -+v8::Local SWIG_From_dec(unsigned long long)(unsigned long long value) - { - return (value > LONG_MAX) ? - SWIGV8_INTEGER_NEW_UNS(value) : SWIGV8_INTEGER_NEW(%numeric_cast(value,long)); -@@ -162,7 +162,7 @@ v8::Handle SWIG_From_dec(unsigned long long)(unsigned long long value - fragment="SWIG_LongLongAvailable") { - %#ifdef SWIG_LONG_LONG_AVAILABLE - SWIGINTERN --int SWIG_AsVal_dec(unsigned long long)(v8::Handle obj, unsigned long long *val) -+int SWIG_AsVal_dec(unsigned long long)(v8::Local obj, unsigned long long *val) - { - if(!obj->IsNumber()) { - return SWIG_TypeError; -@@ -185,7 +185,7 @@ int SWIG_AsVal_dec(unsigned long long)(v8::Handle obj, unsigned long - - %fragment(SWIG_From_frag(double),"header") { - SWIGINTERN --v8::Handle SWIG_From_dec(double) (double val) -+v8::Local SWIG_From_dec(double) (double val) - { - return SWIGV8_NUMBER_NEW(val); - } -@@ -193,7 +193,7 @@ v8::Handle SWIG_From_dec(double) (double val) - - %fragment(SWIG_AsVal_frag(double),"header") { - SWIGINTERN --int SWIG_AsVal_dec(double)(v8::Handle obj, double *val) -+int SWIG_AsVal_dec(double)(v8::Local obj, double *val) - { - if(!obj->IsNumber()) { - return SWIG_TypeError; -diff --git a/Lib/javascript/v8/javascriptrun.swg b/Lib/javascript/v8/javascriptrun.swg -index 2452f4040d..db6299a84e 100644 ---- a/Lib/javascript/v8/javascriptrun.swg -+++ b/Lib/javascript/v8/javascriptrun.swg -@@ -10,7 +10,11 @@ - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031803) - #define SWIGV8_STRING_NEW2(cstr, len) v8::String::New(cstr, len) - #else -+#if (SWIG_V8_VERSION < 0x0706) - #define SWIGV8_STRING_NEW2(cstr, len) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), cstr, v8::String::kNormalString, len) -+#else -+#define SWIGV8_STRING_NEW2(cstr, len) (v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), cstr, v8::NewStringType::kNormal, len)).ToLocalChecked() -+#endif - #endif - - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) -@@ -47,12 +51,18 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; - #define SWIGV8_THROW_EXCEPTION(err) v8::ThrowException(err) - #define SWIGV8_STRING_NEW(str) v8::String::New(str) - #define SWIGV8_SYMBOL_NEW(sym) v8::String::NewSymbol(sym) -+#elif (SWIG_V8_VERSION < 0x0706) -+#define SWIGV8_ADJUST_MEMORY(size) v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(size) -+#define SWIGV8_CURRENT_CONTEXT() v8::Isolate::GetCurrent()->GetCurrentContext() -+#define SWIGV8_THROW_EXCEPTION(err) v8::Isolate::GetCurrent()->ThrowException(err) -+#define SWIGV8_STRING_NEW(str) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str, v8::String::kNormalString) -+#define SWIGV8_SYMBOL_NEW(sym) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), sym, v8::String::kNormalString) - #else - #define SWIGV8_ADJUST_MEMORY(size) v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(size) - #define SWIGV8_CURRENT_CONTEXT() v8::Isolate::GetCurrent()->GetCurrentContext() - #define SWIGV8_THROW_EXCEPTION(err) v8::Isolate::GetCurrent()->ThrowException(err) --#define SWIGV8_STRING_NEW(str) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str) --#define SWIGV8_SYMBOL_NEW(sym) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), sym) -+#define SWIGV8_STRING_NEW(str) (v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str, v8::NewStringType::kNormal)).ToLocalChecked() -+#define SWIGV8_SYMBOL_NEW(sym) (v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), sym, v8::NewStringType::kNormal)).ToLocalChecked() - #endif - - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032318) -@@ -107,7 +117,7 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; - #define SWIGV8_BOOLEAN_VALUE(handle) (handle)->BooleanValue() - #define SWIGV8_WRITE_UTF8(handle, buffer, len) (handle)->WriteUtf8(buffer, len) - #define SWIGV8_UTF8_LENGTH(handle) (handle)->Utf8Length() --#else -+#elif (SWIG_V8_VERSION < 0x0706) - #define SWIGV8_TO_OBJECT(handle) (handle)->ToObject(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() - #define SWIGV8_TO_STRING(handle) (handle)->ToString(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() - #define SWIGV8_NUMBER_VALUE(handle) (handle)->NumberValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() -@@ -115,6 +125,14 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; - #define SWIGV8_BOOLEAN_VALUE(handle) (handle)->BooleanValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() - #define SWIGV8_WRITE_UTF8(handle, buffer, len) (handle)->WriteUtf8(v8::Isolate::GetCurrent(), buffer, len) - #define SWIGV8_UTF8_LENGTH(handle) (handle)->Utf8Length(v8::Isolate::GetCurrent()) -+#else -+#define SWIGV8_TO_OBJECT(handle) (handle)->ToObject(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() -+#define SWIGV8_TO_STRING(handle) (handle)->ToString(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() -+#define SWIGV8_NUMBER_VALUE(handle) (handle)->NumberValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() -+#define SWIGV8_INTEGER_VALUE(handle) (handle)->IntegerValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() -+#define SWIGV8_BOOLEAN_VALUE(handle) (handle)->BooleanValue(v8::Isolate::GetCurrent()) -+#define SWIGV8_WRITE_UTF8(handle, buffer, len) (handle)->WriteUtf8(v8::Isolate::GetCurrent(), buffer, len) -+#define SWIGV8_UTF8_LENGTH(handle) (handle)->Utf8Length(v8::Isolate::GetCurrent()) - #endif - - /* --------------------------------------------------------------------------- -@@ -163,7 +181,7 @@ public: - SWIGV8_THROW_EXCEPTION(err); - } - } -- v8::Handle err; -+ v8::Local err; - }; - - /* --------------------------------------------------------------------------- -@@ -228,13 +246,13 @@ public: - - SWIGRUNTIME v8::Persistent SWIGV8_SWIGTYPE_Proxy_class_templ; - --SWIGRUNTIME int SWIG_V8_ConvertInstancePtr(v8::Handle objRef, void **ptr, swig_type_info *info, int flags) { -+SWIGRUNTIME int SWIG_V8_ConvertInstancePtr(v8::Local objRef, void **ptr, swig_type_info *info, int flags) { - SWIGV8_HANDLESCOPE(); - - if(objRef->InternalFieldCount() < 1) return SWIG_ERROR; - - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031511) -- v8::Handle cdataRef = objRef->GetInternalField(0); -+ v8::Local cdataRef = objRef->GetInternalField(0); - SWIGV8_Proxy *cdata = static_cast(v8::External::Unwrap(cdataRef)); - #else - SWIGV8_Proxy *cdata = static_cast(objRef->GetAlignedPointerFromInternalField(0)); -@@ -280,11 +298,11 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackInfo valRef, void **ptr) { -+SWIGRUNTIME int SWIG_V8_GetInstancePtr(v8::Local valRef, void **ptr) { - if(!valRef->IsObject()) { - return SWIG_TypeError; - } -- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); -+ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); - - if(objRef->InternalFieldCount() < 1) return SWIG_ERROR; - -@@ -304,7 +322,7 @@ SWIGRUNTIME int SWIG_V8_GetInstancePtr(v8::Handle valRef, void **ptr) - return SWIG_OK; - } - --SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle obj, void *ptr, swig_type_info *info, int flags) { -+SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Local obj, void *ptr, swig_type_info *info, int flags) { - SWIGV8_Proxy *cdata = new SWIGV8_Proxy(); - cdata->swigCObject = ptr; - cdata->swigCMemOwn = (flags & SWIG_POINTER_OWN) ? 1 : 0; -@@ -361,13 +379,15 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle obj, void *ptr, sw - cdata->handle.MarkIndependent(); - #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100) - cdata->handle.MarkIndependent(v8::Isolate::GetCurrent()); --#else -+#elif (SWIG_V8_VERSION < 0x0706) - cdata->handle.MarkIndependent(); -+// Looks like future versions do not require that anymore: -+// https://monorail-prod.appspot.com/p/chromium/issues/detail?id=923361#c11 - #endif - - } - --SWIGRUNTIME int SWIG_V8_ConvertPtr(v8::Handle valRef, void **ptr, swig_type_info *info, int flags) { -+SWIGRUNTIME int SWIG_V8_ConvertPtr(v8::Local valRef, void **ptr, swig_type_info *info, int flags) { - SWIGV8_HANDLESCOPE(); - - /* special case: JavaScript null => C NULL pointer */ -@@ -378,14 +398,14 @@ SWIGRUNTIME int SWIG_V8_ConvertPtr(v8::Handle valRef, void **ptr, swi - if(!valRef->IsObject()) { - return SWIG_TypeError; - } -- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); -+ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); - return SWIG_V8_ConvertInstancePtr(objRef, ptr, info, flags); - } - --SWIGRUNTIME v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, int flags) { -+SWIGRUNTIME v8::Local SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, int flags) { - SWIGV8_HANDLESCOPE_ESC(); - -- v8::Handle class_templ; -+ v8::Local class_templ; - - if (ptr == NULL) { - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) -@@ -412,8 +432,11 @@ SWIGRUNTIME v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_inf - } - #endif - --// v8::Handle result = class_templ->InstanceTemplate()->NewInstance(); -+#if (SWIG_V8_VERSION < 0x0705) - v8::Local result = class_templ->InstanceTemplate()->NewInstance(); -+#else -+ v8::Local result = class_templ->InstanceTemplate()->NewInstance(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); -+#endif - SWIGV8_SetPrivateData(result, ptr, info, flags); - - SWIGV8_ESCAPE(result); -@@ -433,7 +456,7 @@ SWIGRUNTIME v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_inf - SWIGRUNTIME SwigV8ReturnValue _SWIGV8_wrap_equals(const SwigV8Arguments &args) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle jsresult; -+ v8::Local jsresult; - void *arg1 = (void *) 0 ; - void *arg2 = (void *) 0 ; - bool result; -@@ -463,7 +486,7 @@ fail: - SWIGRUNTIME SwigV8ReturnValue _wrap_getCPtr(const SwigV8Arguments &args) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle jsresult; -+ v8::Local jsresult; - void *arg1 = (void *) 0 ; - long result; - int res1; -@@ -502,10 +525,10 @@ public: - }; - - SWIGRUNTIMEINLINE --int SwigV8Packed_Check(v8::Handle valRef) { -+int SwigV8Packed_Check(v8::Local valRef) { - SWIGV8_HANDLESCOPE(); - -- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); -+ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); - if(objRef->InternalFieldCount() < 1) return false; - #if (V8_MAJOR_VERSION-0) < 5 - v8::Handle flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__")); -@@ -519,13 +542,13 @@ int SwigV8Packed_Check(v8::Handle valRef) { - } - - SWIGRUNTIME --swig_type_info *SwigV8Packed_UnpackData(v8::Handle valRef, void *ptr, size_t size) { -+swig_type_info *SwigV8Packed_UnpackData(v8::Local valRef, void *ptr, size_t size) { - if (SwigV8Packed_Check(valRef)) { - SWIGV8_HANDLESCOPE(); - - SwigV8PackedData *sobj; - -- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); -+ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); - - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031511) - v8::Handle cdataRef = objRef->GetInternalField(0); -@@ -542,7 +565,7 @@ swig_type_info *SwigV8Packed_UnpackData(v8::Handle valRef, void *ptr, - } - - SWIGRUNTIME --int SWIGV8_ConvertPacked(v8::Handle valRef, void *ptr, size_t sz, swig_type_info *ty) { -+int SWIGV8_ConvertPacked(v8::Local valRef, void *ptr, size_t sz, swig_type_info *ty) { - swig_type_info *to = SwigV8Packed_UnpackData(valRef, ptr, sz); - if (!to) return SWIG_ERROR; - if (ty) { -@@ -590,7 +613,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfo SWIGV8_NewPackedObj(void *data, size_t size, swig_type_info *type) { -+v8::Local SWIGV8_NewPackedObj(void *data, size_t size, swig_type_info *type) { - SWIGV8_HANDLESCOPE_ESC(); - - SwigV8PackedData *cdata = new SwigV8PackedData(data, size, type); -@@ -636,8 +659,10 @@ v8::Handle SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf - cdata->handle.MarkIndependent(); - #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100) - cdata->handle.MarkIndependent(v8::Isolate::GetCurrent()); --#else -+#elif (SWIG_V8_VERSION < 0x0706) - cdata->handle.MarkIndependent(); -+// Looks like future versions do not require that anymore: -+// https://monorail-prod.appspot.com/p/chromium/issues/detail?id=923361#c11 - #endif - - SWIGV8_ESCAPE(obj); -@@ -657,7 +682,7 @@ SWIGRUNTIME - #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) - v8::Handle SWIGV8_AppendOutput(v8::Handle result, v8::Handle obj) { - #else --v8::Handle SWIGV8_AppendOutput(v8::Local result, v8::Handle obj) { -+v8::Local SWIGV8_AppendOutput(v8::Local result, v8::Local obj) { - #endif - SWIGV8_HANDLESCOPE_ESC(); - -@@ -669,7 +694,12 @@ v8::Handle SWIGV8_AppendOutput(v8::Local result, v8::Handl - #else - v8::Local arr = v8::Local::Cast(result); - #endif -+ -+#if (SWIG_V8_VERSION < 0x0706) - arr->Set(arr->Length(), obj); -+#else -+ arr->Set(SWIGV8_CURRENT_CONTEXT(), arr->Length(), obj); -+#endif - - SWIGV8_ESCAPE(arr); - } -diff --git a/Lib/javascript/v8/javascriptruntime.swg b/Lib/javascript/v8/javascriptruntime.swg -index c78e04efbb..773014f2a5 100644 ---- a/Lib/javascript/v8/javascriptruntime.swg -+++ b/Lib/javascript/v8/javascriptruntime.swg -@@ -56,6 +56,11 @@ - %insert(runtime) %{ - #include - -+#if defined(V8_MAJOR_VERSION) && defined(V8_MINOR_VERSION) -+#undef SWIG_V8_VERSION -+#define SWIG_V8_VERSION (V8_MAJOR_VERSION * 256 + V8_MINOR_VERSION) -+#endif -+ - #include - #include - #include -diff --git a/Lib/javascript/v8/javascriptstrings.swg b/Lib/javascript/v8/javascriptstrings.swg -index e767a6d662..61a937fa52 100644 ---- a/Lib/javascript/v8/javascriptstrings.swg -+++ b/Lib/javascript/v8/javascriptstrings.swg -@@ -4,10 +4,10 @@ - * ------------------------------------------------------------ */ - %fragment("SWIG_AsCharPtrAndSize", "header", fragment="SWIG_pchar_descriptor") { - SWIGINTERN int --SWIG_AsCharPtrAndSize(v8::Handle valRef, char** cptr, size_t* psize, int *alloc) -+SWIG_AsCharPtrAndSize(v8::Local valRef, char** cptr, size_t* psize, int *alloc) - { - if(valRef->IsString()) { -- v8::Handle js_str = SWIGV8_TO_STRING(valRef); -+ v8::Local js_str = SWIGV8_TO_STRING(valRef); - - size_t len = SWIGV8_UTF8_LENGTH(js_str) + 1; - char* cstr = new char[len]; -@@ -20,7 +20,7 @@ SWIG_AsCharPtrAndSize(v8::Handle valRef, char** cptr, size_t* psize, - return SWIG_OK; - } else { - if(valRef->IsObject()) { -- v8::Handle obj = SWIGV8_TO_OBJECT(valRef); -+ v8::Local obj = SWIGV8_TO_OBJECT(valRef); - // try if the object is a wrapped char[] - swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); - if (pchar_descriptor) { -@@ -41,7 +41,7 @@ SWIG_AsCharPtrAndSize(v8::Handle valRef, char** cptr, size_t* psize, - } - - %fragment("SWIG_FromCharPtrAndSize","header",fragment="SWIG_pchar_descriptor") { --SWIGINTERNINLINE v8::Handle -+SWIGINTERNINLINE v8::Local - SWIG_FromCharPtrAndSize(const char* carray, size_t size) - { - if (carray) { -@@ -49,7 +49,7 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size) - // TODO: handle extra long strings - return SWIGV8_UNDEFINED(); - } else { -- v8::Handle js_str = SWIGV8_STRING_NEW2(carray, size); -+ v8::Local js_str = SWIGV8_STRING_NEW2(carray, size); - return js_str; - } - } else { -diff --git a/Lib/javascript/v8/javascripttypemaps.swg b/Lib/javascript/v8/javascripttypemaps.swg -index 4601698e03..fbe7849cd2 100644 ---- a/Lib/javascript/v8/javascripttypemaps.swg -+++ b/Lib/javascript/v8/javascripttypemaps.swg -@@ -25,7 +25,7 @@ - - /* Javascript types */ - --#define SWIG_Object v8::Handle -+#define SWIG_Object v8::Local - #define VOID_Object SWIGV8_UNDEFINED() - - /* Overload of the output/constant/exception/dirout handling */ -diff --git a/Source/Modules/javascript.cxx b/Source/Modules/javascript.cxx -index d2b33b1b42..450ebbd497 100644 ---- a/Source/Modules/javascript.cxx -+++ b/Source/Modules/javascript.cxx -@@ -548,7 +548,7 @@ void JAVASCRIPT::main(int argc, char *argv[]) { - } - Swig_mark_arg(i); - engine = JSEmitter::JavascriptCore; -- } else if (strcmp(argv[i], "-node") == 0) { -+ } else if ((strcmp(argv[i], "-node") == 0) || (strcmp(argv[i], "-electron") == 0)) { - if (engine != -1) { - Printf(stderr, ERR_MSG_ONLY_ONE_ENGINE_PLEASE); - SWIG_exit(-1); -@@ -594,7 +594,7 @@ void JAVASCRIPT::main(int argc, char *argv[]) { - } - default: - { -- Printf(stderr, "SWIG Javascript: Unknown engine. Please specify one of '-jsc', '-v8' or '-node'.\n"); -+ Printf(stderr, "SWIG Javascript: Unknown engine. Please specify one of '-jsc', '-v8' or '-node/-electron'.\n"); - SWIG_exit(-1); - break; - } -diff --git a/Tools/javascript/v8_shell.cxx b/Tools/javascript/v8_shell.cxx -index 5001bc25a6..8067247a41 100644 ---- a/Tools/javascript/v8_shell.cxx -+++ b/Tools/javascript/v8_shell.cxx -@@ -9,7 +9,7 @@ - - #include "js_shell.h" - --typedef int (*V8ExtensionInitializer) (v8::Handle module); -+typedef int (*V8ExtensionInitializer) (v8::Local module); - - // Note: these typedefs and defines are used to deal with v8 API changes since version 3.19.00 - -@@ -87,7 +87,7 @@ class V8Shell: public JSShell { - - private: - -- v8::Handle Import(const std::string &moduleName); -+ v8::Local Import(const std::string &moduleName); - - SwigV8Context CreateShellContext(); - -@@ -135,7 +135,7 @@ bool V8Shell::RunScript(const std::string &scriptPath) { - - // Store a pointer to this shell for later use - -- v8::Handle global = context->Global(); -+ v8::Local global = context->Global(); - v8::Local __shell__ = SWIGV8_EXTERNAL_NEW((void*) (long) this); - - global->SetHiddenValue(SWIGV8_STRING_NEW("__shell__"), __shell__); -@@ -215,7 +215,7 @@ bool V8Shell::ExecuteScript(const std::string &source, const std::string &name) - SWIGV8_HANDLESCOPE(); - - v8::TryCatch try_catch; -- v8::Handle script = v8::Script::Compile(SWIGV8_STRING_NEW(source.c_str()), SWIGV8_STRING_NEW(name.c_str())); -+ v8::Local script = v8::Script::Compile(SWIGV8_STRING_NEW(source.c_str()), SWIGV8_STRING_NEW(name.c_str())); - - // Stop if script is empty - if (script.IsEmpty()) { -@@ -224,7 +224,7 @@ bool V8Shell::ExecuteScript(const std::string &source, const std::string &name) - return false; - } - -- v8::Handle result = script->Run(); -+ v8::Local result = script->Run(); - - // Print errors that happened during execution. - if (try_catch.HasCaught()) { -@@ -241,7 +241,7 @@ bool V8Shell::DisposeEngine() { - - SwigV8Context V8Shell::CreateShellContext() { - // Create a template for the global object. -- v8::Handle global = v8::ObjectTemplate::New(); -+ v8::Local global = v8::ObjectTemplate::New(); - - // Bind global functions - global->Set(SWIGV8_STRING_NEW("print"), SWIGV8_FUNCTEMPLATE_NEW(V8Shell::Print)); -@@ -258,7 +258,7 @@ SwigV8Context V8Shell::CreateShellContext() { - #endif - } - --v8::Handle V8Shell::Import(const std::string &module_path) -+v8::Local V8Shell::Import(const std::string &module_path) - { - SWIGV8_HANDLESCOPE_ESC(); - -@@ -319,7 +319,7 @@ SwigV8ReturnValue V8Shell::Require(const SwigV8Arguments &args) { - v8::Local __shell__ = v8::Local::Cast(hidden); - V8Shell *_this = (V8Shell *) (long) __shell__->Value(); - -- v8::Handle module = _this->Import(moduleName); -+ v8::Local module = _this->Import(moduleName); - - SWIGV8_RETURN(module); - } -@@ -345,7 +345,7 @@ void V8Shell::ReportException(v8::TryCatch *try_catch) { - - v8::String::Utf8Value exception(try_catch->Exception()); - const char *exception_string = V8Shell::ToCString(exception); -- v8::Handle message = try_catch->Message(); -+ v8::Local message = try_catch->Message(); - if (message.IsEmpty()) { - // V8 didn't provide any extra information about this error; just - // print the exception. -diff --git a/Tools/testflags.py b/Tools/testflags.py -index f3d216b59a..64528d6925 100755 ---- a/Tools/testflags.py -+++ b/Tools/testflags.py -@@ -41,7 +41,10 @@ def get_cxxflags(language, std, compiler): - "go":"-Werror " + cxx_common, - "guile":"-Werror " + cxx_common, - "java":"-Werror " + cxx_common, -- "javascript":"-Werror " + cxx_common + " -Wno-error=unused-function", # Until overload_rename is fixed for node -+ "javascript":"-Werror " + cxx_common + -+ " -Wno-error=unused-function" + # Until overload_rename is fixed for node -+ " -Wno-error=unused-result -Wno-unused-result", # Until proper update of latest NodeJS / V8 -+ # " -Wno-error=cast-function-type" + Only in GCC 8.x+ - "lua":"-Werror " + cxx_common, - "mzscheme":"-Werror " + cxx_common, - "ocaml":"-Werror " + cxx_common, -diff --git a/Tools/travis-linux-install.sh b/Tools/travis-linux-install.sh -index c8347d27a4..04683572af 100755 ---- a/Tools/travis-linux-install.sh -+++ b/Tools/travis-linux-install.sh -@@ -33,7 +33,7 @@ case "$SWIGLANG" in - ;; - "javascript") - case "$ENGINE" in -- "node") -+ "node"|"electron") - travis_retry wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash - export NVM_DIR="$HOME/.nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" -@@ -45,6 +45,11 @@ case "$SWIGLANG" in - else - travis_retry npm install -g node-gyp - fi -+ -+ if [ ! -z "$ELECTRON_VER" ] ; then -+ travis_retry npm install -g electron@$ELECTRON_VER -+ fi -+ - ;; - "jsc") - travis_retry sudo apt-get install -qq libwebkitgtk-dev -