diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2018-05-17 19:57:02 +0100 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2018-05-17 19:57:02 +0100 |
commit | 0cfd53cff784650b1de490209f0b305bd9e7e570 (patch) | |
tree | cff492821ddc739aadb03ebdcd7a851a5f7dd511 /Source | |
parent | b7f78dd5a71306be019fcb5d96742ae996993196 (diff) | |
parent | 3eb41c9beb4b420bc58b9c2b97316f35dc3be7be (diff) | |
download | swig-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.y | 75 | ||||
-rw-r--r-- | Source/DOH/memory.c | 4 | ||||
-rw-r--r-- | Source/DOH/string.c | 40 | ||||
-rw-r--r-- | Source/Modules/csharp.cxx | 23 | ||||
-rw-r--r-- | Source/Modules/d.cxx | 22 | ||||
-rw-r--r-- | Source/Modules/java.cxx | 21 | ||||
-rw-r--r-- | Source/Modules/javascript.cxx | 21 | ||||
-rw-r--r-- | Source/Modules/lang.cxx | 4 | ||||
-rw-r--r-- | Source/Modules/perl5.cxx | 4 | ||||
-rw-r--r-- | Source/Modules/python.cxx | 12 | ||||
-rw-r--r-- | Source/Modules/ruby.cxx | 10 |
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"); } |