aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2018-05-17 19:57:02 +0100
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2018-05-17 19:57:02 +0100
commit0cfd53cff784650b1de490209f0b305bd9e7e570 (patch)
treecff492821ddc739aadb03ebdcd7a851a5f7dd511 /Source
parentb7f78dd5a71306be019fcb5d96742ae996993196 (diff)
parent3eb41c9beb4b420bc58b9c2b97316f35dc3be7be (diff)
downloadswig-0cfd53cff784650b1de490209f0b305bd9e7e570.tar.gz
Merge branch 'master' into vadz-doxygen
* master: Add Octave 4.4 to Travis allow_failures Fixes for appveyor image changes Javascript test-suite Makefile parallel jobs Add changes entry for csconstruct, dconstruct and javaconstruct fix Fix lookup of csconstruct, dconstructor and javaconstruct typemaps Javascript %nspace fix in generated C++ code Add C++17 documentation chapter Add changes notes for C++17 nested namespaces support Test for invalid C++17 nested namespace aliases Test c++17 nested namespaces and %nspace Add c++17 nested namespaces runtime test for C# Add c++17 nested namespaces runtime test for Python Add support for c++17 nested namespaces Update CHANGES.current .travis.yml: test against Octave 4.4 Examples/test-suite/register_par.i: rename 'tree' to 'swig_tree' Examples/octave/module_load/runme.m: update 'exist()' statements for Octave >= 4.4 Examples/octave/module_load/runme.m: do not use duplicate function names Examples/Makefile.in: unset OCTAVE_PATH when running Octave for tests Lib/octave: fix getting/setting global variables for Octave >= 4.4 Lib/octave: use new class for function member dereference with Octave >= 4.4 Lib/octave: fix operator installation for Octave >= 4.4 Lib/Octave: in Octave >= 4.4, assign reference to base class in subclass Lib/octave: fix call to mlock() for Octave >= 4.4 Lib/octave: fix call to octave::call_stack::current() for Octave >= 4.4 Lib/octave: 'octave_exit' not longer exists in Octave >= 4.4 Lib/octave: replace is_bool_type() with islogical() for Octave >= 4.4 Lib/octave: replace is_numeric_type() with isnumeric() for Octave >= 4.4 Lib/octave: replace is_cell() with iscell() for Octave >= 4.4 Lib/octave: call octave::feval() instead of feval() for Octave >= 4.4 Lib/octave: fix function name passed to unwind_protect::begin_frame() C#, D, Java methodmodifiers on destructors Javascript assert.h - move to header section Appveyor cl compiler warning fixes during configure Java vector wrappers cast correction test-suite fixes (Java directors) for compilers that don't support varargs Go - use director.swg like other languages test-suite fixes (2) for compilers that don't support varargs Consistent spacing in generated exception specifications test-suite fixes for compilers that don't support vararg macros Enhance Travis testing to use gcc 8 and test C++17 and C17 Enhance SWIG_isfinite for older standards: C++03/C++98/C89 test-suite support for gcc-8 targeting C++11 and C++14 Scilab portability fixes - remove use of strdup Scilab array overbounds fix handling char type exceptions test-suite fix for c++17 and throw macro Remove use of 'register' in C source test-suite support for C++17: switch testing of the deprecated C++17 'register' keyword from C++ to C Examples update to support C++17: exception specification throw removal Cosmetic syntax tweak using throw in Octave directors test-suite support for C++17 (Java): exception specification throw removal test-suite support for C++17: exception specification throw removal __cplusplus macro usage tweak Improve detection of Python's 2to3 tool Correct C shared library creation when specifing CC to configure Remove superfluous parens in generated Python scripts. [ci] guile 2.2 build no longer expected to fail guile - resstructure some configure tests Disable guile configuration if guile-config and guile report a different version Fix guile executable detection on early 2.0.x guile versions guile - drop GDB_INTERFACE related stuff guile - replace obsolete scm_listify with scm_list_n guile - use more reliable method of finding guile executable based on guile-config Fix go version matching in configure for go1.10 [Python] Suppress new pycodestyle warning Add if-no-present action for jsv8inc arg Fix typo in help --with-jscoreinc and --with-jscorelib Fix off-by-one error * Makefile.in (configfiles): Update URLs for latest configfiles. Add changes entry for Ruby %alias fix for global functions [Ruby] Pass Qnil instead of NULL to rb_funcall() Fix typo Fix ruby %alias directive for native c functions Stop testing Python on Appveyor msys/mingw Fix -Wimplicit-fallthrough gcc-7.3 warning
Diffstat (limited to 'Source')
-rw-r--r--Source/CParse/parser.y75
-rw-r--r--Source/DOH/memory.c4
-rw-r--r--Source/DOH/string.c40
-rw-r--r--Source/Modules/csharp.cxx23
-rw-r--r--Source/Modules/d.cxx22
-rw-r--r--Source/Modules/java.cxx21
-rw-r--r--Source/Modules/javascript.cxx21
-rw-r--r--Source/Modules/lang.cxx4
-rw-r--r--Source/Modules/perl5.cxx4
-rw-r--r--Source/Modules/python.cxx12
-rw-r--r--Source/Modules/ruby.cxx10
11 files changed, 152 insertions, 84 deletions
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
index 3152882f0..46a106c47 100644
--- a/Source/CParse/parser.y
+++ b/Source/CParse/parser.y
@@ -4465,32 +4465,61 @@ cpp_using_decl : USING idcolon SEMI {
cpp_namespace_decl : NAMESPACE idcolon LBRACE {
Hash *h;
- $1 = Swig_symbol_current();
- h = Swig_symbol_clookup($2,0);
- if (h && ($1 == Getattr(h,"sym:symtab")) && (Strcmp(nodeType(h),"namespace") == 0)) {
- if (Getattr(h,"alias")) {
- h = Getattr(h,"namespace");
- Swig_warning(WARN_PARSE_NAMESPACE_ALIAS, cparse_file, cparse_line, "Namespace alias '%s' not allowed here. Assuming '%s'\n",
- $2, Getattr(h,"name"));
- $2 = Getattr(h,"name");
+ Node *parent_ns = 0;
+ List *scopes = Swig_scopename_tolist($2);
+ int ilen = Len(scopes);
+ int i;
+
+/*
+Printf(stdout, "==== Namespace %s creation...\n", $2);
+*/
+ $<node>$ = 0;
+ for (i = 0; i < ilen; i++) {
+ Node *ns = new_node("namespace");
+ Symtab *current_symtab = Swig_symbol_current();
+ String *scopename = Getitem(scopes, i);
+ Setattr(ns, "name", scopename);
+ $<node>$ = ns;
+ if (parent_ns)
+ appendChild(parent_ns, ns);
+ parent_ns = ns;
+ h = Swig_symbol_clookup(scopename, 0);
+ if (h && (current_symtab == Getattr(h, "sym:symtab")) && (Strcmp(nodeType(h), "namespace") == 0)) {
+/*
+Printf(stdout, " Scope %s [found C++17 style]\n", scopename);
+*/
+ if (Getattr(h, "alias")) {
+ h = Getattr(h, "namespace");
+ Swig_warning(WARN_PARSE_NAMESPACE_ALIAS, cparse_file, cparse_line, "Namespace alias '%s' not allowed here. Assuming '%s'\n",
+ scopename, Getattr(h, "name"));
+ scopename = Getattr(h, "name");
+ }
+ Swig_symbol_setscope(Getattr(h, "symtab"));
+ } else {
+/*
+Printf(stdout, " Scope %s [creating single scope C++17 style]\n", scopename);
+*/
+ h = Swig_symbol_newscope();
+ Swig_symbol_setscopename(scopename);
}
- Swig_symbol_setscope(Getattr(h,"symtab"));
- } else {
- Swig_symbol_newscope();
- Swig_symbol_setscopename($2);
+ Delete(Namespaceprefix);
+ Namespaceprefix = Swig_symbol_qualifiedscopename(0);
}
- Delete(Namespaceprefix);
- Namespaceprefix = Swig_symbol_qualifiedscopename(0);
+ Delete(scopes);
} interface RBRACE {
- Node *n = $5;
- set_nodeType(n,"namespace");
- Setattr(n,"name",$2);
- Setattr(n,"symtab", Swig_symbol_popscope());
- Swig_symbol_setscope($1);
- $$ = n;
- Delete(Namespaceprefix);
- Namespaceprefix = Swig_symbol_qualifiedscopename(0);
- add_symbols($$);
+ Node *n = $<node>4;
+ Node *top_ns = 0;
+ do {
+ Setattr(n, "symtab", Swig_symbol_popscope());
+ Delete(Namespaceprefix);
+ Namespaceprefix = Swig_symbol_qualifiedscopename(0);
+ add_symbols(n);
+ top_ns = n;
+ n = parentNode(n);
+ } while(n);
+ appendChild($<node>4, firstChild($5));
+ Delete($5);
+ $$ = top_ns;
}
| NAMESPACE LBRACE {
Hash *h;
diff --git a/Source/DOH/memory.c b/Source/DOH/memory.c
index b916870d7..e0e4c68bd 100644
--- a/Source/DOH/memory.c
+++ b/Source/DOH/memory.c
@@ -81,8 +81,8 @@ static void InitPools() {
* ---------------------------------------------------------------------- */
int DohCheck(const DOH *ptr) {
- register Pool *p = Pools;
- register char *cptr = (char *) ptr;
+ Pool *p = Pools;
+ char *cptr = (char *) ptr;
while (p) {
if ((cptr >= p->pbeg) && (cptr < p->pend)) {
#ifdef DOH_DEBUG_MEMORY_POOLS
diff --git a/Source/DOH/string.c b/Source/DOH/string.c
index 490198dfa..94d2737fa 100644
--- a/Source/DOH/string.c
+++ b/Source/DOH/string.c
@@ -141,15 +141,15 @@ static int String_cmp(DOH *so1, DOH *so2) {
static int String_equal(DOH *so1, DOH *so2) {
String *s1 = (String *) ObjData(so1);
String *s2 = (String *) ObjData(so2);
- register int len = s1->len;
+ int len = s1->len;
if (len != s2->len) {
return 0;
} else {
- register char *c1 = s1->str;
- register char *c2 = s2->str;
+ char *c1 = s1->str;
+ char *c2 = s2->str;
#if 0
- register int mlen = len >> 2;
- register int i = mlen;
+ int mlen = len >> 2;
+ int i = mlen;
for (; i; --i) {
if (*(c1++) != *(c2++))
return 0;
@@ -180,11 +180,11 @@ static int String_hash(DOH *so) {
if (s->hashkey >= 0) {
return s->hashkey;
} else {
- register char *c = s->str;
- register unsigned int len = s->len > 50 ? 50 : s->len;
- register unsigned int h = 0;
- register unsigned int mlen = len >> 2;
- register unsigned int i = mlen;
+ char *c = s->str;
+ unsigned int len = s->len > 50 ? 50 : s->len;
+ unsigned int h = 0;
+ unsigned int mlen = len >> 2;
+ unsigned int i = mlen;
for (; i; --i) {
h = (h << 5) + *(c++);
h = (h << 5) + *(c++);
@@ -463,9 +463,9 @@ static int String_seek(DOH *so, long offset, int whence) {
{
#if 0
- register int sp = s->sp;
- register char *tc = s->str;
- register int len = s->len;
+ int sp = s->sp;
+ char *tc = s->str;
+ int len = s->len;
while (sp != nsp) {
int prev = sp + inc;
if (prev >= 0 && prev <= len && tc[prev] == '\n')
@@ -473,8 +473,8 @@ static int String_seek(DOH *so, long offset, int whence) {
sp += inc;
}
#else
- register int sp = s->sp;
- register char *tc = s->str;
+ int sp = s->sp;
+ char *tc = s->str;
if (inc > 0) {
while (sp != nsp) {
if (tc[++sp] == '\n')
@@ -508,12 +508,12 @@ static long String_tell(DOH *so) {
static int String_putc(DOH *so, int ch) {
String *s = (String *) ObjData(so);
- register int len = s->len;
- register int sp = s->sp;
+ int len = s->len;
+ int sp = s->sp;
s->hashkey = -1;
if (sp >= len) {
- register int maxsize = s->maxsize;
- register char *tc = s->str;
+ int maxsize = s->maxsize;
+ char *tc = s->str;
if (len > (maxsize - 2)) {
maxsize *= 2;
tc = (char *) DohRealloc(tc, maxsize);
@@ -679,7 +679,7 @@ static int replace_simple(String *str, char *token, char *rep, int flags, int co
int noquote = 0;
char *c, *s, *t, *first;
char *q, *q2;
- register char *base;
+ char *base;
int i;
/* Figure out if anything gets replaced */
diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx
index 78d494fb7..ff9c1ae8b 100644
--- a/Source/Modules/csharp.cxx
+++ b/Source/Modules/csharp.cxx
@@ -1910,9 +1910,15 @@ public:
Replaceall(destruct, "$imcall", destructor_call);
else
Replaceall(destruct, "$imcall", "throw new global::System.MethodAccessException(\"C++ destructor does not have public access\")");
- if (*Char(destruct))
- Printv(proxy_class_def, "\n ", destruct_methodmodifiers, " ", derived ? "override" : "virtual", " void ", destruct_methodname, "() ", destruct, "\n",
- NIL);
+ if (*Char(destruct)) {
+ Printv(proxy_class_def, "\n ", NIL);
+ const String *methodmods = Getattr(n, "destructmethodmodifiers");
+ if (methodmods)
+ Printv(proxy_class_def, methodmods, NIL);
+ else
+ Printv(proxy_class_def, destruct_methodmodifiers, " ", derived ? "override" : "virtual", NIL);
+ Printv(proxy_class_def, " void ", destruct_methodname, "() ", destruct, "\n", NIL);
+ }
}
if (*Char(interface_upcasts))
Printv(proxy_class_def, interface_upcasts, NIL);
@@ -2782,7 +2788,8 @@ public:
/* Insert the csconstruct typemap, doing the replacement for $directorconnect, as needed */
Hash *attributes = NewHash();
- String *construct_tm = Copy(typemapLookup(n, "csconstruct", Getattr(n, "name"),
+ String *typemap_lookup_type = Getattr(getCurrentClass(), "classtypeobj");
+ String *construct_tm = Copy(typemapLookup(n, "csconstruct", typemap_lookup_type,
WARN_CSHARP_TYPEMAP_CSCONSTRUCT_UNDEF, attributes));
if (construct_tm) {
if (!feature_director) {
@@ -2860,7 +2867,11 @@ public:
if (proxy_flag) {
Printv(destructor_call, full_imclass_name, ".", Swig_name_destroy(getNSpace(), symname), "(swigCPtr)", NIL);
+ const String *methodmods = Getattr(n, "feature:cs:methodmodifiers");
+ if (methodmods)
+ Setattr(getCurrentClass(), "destructmethodmodifiers", methodmods);
}
+
return SWIG_OK;
}
@@ -4398,8 +4409,8 @@ public:
Printf(f_directors_h, " virtual ~%s() noexcept;\n", dirclassname);
Printf(w->def, "%s::~%s() noexcept {\n", dirclassname, dirclassname);
} else if (Getattr(n, "throw")) {
- Printf(f_directors_h, " virtual ~%s() throw ();\n", dirclassname);
- Printf(w->def, "%s::~%s() throw () {\n", dirclassname, dirclassname);
+ Printf(f_directors_h, " virtual ~%s() throw();\n", dirclassname);
+ Printf(w->def, "%s::~%s() throw() {\n", dirclassname, dirclassname);
} else {
Printf(f_directors_h, " virtual ~%s();\n", dirclassname);
Printf(w->def, "%s::~%s() {\n", dirclassname, dirclassname);
diff --git a/Source/Modules/d.cxx b/Source/Modules/d.cxx
index 451f449a1..d740f0a17 100644
--- a/Source/Modules/d.cxx
+++ b/Source/Modules/d.cxx
@@ -1227,8 +1227,9 @@ public:
// Insert the dconstructor typemap (replacing $directorconnect as needed).
Hash *attributes = NewHash();
+ String *typemap_lookup_type = Getattr(getCurrentClass(), "classtypeobj");
String *construct_tm = Copy(lookupCodeTypemap(n, "dconstructor",
- Getattr(n, "name"), WARN_D_TYPEMAP_DCONSTRUCTOR_UNDEF, attributes));
+ typemap_lookup_type, WARN_D_TYPEMAP_DCONSTRUCTOR_UNDEF, attributes));
if (construct_tm) {
const bool use_director = (parentNode(n) && Swig_directorclass(n));
if (!use_director) {
@@ -1298,7 +1299,12 @@ public:
virtual int destructorHandler(Node *n) {
Language::destructorHandler(n);
String *symname = Getattr(n, "sym:name");
+
Printv(destructor_call, im_dmodule_fq_name, ".", Swig_name_destroy(getNSpace(),symname), "(cast(void*)swigCPtr)", NIL);
+ const String *methodmods = Getattr(n, "feature:d:methodmodifiers");
+ if (methodmods)
+ Setattr(getCurrentClass(), "destructmethodmodifiers", methodmods);
+
return SWIG_OK;
}
@@ -2497,8 +2503,8 @@ public:
Printf(f_directors_h, " virtual ~%s() noexcept;\n", dirclassname);
Printf(w->def, "%s::~%s() noexcept {\n", dirclassname, dirclassname);
} else if (Getattr(n, "throw")) {
- Printf(f_directors_h, " virtual ~%s() throw ();\n", dirclassname);
- Printf(w->def, "%s::~%s() throw () {\n", dirclassname, dirclassname);
+ Printf(f_directors_h, " virtual ~%s() throw();\n", dirclassname);
+ Printf(w->def, "%s::~%s() throw() {\n", dirclassname, dirclassname);
} else {
Printf(f_directors_h, " virtual ~%s();\n", dirclassname);
Printf(w->def, "%s::~%s() {\n", dirclassname, dirclassname);
@@ -3312,9 +3318,13 @@ private:
}
if (*Char(dispose_code)) {
- Printv(body, "\n", dispose_methodmodifiers,
- (derived ? " override" : ""), " void ", dispose_methodname, "() ",
- dispose_code, "\n", NIL);
+ Printv(body, "\n", NIL);
+ const String *methodmods = Getattr(n, "destructmethodmodifiers");
+ if (methodmods)
+ Printv(body, methodmods, NIL);
+ else
+ Printv(body, dispose_methodmodifiers, (derived ? " override" : ""), NIL);
+ Printv(body, " void ", dispose_methodname, "() ", dispose_code, "\n", NIL);
}
}
diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx
index 3b0dedb0d..74649ef1f 100644
--- a/Source/Modules/java.cxx
+++ b/Source/Modules/java.cxx
@@ -2094,8 +2094,15 @@ public:
Replaceall(destruct, "$jnicall", destructor_call);
else
Replaceall(destruct, "$jnicall", "throw new UnsupportedOperationException(\"C++ destructor does not have public access\")");
- if (*Char(destruct))
- Printv(proxy_class_def, "\n ", destruct_methodmodifiers, " void ", destruct_methodname, "()", destructor_throws_clause, " ", destruct, "\n", NIL);
+ if (*Char(destruct)) {
+ Printv(proxy_class_def, "\n ", NIL);
+ const String *methodmods = Getattr(n, "destructmethodmodifiers");
+ if (methodmods)
+ Printv(proxy_class_def, methodmods, NIL);
+ else
+ Printv(proxy_class_def, destruct_methodmodifiers, NIL);
+ Printv(proxy_class_def, " void ", destruct_methodname, "()", destructor_throws_clause, " ", destruct, "\n", NIL);
+ }
}
if (*Char(interface_upcasts))
Printv(proxy_class_def, interface_upcasts, NIL);
@@ -2885,7 +2892,8 @@ public:
/* Insert the javaconstruct typemap, doing the replacement for $directorconnect, as needed */
Hash *attributes = NewHash();
- String *construct_tm = Copy(typemapLookup(n, "javaconstruct", Getattr(n, "name"),
+ String *typemap_lookup_type = Getattr(getCurrentClass(), "classtypeobj");
+ String *construct_tm = Copy(typemapLookup(n, "javaconstruct", typemap_lookup_type,
WARN_JAVA_TYPEMAP_JAVACONSTRUCT_UNDEF, attributes));
if (construct_tm) {
if (!feature_director) {
@@ -2955,6 +2963,9 @@ public:
if (proxy_flag) {
Printv(destructor_call, full_imclass_name, ".", Swig_name_destroy(getNSpace(), symname), "(swigCPtr)", NIL);
generateThrowsClause(n, destructor_throws_clause);
+ const String *methodmods = Getattr(n, "feature:java:methodmodifiers");
+ if (methodmods)
+ Setattr(getCurrentClass(), "destructmethodmodifiers", methodmods);
}
return SWIG_OK;
}
@@ -4793,8 +4804,8 @@ public:
Printf(f_directors_h, " virtual ~%s() noexcept;\n", dirClassName);
Printf(w->def, "%s::~%s() noexcept {\n", dirClassName, dirClassName);
} else if (Getattr(n, "throw")) {
- Printf(f_directors_h, " virtual ~%s() throw ();\n", dirClassName);
- Printf(w->def, "%s::~%s() throw () {\n", dirClassName, dirClassName);
+ Printf(f_directors_h, " virtual ~%s() throw();\n", dirClassName);
+ Printf(w->def, "%s::~%s() throw() {\n", dirClassName, dirClassName);
} else {
Printf(f_directors_h, " virtual ~%s();\n", dirClassName);
Printf(w->def, "%s::~%s() {\n", dirClassName, dirClassName);
diff --git a/Source/Modules/javascript.cxx b/Source/Modules/javascript.cxx
index 490ee7fd3..df51e3224 100644
--- a/Source/Modules/javascript.cxx
+++ b/Source/Modules/javascript.cxx
@@ -33,6 +33,7 @@ static bool js_template_enable_debug = false;
#define GETTER "getter"
#define SETTER "setter"
#define PARENT "parent"
+#define PARENT_MANGLED "parent_mangled"
#define CTOR "ctor"
#define CTOR_WRAPPERS "ctor_wrappers"
#define CTOR_DISPATCHERS "ctor_dispatchers"
@@ -262,7 +263,7 @@ protected:
virtual int createNamespace(String *scope);
- virtual Hash *createNamespaceEntry(const char *name, const char *parent);
+ virtual Hash *createNamespaceEntry(const char *name, const char *parent, const char *parent_mangled);
virtual int emitNamespaces() = 0;
@@ -664,7 +665,7 @@ int JSEmitter::initialize(Node * /*n */ ) {
Delete(namespaces);
}
namespaces = NewHash();
- Hash *global_namespace = createNamespaceEntry("exports", 0);
+ Hash *global_namespace = createNamespaceEntry("exports", 0, 0);
Setattr(namespaces, "::", global_namespace);
current_namespace = global_namespace;
@@ -1428,19 +1429,20 @@ int JSEmitter::createNamespace(String *scope) {
}
assert(parent_namespace != 0);
- Hash *new_namespace = createNamespaceEntry(Char(scope), Char(Getattr(parent_namespace, "name")));
+ Hash *new_namespace = createNamespaceEntry(Char(scope), Char(Getattr(parent_namespace, "name")), Char(Getattr(parent_namespace, "name_mangled")));
Setattr(namespaces, scope, new_namespace);
Delete(parent_scope);
return SWIG_OK;
}
-Hash *JSEmitter::createNamespaceEntry(const char *_name, const char *parent) {
+Hash *JSEmitter::createNamespaceEntry(const char *_name, const char *parent, const char *parent_mangled) {
Hash *entry = NewHash();
String *name = NewString(_name);
Setattr(entry, NAME, Swig_scopename_last(name));
Setattr(entry, NAME_MANGLED, Swig_name_mangle(name));
Setattr(entry, PARENT, NewString(parent));
+ Setattr(entry, PARENT_MANGLED, NewString(parent_mangled));
Delete(name);
return entry;
@@ -1467,7 +1469,7 @@ protected:
virtual int enterClass(Node *n);
virtual int exitClass(Node *n);
virtual void marshalInputArgs(Node *n, ParmList *parms, Wrapper *wrapper, MarshallingMode mode, bool is_member, bool is_static);
- virtual Hash *createNamespaceEntry(const char *name, const char *parent);
+ virtual Hash *createNamespaceEntry(const char *name, const char *parent, const char *parent_mangled);
virtual int emitNamespaces();
private:
@@ -1773,8 +1775,8 @@ int JSCEmitter::exitClass(Node *n) {
return SWIG_OK;
}
-Hash *JSCEmitter::createNamespaceEntry(const char *name, const char *parent) {
- Hash *entry = JSEmitter::createNamespaceEntry(name, parent);
+Hash *JSCEmitter::createNamespaceEntry(const char *name, const char *parent, const char *parent_mangled) {
+ Hash *entry = JSEmitter::createNamespaceEntry(name, parent, parent_mangled);
Setattr(entry, "functions", NewString(""));
Setattr(entry, "values", NewString(""));
return entry;
@@ -1786,8 +1788,7 @@ int JSCEmitter::emitNamespaces() {
Hash *entry = it.item;
String *name = Getattr(entry, NAME);
String *name_mangled = Getattr(entry, NAME_MANGLED);
- String *parent = Getattr(entry, PARENT);
- String *parent_mangled = Swig_name_mangle(parent);
+ String *parent_mangled = Getattr(entry, PARENT_MANGLED);
String *functions = Getattr(entry, "functions");
String *variables = Getattr(entry, "values");
@@ -2206,7 +2207,7 @@ int V8Emitter::emitNamespaces() {
String *name = Getattr(entry, NAME);
String *name_mangled = Getattr(entry, NAME_MANGLED);
String *parent = Getattr(entry, PARENT);
- String *parent_mangled = Swig_name_mangle(parent);
+ String *parent_mangled = Getattr(entry, PARENT_MANGLED);
bool do_create = true;
bool do_register = true;
diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx
index 384a057e3..8663df6b3 100644
--- a/Source/Modules/lang.cxx
+++ b/Source/Modules/lang.cxx
@@ -2154,8 +2154,8 @@ int Language::classDirectorDestructor(Node *n) {
File *f_directors = Swig_filebyname("director");
File *f_directors_h = Swig_filebyname("director_h");
if (Getattr(n, "throw")) {
- Printf(f_directors_h, " virtual ~%s() throw ();\n", DirectorClassName);
- Printf(f_directors, "%s::~%s() throw () {\n}\n\n", DirectorClassName, DirectorClassName);
+ Printf(f_directors_h, " virtual ~%s() throw();\n", DirectorClassName);
+ Printf(f_directors, "%s::~%s() throw() {\n}\n\n", DirectorClassName, DirectorClassName);
} else {
Printf(f_directors_h, " virtual ~%s();\n", DirectorClassName);
Printf(f_directors, "%s::~%s() {\n}\n\n", DirectorClassName, DirectorClassName);
diff --git a/Source/Modules/perl5.cxx b/Source/Modules/perl5.cxx
index be586b4db..81fb32121 100644
--- a/Source/Modules/perl5.cxx
+++ b/Source/Modules/perl5.cxx
@@ -2512,8 +2512,8 @@ public:
Printf(f_directors_h, " virtual ~%s() noexcept;\n", DirectorClassName);
Printf(f_directors, "%s::~%s() noexcept {%s}\n\n", DirectorClassName, DirectorClassName, body);
} else if (Getattr(n, "throw")) {
- Printf(f_directors_h, " virtual ~%s() throw ();\n", DirectorClassName);
- Printf(f_directors, "%s::~%s() throw () {%s}\n\n", DirectorClassName, DirectorClassName, body);
+ Printf(f_directors_h, " virtual ~%s() throw();\n", DirectorClassName);
+ Printf(f_directors, "%s::~%s() throw() {%s}\n\n", DirectorClassName, DirectorClassName, body);
} else {
Printf(f_directors_h, " virtual ~%s();\n", DirectorClassName);
Printf(f_directors, "%s::~%s() {%s}\n\n", DirectorClassName, DirectorClassName, body);
diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx
index 0187d9675..4fe1dd516 100644
--- a/Source/Modules/python.cxx
+++ b/Source/Modules/python.cxx
@@ -953,16 +953,16 @@ public:
// Python-2.2 object hack
Printv(f_shadow,
"\n", "def _swig_setattr_nondynamic(self, class_type, name, value, static=1):\n",
- tab4, "if (name == \"thisown\"):\n", tab8, "return self.this.own(value)\n",
- tab4, "if (name == \"this\"):\n", tab8, "if type(value).__name__ == 'SwigPyObject':\n", tab4, tab8, "self.__dict__[name] = value\n",
+ tab4, "if name == \"thisown\":\n", tab8, "return self.this.own(value)\n",
+ tab4, "if name == \"this\":\n", tab8, "if type(value).__name__ == 'SwigPyObject':\n", tab4, tab8, "self.__dict__[name] = value\n",
#ifdef USE_THISOWN
tab4, tab8, "if hasattr(value,\"thisown\"):\n", tab8, tab8, "self.__dict__[\"thisown\"] = value.thisown\n", tab4, tab8, "del value.thisown\n",
#endif
tab4, tab8, "return\n", tab4, "method = class_type.__swig_setmethods__.get(name, None)\n", tab4, "if method:\n", tab4, tab4, "return method(self, value)\n",
#ifdef USE_THISOWN
- tab4, "if (not static) or (name == \"thisown\"):\n",
+ tab4, "if not static or name == \"thisown\":\n",
#else
- tab4, "if (not static):\n",
+ tab4, "if not static:\n",
#endif
NIL);
if (!classic) {
@@ -981,7 +981,7 @@ public:
Printv(f_shadow,
"\n", "def _swig_getattr(self, class_type, name):\n",
- tab4, "if (name == \"thisown\"):\n", tab8, "return self.this.own()\n",
+ tab4, "if name == \"thisown\":\n", tab8, "return self.this.own()\n",
tab4, "method = class_type.__swig_getmethods__.get(name, None)\n",
tab4, "if method:\n", tab8, "return method(self)\n",
tab4, "raise AttributeError(\"'%s' object has no attribute '%s'\" % (class_type.__name__, name))\n\n", NIL);
@@ -1004,7 +1004,7 @@ public:
#ifdef USE_THISOWN
tab4, tab4, "if hasattr(self, name) or (name in (\"this\", \"thisown\")):\n",
#else
- tab4, tab4, "if (name == \"thisown\"):\n", tab8, tab4, "return self.this.own(value)\n", tab4, tab4, "if hasattr(self, name) or (name == \"this\"):\n",
+ tab4, tab4, "if name == \"thisown\":\n", tab8, tab4, "return self.this.own(value)\n", tab4, tab4, "if hasattr(self, name) or (name == \"this\"):\n",
#endif
tab4, tab4, tab4, "set(self, name, value)\n",
tab4, tab4, "else:\n",
diff --git a/Source/Modules/ruby.cxx b/Source/Modules/ruby.cxx
index 69a849d16..a2ede5ff6 100644
--- a/Source/Modules/ruby.cxx
+++ b/Source/Modules/ruby.cxx
@@ -1316,7 +1316,13 @@ public:
Iterator alias = First(aliases);
while (alias.item) {
if (Len(alias.item) > 0) {
- if (multipleInheritance) {
+ if (current == NO_CPP) {
+ if (useGlobalModule) {
+ Printv(f_init, tab4, "rb_define_alias(rb_cObject, \"", alias.item, "\", \"", iname, "\");\n", NIL);
+ } else {
+ Printv(f_init, tab4, "rb_define_alias(rb_singleton_class(", modvar, "), \"", alias.item, "\", \"", iname, "\");\n", NIL);
+ }
+ } else if (multipleInheritance) {
Printv(klass->init, tab4, "rb_define_alias(", klass->mImpl, ", \"", alias.item, "\", \"", iname, "\");\n", NIL);
} else {
Printv(klass->init, tab4, "rb_define_alias(", klass->vname, ", \"", alias.item, "\", \"", iname, "\");\n", NIL);
@@ -3046,7 +3052,7 @@ public:
if (argc > 0) {
Printf(w->code, "%s = rb_funcall(swig_get_self(), rb_intern(\"%s\"), %d%s);\n", Swig_cresult_name(), methodName, argc, args);
} else {
- Printf(w->code, "%s = rb_funcall(swig_get_self(), rb_intern(\"%s\"), 0, NULL);\n", Swig_cresult_name(), methodName);
+ Printf(w->code, "%s = rb_funcall(swig_get_self(), rb_intern(\"%s\"), 0, Qnil);\n", Swig_cresult_name(), methodName);
}
if ( initstack ) Printf(w->code, "SWIG_RELEASE_STACK;\n");
}