From: <ian...@us...> - 2012-10-30 23:39:04
|
Revision: 13875 http://swig.svn.sourceforge.net/swig/?rev=13875&view=rev Author: ianlancetaylor Date: 2012-10-30 23:38:57 +0000 (Tue, 30 Oct 2012) Log Message: ----------- Fix Go support for enums to work correctly when Go int type is 64 bits. Modified Paths: -------------- trunk/Lib/go/go.swg trunk/Source/Modules/go.cxx Modified: trunk/Lib/go/go.swg =================================================================== --- trunk/Lib/go/go.swg 2012-10-27 17:38:05 UTC (rev 13874) +++ trunk/Lib/go/go.swg 2012-10-30 23:38:57 UTC (rev 13875) @@ -366,7 +366,7 @@ %{ $1 = ($1_ltype)$input; %} %typemap(out) enum SWIGTYPE -%{ $result = $1; %} +%{ $result = (intgo)$1; %} %typemap(directorin) enum SWIGTYPE %{ $input = ($1_ltype)$1; %} @@ -374,6 +374,18 @@ %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} +%typemap(directorin) enum SWIGTYPE & (intgo e) +%{ + e = (intgo)$1; + $input = &e; +%} + +%typemap(directorout) enum SWIGTYPE & +%{ + $*1_ltype f = ($*1_ltype)*$input; + $result = ($1_ltype)&f; +%} + /* Arbitrary type. This is a type passed by value in the C/C++ code. We convert it to a pointer for the Go code. Note that all basic types are explicitly handled above. */ Modified: trunk/Source/Modules/go.cxx =================================================================== --- trunk/Source/Modules/go.cxx 2012-10-27 17:38:05 UTC (rev 13874) +++ trunk/Source/Modules/go.cxx 2012-10-30 23:38:57 UTC (rev 13875) @@ -4709,6 +4709,11 @@ Delete(q); } } + + if (Language::enumLookup(t) != NULL || Strcmp(t, "enum ") == 0) { + is_int = true; + } + Delete(t); if (is_int8) { ret = NewString("char "); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <va...@us...> - 2012-11-09 17:57:49
|
Revision: 13877 http://swig.svn.sourceforge.net/swig/?rev=13877&view=rev Author: vadz Date: 2012-11-09 17:57:42 +0000 (Fri, 09 Nov 2012) Log Message: ----------- Fix overflow with parameters > LONG_MAX with Python 3. The typemap incorrectly called PyInt_AsLong() if PyInt_Check() passed, but this check is the same as PyLong_Check() for Python 3 and so the correct PyLong_AsUnsignedLong() function was never called. As a consequence, passing any value greater than LONG_MAX (e.g. 0x87654321 on 32 bit architectures) to a function taking unsigned int, unsigned long or size_t parameter failed with an overflow error being generated. Fix this by simply disabling the part of the code dealing with PyInts for Python 3 as there is no distinction between PyInt and PyLong there any more. Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/python/pyprimtypes.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-10-31 03:41:10 UTC (rev 13876) +++ trunk/CHANGES.current 2012-11-09 17:57:42 UTC (rev 13877) @@ -4,6 +4,10 @@ Version 2.0.9 (in progress) =========================== + +2012-11-09: vzeitlin + [Python] Fix overflow when passing values greater than LONG_MAX from Python 3 for parameters with unsigned long C type. + 2012-10-26: wsfulton Fix director typemap searching so that a typemap specified with a name will be correctly matched. Previously the name was ignored during the typemap search. Applies to the following list of typemaps: Modified: trunk/Lib/python/pyprimtypes.swg =================================================================== --- trunk/Lib/python/pyprimtypes.swg 2012-10-31 03:41:10 UTC (rev 13876) +++ trunk/Lib/python/pyprimtypes.swg 2012-11-09 17:57:42 UTC (rev 13877) @@ -109,6 +109,7 @@ SWIGINTERN int SWIG_AsVal_dec(unsigned long)(PyObject *obj, unsigned long *val) { +%#if PY_VERSION_HEX < 0x03000000 if (PyInt_Check(obj)) { long v = PyInt_AsLong(obj); if (v >= 0) { @@ -117,7 +118,9 @@ } else { return SWIG_OverflowError; } - } else if (PyLong_Check(obj)) { + } else +%#endif + if (PyLong_Check(obj)) { unsigned long v = PyLong_AsUnsignedLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-11-13 22:16:34
|
Revision: 13878 http://swig.svn.sourceforge.net/swig/?rev=13878&view=rev Author: wsfulton Date: 2012-11-13 22:16:28 +0000 (Tue, 13 Nov 2012) Log Message: ----------- Fix some subtle named output typemap lookup misses, the fully qualified name was not always being in all cases such as member variables Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/java.cxx trunk/Source/Modules/lang.cxx trunk/Source/Modules/r.cxx trunk/Source/Swig/parms.c trunk/Source/Swig/swigparm.h trunk/Source/Swig/typemap.c Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/CHANGES.current 2012-11-13 22:16:28 UTC (rev 13878) @@ -8,6 +8,27 @@ 2012-11-09: vzeitlin [Python] Fix overflow when passing values greater than LONG_MAX from Python 3 for parameters with unsigned long C type. +2012-11-02: wsfulton + Fix some subtle named output typemap lookup misses, the fully qualified name was not always being + used for variables, for example: + + struct Glob { + int MyVar; + }; + + Previously the search rules (as shown by -debug-tmsearch) for the getter wrapper were: + + example.i:44: Searching for a suitable 'out' typemap for: int MyVar + Looking for: int MyVar + Looking for: int + + Now the scope is named correctly: + + example.i:44: Searching for a suitable 'out' typemap for: int Glob::MyVar + Looking for: int Glob::MyVar + Looking for: int MyVar + Looking for: int + 2012-10-26: wsfulton Fix director typemap searching so that a typemap specified with a name will be correctly matched. Previously the name was ignored during the typemap search. Applies to the following list of typemaps: Modified: trunk/Source/Modules/java.cxx =================================================================== --- trunk/Source/Modules/java.cxx 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/Source/Modules/java.cxx 2012-11-13 22:16:28 UTC (rev 13878) @@ -3514,7 +3514,6 @@ * --------------------------------------------------------------- */ int classDirectorMethod(Node *n, Node *parent, String *super) { - String *empty_str = NewString(""); String *classname = Getattr(parent, "sym:name"); String *c_classname = Getattr(parent, "name"); String *name = Getattr(n, "name"); @@ -3625,8 +3624,7 @@ String *cdesc = NULL; SwigType *covariant = Getattr(n, "covariant"); SwigType *adjustedreturntype = covariant ? covariant : returntype; - Parm *adjustedreturntypeparm = NewParm(adjustedreturntype, name, n); -// Setattr(adjustedreturntypeparm, "sym:symtab", Getattr(n, "sym:symtab")); + Parm *adjustedreturntypeparm = NewParmNode(adjustedreturntype, n); if ((tm = Swig_typemap_lookup("directorin", adjustedreturntypeparm, "", 0)) && (cdesc = Getattr(adjustedreturntypeparm, "tmap:directorin:descriptor"))) { @@ -3646,7 +3644,7 @@ /* Get the JNI field descriptor for this return type, add the JNI field descriptor to jniret_desc */ if ((c_ret_type = Swig_typemap_lookup("jni", n, "", 0))) { - Parm *tp = NewParm(c_ret_type, name, n); + Parm *tp = NewParmNode(c_ret_type, n); if (!is_void && !ignored_method) { String *jretval_decl = NewStringf("%s jresult", c_ret_type); @@ -3737,7 +3735,7 @@ } /* Start the Java field descriptor for the intermediate class's upcall (insert self object) */ - Parm *tp = NewParm(c_classname, empty_str, n); + Parm *tp = NewParmNode(c_classname, n); String *jdesc; if ((tm = Swig_typemap_lookup("directorin", tp, "", 0)) @@ -3779,7 +3777,7 @@ /* Get parameter's intermediary C type */ if ((c_param_type = Getattr(p, "tmap:jni"))) { - Parm *tp = NewParm(c_param_type, empty_str, n); + Parm *tp = NewParm(c_param_type, Getattr(p, "name"), n); String *desc_tm = NULL, *jdesc = NULL, *cdesc = NULL; /* Add to local variables */ Modified: trunk/Source/Modules/lang.cxx =================================================================== --- trunk/Source/Modules/lang.cxx 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/Source/Modules/lang.cxx 2012-11-13 22:16:28 UTC (rev 13878) @@ -1419,7 +1419,12 @@ target = NewStringf("%s->%s", pname, name); Delete(pname); } - tm = Swig_typemap_lookup("memberin", n, target, 0); + + // This is an input type typemap lookup and so it should not use Node n + // otherwise qualification is done on the parameter name for the setter function + Parm *nin = NewParm(type, name, n); + tm = Swig_typemap_lookup("memberin", nin, target, 0); + Delete(nin); } int flags = Extend | SmartPointer | use_naturalvar_mode(n); if (isNonVirtualProtectedAccess(n)) Modified: trunk/Source/Modules/r.cxx =================================================================== --- trunk/Source/Modules/r.cxx 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/Source/Modules/r.cxx 2012-11-13 22:16:28 UTC (rev 13878) @@ -682,7 +682,7 @@ XXX Have to be a little more clever so that we can deal with struct A * - the * is getting lost. Is this still true? If so, will a SwigType_push() solve things? */ - Parm *bbase = NewParm(rettype, Swig_cresult_name(), n); + Parm *bbase = NewParmNode(rettype, n); String *returnTM = Swig_typemap_lookup("in", bbase, Swig_cresult_name(), f); if(returnTM) { String *tm = returnTM; Modified: trunk/Source/Swig/parms.c =================================================================== --- trunk/Source/Swig/parms.c 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/Source/Swig/parms.c 2012-11-13 22:16:28 UTC (rev 13878) @@ -19,13 +19,13 @@ * NewParm() * * Create a new parameter from datatype 'type' and name 'name' copying - * the file and line number from the Node file_line_node. + * the file and line number from the Node from_node. * ------------------------------------------------------------------------ */ -Parm *NewParm(SwigType *type, const_String_or_char_ptr name, Node *file_line_node) { +Parm *NewParm(SwigType *type, const_String_or_char_ptr name, Node *from_node) { Parm *p = NewParmWithoutFileLineInfo(type, name); - Setfile(p, Getfile(file_line_node)); - Setline(p, Getline(file_line_node)); + Setfile(p, Getfile(from_node)); + Setline(p, Getline(from_node)); return p; } @@ -49,6 +49,20 @@ } /* ------------------------------------------------------------------------ + * NewParmNode() + * + * Create a new parameter from datatype 'type' and name and symbol table as + * well as file and line number from the 'from_node'. + * The resulting Parm will be similar to a Node used for typemap lookups. + * ------------------------------------------------------------------------ */ + +Parm *NewParmNode(SwigType *type, Node *from_node) { + Parm *p = NewParm(type, Getattr(from_node, "name"), from_node); + Setattr(p, "sym:symtab", Getattr(from_node, "sym:symtab")); + return p; +} + +/* ------------------------------------------------------------------------ * CopyParm() * ------------------------------------------------------------------------ */ Modified: trunk/Source/Swig/swigparm.h =================================================================== --- trunk/Source/Swig/swigparm.h 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/Source/Swig/swigparm.h 2012-11-13 22:16:28 UTC (rev 13878) @@ -13,8 +13,9 @@ * ----------------------------------------------------------------------------- */ /* Individual parameters */ -extern Parm *NewParm(SwigType *type, const_String_or_char_ptr name, Node *file_line_node); +extern Parm *NewParm(SwigType *type, const_String_or_char_ptr name, Node *from_node); extern Parm *NewParmWithoutFileLineInfo(SwigType *type, const_String_or_char_ptr name); +extern Parm *NewParmNode(SwigType *type, Node *from_node); extern Parm *CopyParm(Parm *p); /* Parameter lists */ Modified: trunk/Source/Swig/typemap.c =================================================================== --- trunk/Source/Swig/typemap.c 2012-11-09 17:57:42 UTC (rev 13877) +++ trunk/Source/Swig/typemap.c 2012-11-13 22:16:28 UTC (rev 13878) @@ -1339,7 +1339,17 @@ pname = Getattr(node, "name"); +/* + if (pname && node && Getattr(node, "sym:symtab")) { + if (!checkAttribute(node, "kind", "function")) { + Printf(stdout, "New check: %s %s %s\n", Getattr(node, "name"), nodeType(node), Getattr(node, "kind")); + } + } +*/ + if (pname && node && Getattr(node, "sym:symtab")) { + /* if (pname && node && checkAttribute(node, "kind", "function")) { + */ /* For functions, add on a qualified name search, for example struct Foo { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-11-13 22:19:54
|
Revision: 13882 http://swig.svn.sourceforge.net/swig/?rev=13882&view=rev Author: wsfulton Date: 2012-11-13 22:19:47 +0000 (Tue, 13 Nov 2012) Log Message: ----------- Fix incorrect implicit constructor and destructor names in the symbol tables. Fix some feature matching issues for implicit destructors and implicit constructors and impliciti copy constructors added with %copyctor. Also improves consistency in named typemap lookup rules. Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/lang.cxx trunk/Source/Swig/symbol.c trunk/Source/Swig/typemap.c Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-11-13 22:18:52 UTC (rev 13881) +++ trunk/CHANGES.current 2012-11-13 22:19:47 UTC (rev 13882) @@ -8,6 +8,30 @@ 2012-11-09: vzeitlin [Python] Fix overflow when passing values greater than LONG_MAX from Python 3 for parameters with unsigned long C type. +2012-11-09: wsfulton + Fix some feature matching issues for implicit destructors and implicit constructors and implicit + copy constructors added with %copyctor. Previously a feature for these had to be fully qualified + in order to match. Now the following will also match: + + %feature("xyz") ~XXX(); + struct XXX {}; + +2012-11-09: wsfulton + Further consistency in named output typemap lookups for implicit constructors and destructors and + implicit copy constructors added with %copyctor. Previously only the fully qualified name was being + used, now the unqualified name will also be used. For example, previously: + + example.i:38: Searching for a suitable 'out' typemap for: void Space::More::~More + Looking for: void Space::More::~More + Looking for: void + + Now the unqualified name is also used: + + example.i:38: Searching for a suitable 'out' typemap for: void Space::More::~More + Looking for: void Space::More::~More + Looking for: void ~More + Looking for: void + 2012-11-02: wsfulton Fix some subtle named output typemap lookup misses, the fully qualified name was not always being used for variables, for example: Modified: trunk/Source/Modules/lang.cxx =================================================================== --- trunk/Source/Modules/lang.cxx 2012-11-13 22:18:52 UTC (rev 13881) +++ trunk/Source/Modules/lang.cxx 2012-11-13 22:19:47 UTC (rev 13882) @@ -2170,8 +2170,7 @@ String *cname = Getattr(n, "name"); SwigType *type = Copy(cname); - String *last = Swig_scopename_last(cname); - String *name = NewStringf("%s::%s", cname, last); + String *name = Swig_scopename_last(cname); String *cc = NewStringf("r.q(const).%s", type); String *decl = NewStringf("f(%s).", cc); String *csymname = Getattr(n, "sym:name"); @@ -2196,7 +2195,7 @@ } } - String *symname = Swig_name_make(cn, cname, last, decl, oldname); + String *symname = Swig_name_make(cn, cname, name, decl, oldname); if (Strcmp(symname, "$ignore") != 0) { if (!symname) { symname = Copy(csymname); @@ -2213,8 +2212,8 @@ Symtab *oldscope = Swig_symbol_setscope(Getattr(n, "symtab")); Node *on = Swig_symbol_add(symname, cn); + Swig_features_get(Swig_cparse_features(), Swig_symbol_qualifiedscopename(0), name, decl, cn); Swig_symbol_setscope(oldscope); - Swig_features_get(Swig_cparse_features(), 0, name, decl, cn); if (on == cn) { Node *access = NewHash(); @@ -2229,7 +2228,6 @@ } } Delete(cn); - Delete(last); Delete(name); Delete(decl); Delete(symname); @@ -2243,12 +2241,11 @@ Setline(cn, Getline(n)); String *cname = Getattr(n, "name"); - String *last = Swig_scopename_last(cname); - String *name = NewStringf("%s::%s", cname, last); + String *name = Swig_scopename_last(cname); String *decl = NewString("f()."); String *csymname = Getattr(n, "sym:name"); String *oldname = csymname; - String *symname = Swig_name_make(cn, cname, last, decl, oldname); + String *symname = Swig_name_make(cn, cname, name, decl, oldname); if (Strcmp(symname, "$ignore") != 0) { if (!symname) { symname = Copy(csymname); @@ -2260,11 +2257,10 @@ Setattr(cn, "decl", decl); Setattr(cn, "parentNode", n); Setattr(cn, "default_constructor", "1"); - Symtab *oldscope = Swig_symbol_setscope(Getattr(n, "symtab")); Node *on = Swig_symbol_add(symname, cn); + Swig_features_get(Swig_cparse_features(), Swig_symbol_qualifiedscopename(0), name, decl, cn); Swig_symbol_setscope(oldscope); - Swig_features_get(Swig_cparse_features(), 0, name, decl, cn); if (on == cn) { Node *access = NewHash(); @@ -2278,7 +2274,6 @@ } } Delete(cn); - Delete(last); Delete(name); Delete(decl); Delete(symname); @@ -2292,11 +2287,10 @@ Setline(cn, Getline(n)); String *cname = Getattr(n, "name"); - String *last = Swig_scopename_last(cname); - Insert(last, 0, "~"); - String *name = NewStringf("%s::%s", cname, last); + String *name = Swig_scopename_last(cname); + Insert(name, 0, "~"); String *decl = NewString("f()."); - String *symname = Swig_name_make(cn, cname, last, decl, 0); + String *symname = Swig_name_make(cn, cname, name, decl, 0); if (Strcmp(symname, "$ignore") != 0) { String *possible_nonstandard_symname = NewStringf("~%s", Getattr(n, "sym:name")); @@ -2308,8 +2302,8 @@ Symtab *oldscope = Swig_symbol_setscope(Getattr(n, "symtab")); Node *nonstandard_destructor = Equal(possible_nonstandard_symname, symname) ? 0 : Swig_symbol_clookup(possible_nonstandard_symname, 0); Node *on = Swig_symbol_add(symname, cn); + Swig_features_get(Swig_cparse_features(), Swig_symbol_qualifiedscopename(0), name, decl, cn); Swig_symbol_setscope(oldscope); - Swig_features_get(Swig_cparse_features(), 0, name, decl, cn); if (on == cn) { // SWIG accepts a non-standard named destructor in %extend that uses a typedef for the destructor name @@ -2329,7 +2323,6 @@ Delete(possible_nonstandard_symname); } Delete(cn); - Delete(last); Delete(name); Delete(decl); Delete(symname); Modified: trunk/Source/Swig/symbol.c =================================================================== --- trunk/Source/Swig/symbol.c 2012-11-13 22:18:52 UTC (rev 13881) +++ trunk/Source/Swig/symbol.c 2012-11-13 22:19:47 UTC (rev 13882) @@ -1549,6 +1549,7 @@ * Swig_symbol_type_qualify() * * Create a fully qualified type name + * Note: Does not resolve a constructor if passed in as the 'type'. * ----------------------------------------------------------------------------- */ SwigType *Swig_symbol_type_qualify(const SwigType *t, Symtab *st) { Modified: trunk/Source/Swig/typemap.c =================================================================== --- trunk/Source/Swig/typemap.c 2012-11-13 22:18:52 UTC (rev 13881) +++ trunk/Source/Swig/typemap.c 2012-11-13 22:19:47 UTC (rev 13882) @@ -1306,6 +1306,7 @@ SwigType *mtype = 0; String *pname; String *qpname = 0; + String *noscope_pname = 0; Hash *tm = 0; String *s = 0; String *sdef = 0; @@ -1338,20 +1339,32 @@ } pname = Getattr(node, "name"); + noscope_pname = Copy(pname); if (pname && node && Getattr(node, "sym:symtab")) { - /* Add on a qualified name search for any symbol, for example: + /* Add on a qualified name search for any symbol in the symbol table, for example: * struct Foo { * int *foo(int bar) -> Foo::foo * }; + * Note that if node is a parameter (Parm *) then there will be no symbol table attached to the Parm *. */ - Symtab *st = Getattr(node, "sym:symtab"); - String *qsn = st ? Swig_symbol_string_qualify(pname, st) : 0; - if (qsn && Len(qsn) && !Equal(qsn, pname)) - qpname = qsn; + String *qsn; + if (Swig_scopename_check(pname)) { + /* sometimes pname is qualified, so we remove all the scope for the lookup */ + Delete(noscope_pname); + noscope_pname = Swig_scopename_last(pname); + /* + Printf(stdout, "Removed scope: %s => %s\n", pname, noscope_pname); + */ + } + qsn = Swig_symbol_qualified(node); + if (qsn && Len(qsn)) { + qpname = NewStringf("%s::%s", qsn, noscope_pname); + Delete(qsn); + } } - tm = typemap_search(tmap_method, type, pname, qpname, &mtype, node); + tm = typemap_search(tmap_method, type, noscope_pname, qpname, &mtype, node); if (typemap_search_debug) debug_search_result_display(tm); if (typemaps_used_debug && tm) { @@ -1364,6 +1377,8 @@ Delete(qpname); qpname = 0; + Delete(noscope_pname); + noscope_pname = 0; if (!tm) return sdef; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-11-14 22:17:58
|
Revision: 13888 http://swig.svn.sourceforge.net/swig/?rev=13888&view=rev Author: wsfulton Date: 2012-11-14 22:17:52 +0000 (Wed, 14 Nov 2012) Log Message: ----------- ccache-swig: apply patch #3586392 from Frederik Deweerdt to fix some error cases - incorrectly using memory after it has been deleted Modified Paths: -------------- trunk/CCache/ccache.c trunk/CHANGES.current Modified: trunk/CCache/ccache.c =================================================================== --- trunk/CCache/ccache.c 2012-11-14 22:17:28 UTC (rev 13887) +++ trunk/CCache/ccache.c 2012-11-14 22:17:52 UTC (rev 13888) @@ -712,12 +712,13 @@ passfail = retrieve_from_cache(hashname, output_file, hardlink); } - free(stderr_file); if (passfail == -1) { close(fd_stderr); unlink(stderr_file); + free(stderr_file); return; } + free(stderr_file); } /* get rid of the intermediate preprocessor file */ Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-11-14 22:17:28 UTC (rev 13887) +++ trunk/CHANGES.current 2012-11-14 22:17:52 UTC (rev 13888) @@ -5,6 +5,9 @@ Version 2.0.9 (in progress) =========================== +2012-11-14: [ccache-swig] Apply patch #3586392 from Frederik Deweerdt to fix some error cases - incorrectly using + memory after it has been deleted. + 2012-11-09: vzeitlin [Python] Fix overflow when passing values greater than LONG_MAX from Python 3 for parameters with unsigned long C type. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-11-18 00:45:25
|
Revision: 13904 http://swig.svn.sourceforge.net/swig/?rev=13904&view=rev Author: wsfulton Date: 2012-11-18 00:45:18 +0000 (Sun, 18 Nov 2012) Log Message: ----------- Fix segfaults when using filename paths greater than 1024 characters in length - use String * and heap instead of fixed size static char array buffers. Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/csharp.cxx trunk/Source/Modules/d.cxx trunk/Source/Modules/go.cxx trunk/Source/Modules/java.cxx trunk/Source/Modules/main.cxx trunk/Source/Modules/php.cxx trunk/Source/Modules/python.cxx trunk/Source/Modules/ruby.cxx trunk/Source/Preprocessor/cpp.c trunk/Source/Swig/include.c trunk/Source/Swig/swigfile.h Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/CHANGES.current 2012-11-18 00:45:18 UTC (rev 13904) @@ -5,7 +5,11 @@ Version 2.0.9 (in progress) =========================== -2012-11-14: [ccache-swig] Apply patch #3586392 from Frederik Deweerdt to fix some error cases - incorrectly using +2012-11-17: wsfulton + Fix segfaults when using filename paths greater than 1024 characters in length. + +2012-11-14: wsfulton + [ccache-swig] Apply patch #3586392 from Frederik Deweerdt to fix some error cases - incorrectly using memory after it has been deleted. 2012-11-09: vzeitlin Modified: trunk/Source/Modules/csharp.cxx =================================================================== --- trunk/Source/Modules/csharp.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/csharp.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -405,8 +405,11 @@ Printf(f_directors, "/* ---------------------------------------------------\n"); Printf(f_directors, " * C++ director class methods\n"); Printf(f_directors, " * --------------------------------------------------- */\n\n"); - if (outfile_h) - Printf(f_directors, "#include \"%s\"\n\n", Swig_file_filename(outfile_h)); + if (outfile_h) { + String *filename = Swig_file_filename(outfile_h); + Printf(f_directors, "#include \"%s\"\n\n", filename); + Delete(filename); + } } Printf(f_runtime, "\n"); Modified: trunk/Source/Modules/d.cxx =================================================================== --- trunk/Source/Modules/d.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/d.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -490,8 +490,11 @@ Printf(f_directors, "/* ---------------------------------------------------\n"); Printf(f_directors, " * C++ director class methods\n"); Printf(f_directors, " * --------------------------------------------------- */\n\n"); - if (outfile_h) - Printf(f_directors, "#include \"%s\"\n\n", Swig_file_filename(outfile_h)); + if (outfile_h) { + String *filename = Swig_file_filename(outfile_h); + Printf(f_directors, "#include \"%s\"\n\n", filename); + Delete(filename); + } } Printf(f_runtime, "\n"); Modified: trunk/Source/Modules/go.cxx =================================================================== --- trunk/Source/Modules/go.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/go.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -371,7 +371,9 @@ Printf(f_c_directors_h, "#define SWIG_%s_WRAP_H_\n\n", module); Printf(f_c_directors, "\n// C++ director class methods.\n"); - Printf(f_c_directors, "#include \"%s\"\n\n", Swig_file_filename(c_filename_h)); + String *filename = Swig_file_filename(c_filename_h); + Printf(f_c_directors, "#include \"%s\"\n\n", filename); + Delete(filename); } Swig_banner(f_go_begin); Modified: trunk/Source/Modules/java.cxx =================================================================== --- trunk/Source/Modules/java.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/java.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -417,8 +417,11 @@ Printf(f_directors, "/* ---------------------------------------------------\n"); Printf(f_directors, " * C++ director class methods\n"); Printf(f_directors, " * --------------------------------------------------- */\n\n"); - if (outfile_h) - Printf(f_directors, "#include \"%s\"\n\n", Swig_file_filename(outfile_h)); + if (outfile_h) { + String *filename = Swig_file_filename(outfile_h); + Printf(f_directors, "#include \"%s\"\n\n", filename); + Delete(filename); + } } Printf(f_runtime, "\n"); Modified: trunk/Source/Modules/main.cxx =================================================================== --- trunk/Source/Modules/main.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/main.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -199,22 +199,24 @@ static List *all_output_files = 0; /* ----------------------------------------------------------------------------- - * check_suffix() + * check_extension() * - * Checks the suffix of a file to see if we should emit extern declarations. + * Checks the extension of a file to see if we should emit extern declarations. * ----------------------------------------------------------------------------- */ -static int check_suffix(String *filename) { +static bool check_extension(String *filename) { + bool wanted = false; const char *name = Char(filename); - const char *c; if (!name) return 0; - c = Swig_file_suffix(name); + String *extension = Swig_file_extension(name); + const char *c = Char(extension); if ((strcmp(c, ".c") == 0) || (strcmp(c, ".C") == 0) || (strcmp(c, ".cc") == 0) || (strcmp(c, ".cxx") == 0) || (strcmp(c, ".c++") == 0) || (strcmp(c, ".cpp") == 0)) { - return 1; + wanted = true; } - return 0; + Delete(extension); + return wanted; } /* ----------------------------------------------------------------------------- @@ -283,15 +285,16 @@ } /* ----------------------------------------------------------------------------- - * Sets the output directory for language specific (proxy) files if not set and - * corrects the directory name and adds trailing file separator if necessary. + * Sets the output directory for language specific (proxy) files from the + * C wrapper file if not set and corrects the directory name and adds a trailing + * file separator if necessary. * ----------------------------------------------------------------------------- */ -static void configure_outdir(const String *c_wrapper_file_dir) { +static void configure_outdir(const String *c_wrapper_outfile) { // Use the C wrapper file's directory if the output directory has not been set by user if (!outdir || Len(outdir) == 0) - outdir = NewString(c_wrapper_file_dir); + outdir = Swig_file_dirname(c_wrapper_outfile); Swig_filename_correct(outdir); @@ -1068,7 +1071,8 @@ String *outfile; File *f_dependencies_file = 0; - char *basename = Swig_file_basename(outcurrentdir ? Swig_file_filename(input_file): Char(input_file)); + String *inputfile_filename = outcurrentdir ? Swig_file_filename(input_file): Copy(input_file); + String *basename = Swig_file_basename(inputfile_filename); if (!outfile_name) { if (CPlusPlus || lang->cplus_runtime_mode()) { outfile = NewStringf("%s_wrap.%s", basename, cpp_extension); @@ -1113,6 +1117,8 @@ Delete(f_dependencies_file); if (depend_only) SWIG_exit(EXIT_SUCCESS); + Delete(inputfile_filename); + Delete(basename); } else { Printf(stderr, "Cannot generate dependencies with -nopreprocess\n"); // Actually we could but it would be inefficient when just generating dependencies, as it would be done after Swig_cparse @@ -1220,7 +1226,8 @@ Setattr(top, "infile", infile); // Note: if nopreprocess then infile is the original input file, otherwise input_file Setattr(top, "inputfile", input_file); - char *basename = Swig_file_basename(outcurrentdir ? Swig_file_filename(infile): Char(infile)); + String *infile_filename = outcurrentdir ? Swig_file_filename(infile): Copy(infile); + String *basename = Swig_file_basename(infile_filename); if (!outfile_name) { if (CPlusPlus || lang->cplus_runtime_mode()) { Setattr(top, "outfile", NewStringf("%s_wrap.%s", basename, cpp_extension)); @@ -1235,19 +1242,21 @@ } else { Setattr(top, "outfile_h", outfile_name_h); } - configure_outdir(Swig_file_dirname(Getattr(top, "outfile"))); + configure_outdir(Getattr(top, "outfile")); if (Swig_contract_mode_get()) { Swig_contracts(top); } - // Check the suffix for a c/c++ file. If so, we're going to declare everything we see as "extern" - ForceExtern = check_suffix(input_file); + // Check the extension for a c/c++ file. If so, we're going to declare everything we see as "extern" + ForceExtern = check_extension(input_file); lang->top(top); if (browse) { Swig_browser(top, 0); } + Delete(infile_filename); + Delete(basename); } } if (dump_lang_symbols) { Modified: trunk/Source/Modules/php.cxx =================================================================== --- trunk/Source/Modules/php.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/php.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -354,7 +354,9 @@ Printf(f_directors_h, "#ifndef SWIG_%s_WRAP_H_\n", cap_module); Printf(f_directors_h, "#define SWIG_%s_WRAP_H_\n\n", cap_module); - Printf(f_directors, "\n#include \"%s\"\n\n", Swig_file_filename(outfile_h)); + String *filename = Swig_file_filename(outfile_h); + Printf(f_directors, "\n#include \"%s\"\n\n", filename); + Delete(filename); } /* PHP module file */ Modified: trunk/Source/Modules/python.cxx =================================================================== --- trunk/Source/Modules/python.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/python.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -763,8 +763,11 @@ Printf(f_directors, "/* ---------------------------------------------------\n"); Printf(f_directors, " * C++ director class methods\n"); Printf(f_directors, " * --------------------------------------------------- */\n\n"); - if (outfile_h) - Printf(f_directors, "#include \"%s\"\n\n", Swig_file_filename(outfile_h)); + if (outfile_h) { + String *filename = Swig_file_filename(outfile_h); + Printf(f_directors, "#include \"%s\"\n\n", filename); + Delete(filename); + } } /* If shadow classing is enabled, we're going to change the module name to "_module" */ Modified: trunk/Source/Modules/ruby.cxx =================================================================== --- trunk/Source/Modules/ruby.cxx 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Modules/ruby.cxx 2012-11-18 00:45:18 UTC (rev 13904) @@ -1142,8 +1142,11 @@ Printf(f_directors, "/* ---------------------------------------------------\n"); Printf(f_directors, " * C++ director class methods\n"); Printf(f_directors, " * --------------------------------------------------- */\n\n"); - if (outfile_h) - Printf(f_directors, "#include \"%s\"\n\n", Swig_file_filename(outfile_h)); + if (outfile_h) { + String *filename = Swig_file_filename(outfile_h); + Printf(f_directors, "#include \"%s\"\n\n", filename); + Delete(filename); + } Delete(module_macro); } Modified: trunk/Source/Preprocessor/cpp.c =================================================================== --- trunk/Source/Preprocessor/cpp.c 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Preprocessor/cpp.c 2012-11-18 00:45:18 UTC (rev 13904) @@ -1706,7 +1706,7 @@ } else if (Equal(id, kpp_include)) { if (((include_all) || (import_all)) && (allow)) { String *s1, *s2, *fn; - char *dirname; + String *dirname; int sysfile = 0; if (include_all && import_all) { Swig_warning(WARN_PP_INCLUDEALL_IMPORTALL, Getfile(s), Getline(id), "Both includeall and importall are defined: using includeall.\n"); @@ -1725,10 +1725,13 @@ /* See if the filename has a directory component */ dirname = Swig_file_dirname(Swig_last_file()); - if (sysfile || !strlen(dirname)) + if (sysfile || !Len(dirname)) { + Delete(dirname); dirname = 0; + } if (dirname) { - dirname[strlen(dirname) - 1] = 0; /* Kill trailing directory delimiter */ + int len = Len(dirname); + Delslice(dirname, len - 1, len); /* Kill trailing directory delimiter */ Swig_push_directory(dirname); } s2 = Preprocessor_parse(s1); @@ -1741,6 +1744,7 @@ pop_imported(); } Delete(s2); + Delete(dirname); Delete(s1); } Delete(fn); @@ -1858,7 +1862,7 @@ fn = get_filename(s, &sysfile); s1 = cpp_include(fn, sysfile); if (s1) { - char *dirname; + String *dirname; copy_location(s, chunk); add_chunk(ns, chunk, allow); Printf(ns, "%sfile%s%s%s\"%s\" %%beginfile\n", decl, options_whitespace, opt, filename_whitespace, Swig_filename_escape(Swig_last_file())); @@ -1866,10 +1870,13 @@ push_imported(); } dirname = Swig_file_dirname(Swig_last_file()); - if (sysfile || !strlen(dirname)) + if (sysfile || !strlen(dirname)) { + Delete(dirname); dirname = 0; + } if (dirname) { - dirname[strlen(dirname) - 1] = 0; /* Kill trailing directory delimiter */ + int len = Len(dirname); + Delslice(dirname, len - 1, len); /* Kill trailing directory delimiter */ Swig_push_directory(dirname); } s2 = Preprocessor_parse(s1); @@ -1882,6 +1889,7 @@ addline(ns, s2, allow); Append(ns, "%endoffile"); Delete(s2); + Delete(dirname); Delete(s1); } Delete(fn); Modified: trunk/Source/Swig/include.c =================================================================== --- trunk/Source/Swig/include.c 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Swig/include.c 2012-11-18 00:45:18 UTC (rev 13904) @@ -317,58 +317,49 @@ } /* ----------------------------------------------------------------------------- - * Swig_file_suffix() + * Swig_file_extension() * - * Returns the suffix of a file + * Returns the extension of a file * ----------------------------------------------------------------------------- */ -char *Swig_file_suffix(const_String_or_char_ptr filename) { - char *d; - char *c = Char(filename); +String *Swig_file_extension(const_String_or_char_ptr filename) { + const char *d; + const char *c = Char(filename); int len = Len(filename); if (strlen(c)) { d = c + len - 1; while (d != c) { if (*d == '.') - return d; + return NewString(d); d--; } - return c + len; + return NewString(c + len); } - return c; + return NewString(c); } /* ----------------------------------------------------------------------------- * Swig_file_basename() * - * Returns the filename with no suffix attached. + * Returns the filename with the extension removed. * ----------------------------------------------------------------------------- */ -char *Swig_file_basename(const_String_or_char_ptr filename) { - static char tmp[1024]; - char *c; - strcpy(tmp, Char(filename)); - c = Swig_file_suffix(tmp); - *c = 0; - return tmp; +String *Swig_file_basename(const_String_or_char_ptr filename) { + String *extension = Swig_file_extension(filename); + String *basename = DohNewStringWithSize(filename, Len(filename) - Len(extension)); + Delete(extension); + return basename; } /* ----------------------------------------------------------------------------- * Swig_file_filename() * - * Return the file with any leading path stripped off + * Return the file name with any leading path stripped off * ----------------------------------------------------------------------------- */ -char *Swig_file_filename(const_String_or_char_ptr filename) { - static char tmp[1024]; +String *Swig_file_filename(const_String_or_char_ptr filename) { const char *delim = SWIG_FILE_DELIMITER; - char *c; - - strcpy(tmp, Char(filename)); - c = strrchr(tmp, *delim); - if (c) - return c + 1; - else - return tmp; + const char *c = strrchr(Char(filename), *delim); + return c ? NewString(c + 1) : NewString(filename); } /* ----------------------------------------------------------------------------- @@ -376,19 +367,10 @@ * * Return the name of the directory associated with a file * ----------------------------------------------------------------------------- */ -char *Swig_file_dirname(const_String_or_char_ptr filename) { - static char tmp[1024]; +String *Swig_file_dirname(const_String_or_char_ptr filename) { const char *delim = SWIG_FILE_DELIMITER; - char *c; - strcpy(tmp, Char(filename)); - if (!strstr(tmp, delim)) { - return ""; - } - c = tmp + strlen(tmp) - 1; - while (*c != *delim) - c--; - *(++c) = 0; - return tmp; + const char *c = strrchr(Char(filename), *delim); + return c ? NewStringWithSize(filename, c - Char(filename) + 1) : NewString(""); } /* Modified: trunk/Source/Swig/swigfile.h =================================================================== --- trunk/Source/Swig/swigfile.h 2012-11-18 00:44:39 UTC (rev 13903) +++ trunk/Source/Swig/swigfile.h 2012-11-18 00:45:18 UTC (rev 13904) @@ -26,10 +26,10 @@ extern int Swig_get_push_dir(void); extern void Swig_register_filebyname(const_String_or_char_ptr filename, File *outfile); extern File *Swig_filebyname(const_String_or_char_ptr filename); -extern char *Swig_file_suffix(const_String_or_char_ptr filename); -extern char *Swig_file_basename(const_String_or_char_ptr filename); -extern char *Swig_file_filename(const_String_or_char_ptr filename); -extern char *Swig_file_dirname(const_String_or_char_ptr filename); +extern String *Swig_file_extension(const_String_or_char_ptr filename); +extern String *Swig_file_basename(const_String_or_char_ptr filename); +extern String *Swig_file_filename(const_String_or_char_ptr filename); +extern String *Swig_file_dirname(const_String_or_char_ptr filename); extern void Swig_file_debug_set(); /* Delimiter used in accessing files and directories */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-11-18 00:46:14
|
Revision: 13906 http://swig.svn.sourceforge.net/swig/?rev=13906&view=rev Author: wsfulton Date: 2012-11-18 00:46:07 +0000 (Sun, 18 Nov 2012) Log Message: ----------- Add missing support for -outdir for -tcl -itcl and -modula3 Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/modula3.cxx trunk/Source/Modules/tcl8.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-11-18 00:45:39 UTC (rev 13905) +++ trunk/CHANGES.current 2012-11-18 00:46:07 UTC (rev 13906) @@ -6,6 +6,9 @@ =========================== 2012-11-17: wsfulton + [Tcl, Modula3] Add missing support for -outdir. + +2012-11-17: wsfulton Fix segfaults when using filename paths greater than 1024 characters in length. 2012-11-14: wsfulton Modified: trunk/Source/Modules/modula3.cxx =================================================================== --- trunk/Source/Modules/modula3.cxx 2012-11-18 00:45:39 UTC (rev 13905) +++ trunk/Source/Modules/modula3.cxx 2012-11-18 00:46:07 UTC (rev 13906) @@ -991,7 +991,7 @@ // Generate m3makefile // This will be unnecessary if SWIG is invoked from Quake. { - File *file = openWriteFile(NewStringf("%sm3makefile", Swig_file_dirname(outfile))); + File *file = openWriteFile(NewStringf("%sm3makefile", SWIG_output_directory())); Printf(file, "%% automatically generated quake file for %s\n\n", name); @@ -1014,7 +1014,7 @@ // Generate the raw interface { - File *file = openWriteFile(NewStringf("%s%s.i3", Swig_file_dirname(outfile), m3raw_name)); + File *file = openWriteFile(NewStringf("%s%s.i3", SWIG_output_directory(), m3raw_name)); emitBanner(file); @@ -1032,7 +1032,7 @@ // Generate the raw module { - File *file = openWriteFile(NewStringf("%s%s.m3", Swig_file_dirname(outfile), m3raw_name)); + File *file = openWriteFile(NewStringf("%s%s.m3", SWIG_output_directory(), m3raw_name)); emitBanner(file); @@ -1050,7 +1050,7 @@ // Generate the interface for the comfort wrappers { - File *file = openWriteFile(NewStringf("%s%s.i3", Swig_file_dirname(outfile), m3wrap_name)); + File *file = openWriteFile(NewStringf("%s%s.i3", SWIG_output_directory(), m3wrap_name)); emitBanner(file); @@ -1080,7 +1080,7 @@ // Generate the wrapper routines implemented in Modula 3 { - File *file = openWriteFile(NewStringf("%s%s.m3", Swig_file_dirname(outfile), m3wrap_name)); + File *file = openWriteFile(NewStringf("%s%s.m3", SWIG_output_directory(), m3wrap_name)); emitBanner(file); @@ -2387,7 +2387,7 @@ SWIG_exit(EXIT_FAILURE); } - String *filen = NewStringf("%s%s.m3", Swig_file_dirname(outfile), proxy_class_name); + String *filen = NewStringf("%s%s.m3", SWIG_output_directory(), proxy_class_name); f_proxy = NewFile(filen, "w", SWIG_output_files()); if (!f_proxy) { FileErrorDisplay(filen); @@ -3780,7 +3780,7 @@ Setfile(n, input_file); Setline(n, line_number); - String *filen = NewStringf("%s%s.m3", Swig_file_dirname(outfile), classname); + String *filen = NewStringf("%s%s.m3", SWIG_output_directory(), classname); File *f_swigtype = NewFile(filen, "w", SWIG_output_files()); if (!f_swigtype) { FileErrorDisplay(filen); Modified: trunk/Source/Modules/tcl8.cxx =================================================================== --- trunk/Source/Modules/tcl8.cxx 2012-11-18 00:45:39 UTC (rev 13905) +++ trunk/Source/Modules/tcl8.cxx 2012-11-18 00:46:07 UTC (rev 13906) @@ -185,7 +185,7 @@ /* If shadow classing is enabled, we're going to change the module name to "_module" */ if (itcl) { String *filen; - filen = NewStringf("%s%s.itcl", Swig_file_dirname(outfile), module); + filen = NewStringf("%s%s.itcl", SWIG_output_directory(), module); Insert(module, 0, "_"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kw...@us...> - 2012-11-28 20:23:03
|
Revision: 13941 http://swig.svn.sourceforge.net/swig/?rev=13941&view=rev Author: kwwette Date: 2012-11-28 20:22:56 +0000 (Wed, 28 Nov 2012) Log Message: ----------- octave: Simplified module loading. Modified Paths: -------------- trunk/CHANGES.current trunk/Doc/Manual/Octave.html trunk/Examples/octave/module_load/runme.m trunk/Lib/octave/octruntime.swg trunk/Source/Modules/octave.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-11-26 20:31:54 UTC (rev 13940) +++ trunk/CHANGES.current 2012-11-28 20:22:56 UTC (rev 13941) @@ -5,6 +5,15 @@ Version 2.0.9 (in progress) =========================== +2012-11-28: kwwette + [Octave] Simplified module loading: now just the syntax + $ example; + is accepted, which loads functions globally but constants and variables relative to the current scope. + This make module loading behaviour reliably consistent, and reduces problems when loading modules which + depend on other modules which may not have been previously loaded. + + *** POTENTIAL INCOMPATIBILITY *** + 2012-11-17: wsfulton [Tcl, Modula3] Add missing support for -outdir. Modified: trunk/Doc/Manual/Octave.html =================================================================== --- trunk/Doc/Manual/Octave.html 2012-11-26 20:31:54 UTC (rev 13940) +++ trunk/Doc/Manual/Octave.html 2012-11-28 20:22:56 UTC (rev 13941) @@ -181,14 +181,9 @@ </p> <p> -An Octave module can either load its symbols into the global namespace, so that they can be accessed directly without having to type the module name. -Alternatively, an Octave module can be accessed through a local variable, without being loaded globally. +To load an Octave module, simply type its name: </p> -<p> -To load an Octave module globally, simply type its name: -</p> - <div class="targetlang"><pre> octave:1> example; octave:2> gcd(4,6) @@ -201,43 +196,6 @@ </pre></div> <p> -To access an Octave module through a local variable, without loading it globally, simply assign the module name (e.g. "example") to the desired local variable: -</p> - -<div class="targetlang"><pre> -octave:1> example = example; -octave:2> example.gcd(6,9) -ans = 3 -octave:3> example.cvar.Foo -ans = 3 -</pre></div> - -<p> -The variable may have the same name as the module, or a shorter one: -</p> - -<div class="targetlang"><pre> -octave:1> ex = example; -octave:2> ex.gcd(6,9) -ans = 3 -octave:3> ex.cvar.Foo -ans = 3 -</pre></div> - -<p> -It is also possible to rename the global variables namespaces with an assignment, as in: -</p> - -<div class="targetlang"><pre> -octave:1> example; -octave:2> cvar.gcd(10,4) -ans = 2 -octave:3> some_vars = cvar; -octave:4> some_vars.Foo -ans = 3 -</pre></div> - -<p> Modules can also be loaded from within functions, even before being loaded in the base context. If the module is also used in the base context, however, it must first be loaded again: </p> Modified: trunk/Examples/octave/module_load/runme.m =================================================================== --- trunk/Examples/octave/module_load/runme.m 2012-11-26 20:31:54 UTC (rev 13940) +++ trunk/Examples/octave/module_load/runme.m 2012-11-28 20:22:56 UTC (rev 13941) @@ -1,17 +1,7 @@ # file: runme_args.m -# test module loading with arguments -clear all - -# access module, no global load -example = example; -assert(example.cvar.ivar == example.ifunc()); -clear all -example = example; -assert(example.cvar.ivar == example.ifunc()); -clear all - -# load module globally +# load module +clear all; example; assert(cvar.ivar == ifunc); assert(exist("example","var")); @@ -21,27 +11,8 @@ assert(exist("example","var")); clear all -# access module in a function, no global load -function testme - example = example; - assert(example.cvar.ivar == example.ifunc()); -endfunction -testme -testme -example = example; -assert(example.cvar.ivar == example.ifunc()); -clear all -function testme - example = example; - assert(example.cvar.ivar == example.ifunc()); -endfunction -testme -testme -example = example; -assert(example.cvar.ivar == example.ifunc()); -clear all - # load module in a function globally before base context +clear all; function testme example; assert(cvar.ivar == ifunc); @@ -66,6 +37,7 @@ clear all # load module in a function globally after base context +clear all; example; assert(cvar.ivar == ifunc); assert(exist("example","var")); @@ -95,17 +67,8 @@ exit endif -# access module with no cvar, no global load -example2 = example2; -assert(example2.ivar == example2.ifunc()); -assert(!isglobal("cvar")) -clear all -example2 = example2; -assert(example2.ivar == example2.ifunc()); -assert(!isglobal("cvar")) -clear all - -# load module with no cvar globally +# load module with no cvar +clear all; example2; assert(example2.ivar == ifunc); assert(exist("example2","var")); Modified: trunk/Lib/octave/octruntime.swg =================================================================== --- trunk/Lib/octave/octruntime.swg 2012-11-26 20:31:54 UTC (rev 13940) +++ trunk/Lib/octave/octruntime.swg 2012-11-28 20:22:56 UTC (rev 13941) @@ -20,15 +20,76 @@ %insert(initbeforefunc) %{ -static void SWIG_init_user(octave_swig_type* module_ns); +static bool SWIG_init_user(octave_swig_type* module_ns); -SWIGINTERN void SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) { - octave_value_list args; - args.append(name); - args.append(octloadfcn->fcn_file_name()); - feval("autoload", args, 0); +SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) { + bool retn; + { +#if OCTAVE_API_VERSION_NUMBER < 38 + unwind_protect::begin_frame("SWIG_Octave_LoadModule"); + unwind_protect_int(error_state); + unwind_protect_int(warning_state); + unwind_protect_bool(discard_error_messages); + unwind_protect_bool(discard_warning_messages); +#else + unwind_protect frame; + frame.protect_var(error_state); + frame.protect_var(warning_state); + frame.protect_var(discard_error_messages); + frame.protect_var(discard_warning_messages); +#endif + error_state = 0; + warning_state = 0; + discard_error_messages = true; + discard_warning_messages = true; + feval(name, octave_value_list(), 0); + retn = (error_state == 0); +#if OCTAVE_API_VERSION_NUMBER < 38 + unwind_protect::run_frame("SWIG_Octave_LoadModule"); +#endif + } + if (!retn) { + error(SWIG_name_d ": could not load module `%s'", name.c_str()); + } + return retn; } +SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) { + bool retn; + { +#if OCTAVE_API_VERSION_NUMBER < 38 + unwind_protect::begin_frame("SWIG_Octave_InstallFunction"); + unwind_protect_int(error_state); + unwind_protect_int(warning_state); + unwind_protect_bool(discard_error_messages); + unwind_protect_bool(discard_warning_messages); +#else + unwind_protect frame; + frame.protect_var(error_state); + frame.protect_var(warning_state); + frame.protect_var(discard_error_messages); + frame.protect_var(discard_warning_messages); +#endif + error_state = 0; + warning_state = 0; + discard_error_messages = true; + discard_warning_messages = true; + octave_value_list args; + args.append(name); + args.append(octloadfcn->fcn_file_name()); + error_state = 0; + feval("autoload", args, 0); + retn = (error_state == 0); +#if OCTAVE_API_VERSION_NUMBER < 38 + unwind_protect::run_frame("SWIG_Octave_InstallFunction"); +#endif + } + if (!retn) { + error(SWIG_name_d ": could not load function `%s'", name.c_str()); + } + return retn; +} + static const char *const subclass_usage = "-*- texinfo -*- \n\ @deftypefn {Loadable Function} {} subclass()\n\ @deftypefnx{Loadable Function} {} subclass(@var{swigclass}, @var{name}, @var{fcn}, @dots{})\n\ @@ -44,7 +105,7 @@ octave_swig_ref *osr = static_cast < octave_swig_ref *>(args(j).internal_rep()); octave_swig_type *ost = osr->get_ptr(); if (!ost->is_owned()) { - error("cannot subclass object not constructed on octave side"); + error("subclass: cannot subclass object not constructed on octave side"); return octave_value_list(); } top->merge(*ost); @@ -52,13 +113,13 @@ top->assign(args(j).fcn_handle_value()->fcn_name(), args(j)); } else if (args(j).is_string()) { if (j + 1 >= args.length()) { - error("member assignments must be of string,value form"); + error("subclass: member assignments must be of string,value form"); return octave_value_list(); } top->assign(args(j).string_value(), args(j + 1)); ++j; } else { - error("invalid arguments to subclass()"); + error("subclass: invalid arguments to subclass()"); return octave_value_list(); } } @@ -72,12 +133,12 @@ DEFUN_DLD( swig_type, args, nargout, swig_type_usage ) { if (args.length() != 1) { - error("swig_type() must be called with only a single object"); + error("swig_type: must be called with only a single object"); return octave_value_list(); } octave_swig_type *ost = Swig::swig_value_deref(args(0)); if (!ost) { - error("object is not a swig_ref"); + error("swig_type: object is not a swig_ref"); return octave_value_list(); } return octave_value(ost->swig_type_name()); @@ -91,7 +152,7 @@ DEFUN_DLD( swig_typequery, args, nargout, swig_typequery_usage ) { if (args.length() != 1 || !args(0).is_string()) { - error("swig_typequery() must be called with single string argument"); + error("swig_typequery: must be called with single string argument"); return octave_value_list(); } swig_module_info *module = SWIG_GetModule(0); @@ -108,14 +169,14 @@ DEFUN_DLD( swig_this, args, nargout, swig_this_usage ) { if (args.length() != 1) { - error("swig_this() must be called with only a single object"); + error("swig_this: must be called with only a single object"); return octave_value_list(); } if (args(0).is_matrix_type() && args(0).rows() == 0 && args(0).columns() == 0) return octave_value(octave_uint64(0)); octave_swig_type *ost = Swig::swig_value_deref(args(0)); if (!ost) { - error("object is not a swig_ref"); + error("swig_this: object is not a swig_ref"); return octave_value_list(); } return octave_value(octave_uint64((unsigned long long) ost->swig_this())); @@ -124,42 +185,34 @@ static const char *const SWIG_name_usage = "-*- texinfo -*- \n\ @deftypefn {Loadable Module} {} " SWIG_name_d "\n\ Loads the SWIG-generated module `" SWIG_name_d "'.\n\ -\n\ -To load the module into the global namespace:\n\ -@example\n\ -" SWIG_name_d ";\n\ -@end example\n\ -To access the module through a local variable, without loading it globally:\n\ -@example\n\ -" SWIG_name_d " = " SWIG_name_d ";\n\ -@end example\n\ -To access the module locally through a variable named, e.g. @var{modl}:\n\ -@example\n\ -@var{modl} = " SWIG_name_d ";\n\ -@end example\n\ @end deftypefn"; DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) { static octave_swig_type* module_ns = 0; - octave_value_list retval; - // create module on first function call - if (!module_ns) { - - // workaround to prevent octave seg-faulting on exit: set Octave exit function - // octave_exit to _Exit, which exits immediately without trying to cleanup memory. - // definitely affects version 3.2.*, not sure about 3.3.*, seems to be - // fixed in version 3.4.* and above. can be turned off with macro def. + // workaround to prevent octave seg-faulting on exit: set Octave exit function + // octave_exit to _Exit, which exits immediately without trying to cleanup memory. + // definitely affects version 3.2.*, not sure about 3.3.*, seems to be fixed in + // version 3.4.* and above. can be turned off with macro definition. #ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK #if 36 < OCTAVE_API_VERSION_NUMBER && OCTAVE_API_VERSION_NUMBER < 45 - octave_exit = ::_Exit; + octave_exit = ::_Exit; #endif #endif + // check for no input and output args + if (args.length() != 0 || nargout != 0) { + print_usage(); + return octave_value_list(); + } + + // create module on first function call + if (!module_ns) { + // workaround bug in octave where installing global variable of custom type and then // exiting without explicitly clearing the variable causes octave to segfault. -#if OCTAVE_API_VERSION_NUMBER >= 37 +#if OCTAVE_API_VERSION_NUMBER > 36 octave_value_list eval_args; eval_args.append("base"); eval_args.append("function __swig_atexit__; " @@ -182,10 +235,18 @@ octave_function *me = octave_call_stack::current(); - SWIG_Octave_InstallFunction(me, "swig_type"); - SWIG_Octave_InstallFunction(me, "swig_typequery"); - SWIG_Octave_InstallFunction(me, "swig_this"); - SWIG_Octave_InstallFunction(me, "subclass"); + if (!SWIG_Octave_InstallFunction(me, "swig_type")) { + return octave_value_list(); + } + if (!SWIG_Octave_InstallFunction(me, "swig_typequery")) { + return octave_value_list(); + } + if (!SWIG_Octave_InstallFunction(me, "swig_this")) { + return octave_value_list(); + } + if (!SWIG_Octave_InstallFunction(me, "subclass")) { + return octave_value_list(); + } octave_swig_type* cvar_ns=0; if (std::string(SWIG_global_name) != ".") { @@ -219,7 +280,11 @@ (new octave_swig_type(0,swig_types[j]))); } - SWIG_init_user(module_ns); + if (!SWIG_init_user(module_ns)) { + delete module_ns; + module_ns=0; + return octave_value_list(); + } SWIG_InstallOps(octave_swig_ref::static_type_id()); @@ -231,38 +296,25 @@ } - // return module if asked for - if (args.length() == 0 && nargout == 1) { - retval = octave_value(module_ns->as_value()); - } + octave_function *me = octave_call_stack::current(); - // if call with not output arguments, load globally - else if (args.length() == 0 && nargout == 0) { - - octave_function *me = octave_call_stack::current(); - - octave_swig_type::swig_member_const_iterator mb; - for (mb = module_ns->swig_members_begin(); mb != module_ns->swig_members_end(); ++mb) { - if (mb->second.first && mb->second.first->method) { - SWIG_Octave_InstallFunction(me, mb->first); + octave_swig_type::swig_member_const_iterator mb; + for (mb = module_ns->swig_members_begin(); mb != module_ns->swig_members_end(); ++mb) { + if (mb->second.first && mb->second.first->method) { + if (!SWIG_Octave_InstallFunction(me, mb->first)) { + return octave_value_list(); } - else if (mb->second.second.is_defined()) { - SWIG_Octave_SetGlobalValue(mb->first, mb->second.second); - SWIG_Octave_LinkGlobalValue(mb->first); - } } - - SWIG_Octave_SetGlobalValue(SWIG_name_d, module_ns->as_value()); - SWIG_Octave_LinkGlobalValue(SWIG_name_d); - + else if (mb->second.second.is_defined()) { + SWIG_Octave_SetGlobalValue(mb->first, mb->second.second); + SWIG_Octave_LinkGlobalValue(mb->first); + } } - // otherwise print usage - else { - print_usage(); - } + SWIG_Octave_SetGlobalValue(SWIG_name_d, module_ns->as_value()); + SWIG_Octave_LinkGlobalValue(SWIG_name_d); - return retval; + return octave_value_list(); } Modified: trunk/Source/Modules/octave.cxx =================================================================== --- trunk/Source/Modules/octave.cxx 2012-11-26 20:31:54 UTC (rev 13940) +++ trunk/Source/Modules/octave.cxx 2012-11-28 20:22:56 UTC (rev 13941) @@ -207,7 +207,7 @@ Printf(f_runtime, "\n"); Printf(s_global_tab, "\nstatic const struct swig_octave_member swig_globals[] = {\n"); - Printf(f_init, "static void SWIG_init_user(octave_swig_type* module_ns)\n{\n"); + Printf(f_init, "static bool SWIG_init_user(octave_swig_type* module_ns)\n{\n"); if (!CPlusPlus) Printf(f_header,"extern \"C\" {\n"); @@ -223,7 +223,7 @@ if (directorsEnabled()) Swig_insert_file("director.swg", f_runtime); - Printf(f_init, "}\n"); + Printf(f_init, "return true;\n}\n"); Printf(s_global_tab, "{0,0,0,0,0}\n};\n"); Printv(f_wrappers, s_global_tab, NIL); @@ -393,7 +393,7 @@ virtual int importDirective(Node *n) { String *modname = Getattr(n, "module"); if (modname) - Printf(f_init, "feval(\"%s\",octave_value_list(),1);\n", modname); + Printf(f_init, "if (!SWIG_Octave_LoadModule(\"%s\")) return false;\n", modname); return Language::importDirective(n); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-02 13:36:46
|
Revision: 13944 http://swig.svn.sourceforge.net/swig/?rev=13944&view=rev Author: wsfulton Date: 2012-12-02 13:36:40 +0000 (Sun, 02 Dec 2012) Log Message: ----------- CFFI - fix junk output when wrapping single character constants Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/cffi.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-02 13:36:13 UTC (rev 13943) +++ trunk/CHANGES.current 2012-12-02 13:36:40 UTC (rev 13944) @@ -12,7 +12,8 @@ This make module loading behaviour reliably consistent, and reduces problems when loading modules which depend on other modules which may not have been previously loaded. - *** POTENTIAL INCOMPATIBILITY *** +2012-11-27: wsfulton + [cffi] Fix junk output when wrapping single character literal constants. 2012-11-17: wsfulton [Tcl, Modula3] Add missing support for -outdir. Modified: trunk/Source/Modules/cffi.cxx =================================================================== --- trunk/Source/Modules/cffi.cxx 2012-12-02 13:36:13 UTC (rev 13943) +++ trunk/Source/Modules/cffi.cxx 2012-12-02 13:36:40 UTC (rev 13944) @@ -1021,9 +1021,8 @@ return num; } else if (SwigType_type(type) == T_CHAR) { /* Use CL syntax for character literals */ - String* result = NewStringf("#\\%c", s[2]); + String* result = NewStringf("#\\%c", s[0]); Delete(num); - // Printf(stderr, "%s %c %d", s, s[2], s); return result; } else if (SwigType_type(type) == T_STRING) { /* Use CL syntax for string literals */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-09 17:47:19
|
Revision: 13951 http://swig.svn.sourceforge.net/swig/?rev=13951&view=rev Author: wsfulton Date: 2012-12-09 17:47:12 +0000 (Sun, 09 Dec 2012) Log Message: ----------- Perl - Fix C++ comment in C wrappers. Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/perl5/perlinit.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-08 10:37:04 UTC (rev 13950) +++ trunk/CHANGES.current 2012-12-09 17:47:12 UTC (rev 13951) @@ -5,6 +5,9 @@ Version 2.0.9 (in progress) =========================== +2012-12-08: wsfulton + [Perl] Fix bug #3571361 - C++ comment in C wrappers. + 2012-11-28: kwwette [Octave] Simplified module loading: now just the syntax $ example; Modified: trunk/Lib/perl5/perlinit.swg =================================================================== --- trunk/Lib/perl5/perlinit.swg 2012-12-08 10:37:04 UTC (rev 13950) +++ trunk/Lib/perl5/perlinit.swg 2012-12-09 17:47:12 UTC (rev 13951) @@ -33,7 +33,7 @@ /* Install commands */ for (i = 0; swig_commands[i].name; i++) { - // Casts only needed for Perl < 5.10. + /* Casts only needed for Perl < 5.10. */ #ifdef __cplusplus newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__)); #else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-09 20:49:34
|
Revision: 13952 http://swig.svn.sourceforge.net/swig/?rev=13952&view=rev Author: wsfulton Date: 2012-12-09 20:49:28 +0000 (Sun, 09 Dec 2012) Log Message: ----------- Apply patch #3571029 which adds missing director support for const unsigned long long &. Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/csharp/csharp.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-09 17:47:12 UTC (rev 13951) +++ trunk/CHANGES.current 2012-12-09 20:49:28 UTC (rev 13952) @@ -8,6 +8,9 @@ 2012-12-08: wsfulton [Perl] Fix bug #3571361 - C++ comment in C wrappers. +2012-12-07: wsfulton + [C#] Apply patch #3571029 which adds missing director support for const unsigned long long &. + 2012-11-28: kwwette [Octave] Simplified module loading: now just the syntax $ example; Modified: trunk/Lib/csharp/csharp.swg =================================================================== --- trunk/Lib/csharp/csharp.swg 2012-12-09 17:47:12 UTC (rev 13951) +++ trunk/Lib/csharp/csharp.swg 2012-12-09 20:49:28 UTC (rev 13952) @@ -291,6 +291,7 @@ const long &, const unsigned long &, const long long &, + const unsigned long long &, const float &, const double & %{ static $*1_ltype temp; @@ -308,6 +309,7 @@ %typemap(directorin) const long & "$input = $1;" %typemap(directorin) const unsigned long & "$input = $1;" %typemap(directorin) const long long & "$input = $1;" +%typemap(directorin) const unsigned long long & "$input = $1;" %typemap(directorin) const float & "$input = $1;" %typemap(directorin) const double & "$input = $1;" @@ -321,6 +323,7 @@ const long & ($*1_ltype temp), const unsigned long & ($*1_ltype temp), const long long & ($*1_ltype temp), + const unsigned long long & ($*1_ltype temp), const float & ($*1_ltype temp), const double & ($*1_ltype temp) "$iminput" @@ -335,6 +338,7 @@ const long & ($*1_ltype temp), const unsigned long & ($*1_ltype temp), const long long & ($*1_ltype temp), + const unsigned long long & ($*1_ltype temp), const float & ($*1_ltype temp), const double & ($*1_ltype temp) "$cscall" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-09 20:49:58
|
Revision: 13953 http://swig.svn.sourceforge.net/swig/?rev=13953&view=rev Author: wsfulton Date: 2012-12-09 20:49:52 +0000 (Sun, 09 Dec 2012) Log Message: ----------- Bug #3563647 - PyInt_FromSize_t unavailable prior to Python 2.5 for unsigned int types Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/python/pyhead.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-09 20:49:28 UTC (rev 13952) +++ trunk/CHANGES.current 2012-12-09 20:49:52 UTC (rev 13953) @@ -6,6 +6,9 @@ =========================== 2012-12-08: wsfulton + [Python] Bug #3563647 - PyInt_FromSize_t unavailable prior to Python 2.5 for unsigned int types. + +2012-12-08: wsfulton [Perl] Fix bug #3571361 - C++ comment in C wrappers. 2012-12-07: wsfulton Modified: trunk/Lib/python/pyhead.swg =================================================================== --- trunk/Lib/python/pyhead.swg 2012-12-09 20:49:28 UTC (rev 13952) +++ trunk/Lib/python/pyhead.swg 2012-12-09 20:49:52 UTC (rev 13953) @@ -175,6 +175,10 @@ } #endif +#if PY_VERSION_HEX < 0x02050000 +#define PyInt_FromSize_t(x) PyInt_FromLong((long)x) +#endif + #if PY_VERSION_HEX < 0x02040000 #define Py_VISIT(op) \ do { \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-11 18:43:04
|
Revision: 13955 http://swig.svn.sourceforge.net/swig/?rev=13955&view=rev Author: wsfulton Date: 2012-12-11 18:42:58 +0000 (Tue, 11 Dec 2012) Log Message: ----------- Fix fully qualified package paths for Python 3 even if a module is in the same package Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/python.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-10 19:45:04 UTC (rev 13954) +++ trunk/CHANGES.current 2012-12-11 18:42:58 UTC (rev 13955) @@ -5,6 +5,10 @@ Version 2.0.9 (in progress) =========================== +2012-12-11: wsfulton + [Python] Apply patch #3590522 - fully qualified package paths for Python 3 even if a module is in the + same package. + 2012-12-08: wsfulton [Python] Bug #3563647 - PyInt_FromSize_t unavailable prior to Python 2.5 for unsigned int types. Modified: trunk/Source/Modules/python.cxx =================================================================== --- trunk/Source/Modules/python.cxx 2012-12-10 19:45:04 UTC (rev 13954) +++ trunk/Source/Modules/python.cxx 2012-12-11 18:42:58 UTC (rev 13955) @@ -1049,7 +1049,7 @@ // of this module.) Node *options = Getattr(mod, "options"); String *pkg = options ? Getattr(options, "package") : 0; - if (pkg && (!package || Strcmp(pkg, package) != 0)) { + if (pkg) { Printf(import, "%s.", pkg); } // finally, output the name of the imported module @@ -1057,7 +1057,7 @@ if (!options || (!Getattr(options, "noshadow") && !Getattr(options, "noproxy"))) { Printf(import, "_%s\n", modname); if (!GetFlagAttr(f_shadow_imports, import)) { - if (pkg && (!package || Strcmp(pkg, package) != 0)) { + if (pkg) { Printf(builtin ? f_shadow_builtin_imports : f_shadow, "import %s.%s\n", pkg, modname); } else { Printf(builtin ? f_shadow_builtin_imports : f_shadow, "import %s\n", modname); @@ -3168,7 +3168,7 @@ // check if the module has a package option Node *options = Getattr(mod, "options"); String *pkg = options ? Getattr(options, "package") : 0; - if (pkg && (!package || Strcmp(pkg, package) != 0)) { + if (pkg) { Printf(importname, "%s.", pkg); } Printf(importname, "%s.", modname); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-14 07:38:50
|
Revision: 13962 http://swig.svn.sourceforge.net/swig/?rev=13962&view=rev Author: wsfulton Date: 2012-12-14 07:38:44 +0000 (Fri, 14 Dec 2012) Log Message: ----------- Fix CFFI incorrect constant names Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/cffi.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-14 07:12:35 UTC (rev 13961) +++ trunk/CHANGES.current 2012-12-14 07:38:44 UTC (rev 13962) @@ -5,6 +5,10 @@ Version 2.0.9 (in progress) =========================== + +2012-12-13: wsfulton + [CFFI] Fix #3529690 - Fix incorrect constant names. + 2012-12-12: drjoe [R] add fix to finalizer that was missed earlier Modified: trunk/Source/Modules/cffi.cxx =================================================================== --- trunk/Source/Modules/cffi.cxx 2012-12-14 07:12:35 UTC (rev 13961) +++ trunk/Source/Modules/cffi.cxx 2012-12-14 07:38:44 UTC (rev 13962) @@ -1031,10 +1031,14 @@ return result; } else if (SwigType_type(type) == T_INT || SwigType_type(type) == T_UINT) { // Printf(stderr, "Is a T_INT or T_UINT %s, before replaceall\n", s); - Replaceall(num, "u", ""); - Replaceall(num, "U", ""); - Replaceall(num, "l", ""); - Replaceall(num, "L", ""); + const char *num_start = Char(num); + bool is_literal = isdigit(*num_start) || (*num_start == '.') || (*num_start == '+') || (*num_start == '-'); + if (is_literal) { + Replaceall(num, "u", ""); + Replaceall(num, "U", ""); + Replaceall(num, "l", ""); + Replaceall(num, "L", ""); + } int i, j; if (sscanf(s, "%d >> %d", &i, &j) == 2) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-14 08:00:34
|
Revision: 13963 http://swig.svn.sourceforge.net/swig/?rev=13963&view=rev Author: wsfulton Date: 2012-12-14 08:00:22 +0000 (Fri, 14 Dec 2012) Log Message: ----------- CFFI - Fix some string constants are incorrect Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/preproc_constants.i trunk/Source/Modules/cffi.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-14 07:38:44 UTC (rev 13962) +++ trunk/CHANGES.current 2012-12-14 08:00:22 UTC (rev 13963) @@ -6,6 +6,9 @@ =========================== +2012-12-14: wsfulton + [CFFI] Fix #3161614 - Some string constants are incorrect + 2012-12-13: wsfulton [CFFI] Fix #3529690 - Fix incorrect constant names. Modified: trunk/Examples/test-suite/preproc_constants.i =================================================================== --- trunk/Examples/test-suite/preproc_constants.i 2012-12-14 07:38:44 UTC (rev 13962) +++ trunk/Examples/test-suite/preproc_constants.i 2012-12-14 08:00:22 UTC (rev 13963) @@ -39,6 +39,7 @@ #define CONST_CHAR 'x' #define CONST_STRING1 "const string" #define CONST_STRING2 "const" " string" +#define CONST_STRING3 "log-revprops" // Expressions - runtime tests check the type for any necessary type promotions of the expressions Modified: trunk/Source/Modules/cffi.cxx =================================================================== --- trunk/Source/Modules/cffi.cxx 2012-12-14 07:38:44 UTC (rev 13962) +++ trunk/Source/Modules/cffi.cxx 2012-12-14 08:00:22 UTC (rev 13963) @@ -565,7 +565,13 @@ int CFFI::constantWrapper(Node *n) { String *type = Getattr(n, "type"); - String *converted_value = convert_literal(Getattr(n, "value"), type); + String *converted_value; + if (SwigType_type(type) == T_STRING) { + converted_value = NewString(Getattr(n, "rawval")); + } else { + converted_value = convert_literal(Getattr(n, "value"), type); + } + String *name = lispify_name(n, Getattr(n, "sym:name"), "'constant"); if (Strcmp(name, "t") == 0 || Strcmp(name, "T") == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kk...@us...> - 2012-12-14 15:48:39
|
Revision: 13967 http://swig.svn.sourceforge.net/swig/?rev=13967&view=rev Author: kkaempf Date: 2012-12-14 15:48:31 +0000 (Fri, 14 Dec 2012) Log Message: ----------- Ruby: Replace all occurences of STR2CSTR macro with calls to StringValuePtr STR2CSTR was deprecated in Ruby since years and got finally removed in Ruby 1.9 Modified Paths: -------------- trunk/CHANGES.current trunk/Doc/Manual/Ruby.html trunk/Examples/ruby/hashargs/example.i trunk/Examples/ruby/multimap/example.i trunk/Examples/test-suite/memberin1.i trunk/Examples/test-suite/namespace_typemap.i trunk/Lib/ruby/argcargv.i trunk/Lib/ruby/rubystrings.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/CHANGES.current 2012-12-14 15:48:31 UTC (rev 13967) @@ -6,6 +6,10 @@ =========================== 2012-12-14: kkaempf + [Ruby] Apply patch 3530439 and finally replace all occurences of the STR2CSTR() macro + with StringValuePtr(). STR2CSTR was deprecated since years and got removed in Ruby 1.9 + +2012-12-14: kkaempf [Ruby] Applied patches #3530442 and 3530443 to adapt compile and runtime include pathes to match Ruby 1.9+ Modified: trunk/Doc/Manual/Ruby.html =================================================================== --- trunk/Doc/Manual/Ruby.html 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Doc/Manual/Ruby.html 2012-12-14 15:48:31 UTC (rev 13967) @@ -4926,7 +4926,7 @@ <div class="code"> -<pre>%typemap(in) (char *str, int len) {<br> $1 = STR2CSTR($input);<br> $2 = (int) RSTRING($input)->len;<br>};<br><br>int count(char c, char *str, int len);<br></pre> +<pre>%typemap(in) (char *str, int len) {<br> $1 = StringValuePtr($input);<br> $2 = (int) RSTRING($input)->len;<br>};<br><br>int count(char c, char *str, int len);<br></pre> @@ -7135,7 +7135,7 @@ </tr> <tr> - <td style="font-family: monospace;">char * STR2CSTR(String)</td> + <td style="font-family: monospace;">char * StringValuePtr(String)</td> <td style="font-family: monospace;">SWIG_AsCharPtrAndSize(VALUE, char*, size_t, int* alloc)</td> </tr> @@ -7518,7 +7518,7 @@ <div class="code"> -<pre>%module argv<br><br>// This tells SWIG to treat char ** as a special case<br>%typemap(in) char ** {<br> /* Get the length of the array */<br> int size = RARRAY($input)->len; <br> int i;<br> $1 = (char **) malloc((size+1)*sizeof(char *));<br> /* Get the first element in memory */<br> VALUE *ptr = RARRAY($input)->ptr; <br> for (i=0; i < size; i++, ptr++)<br> /* Convert Ruby Object String to char* */<br> $1[i]= STR2CSTR(*ptr); <br> $1[i]=NULL; /* End of list */<br>}<br><br>// This cleans up the char ** array created before <br>// the function call<br><br>%typemap(freearg) char ** {<br> free((char *) $1);<br>}<br><br>// Now a test function<br>%inline %{<br>int print_args(char **argv) {<br> int i = 0;<br> while (argv[i]) {<br> printf("argv[%d] = %s\n", i,argv[i]);<br> i++;<br> }<br> return i;<br>}<br>%}<br><br></pre> +<pre>%module argv<br><br>// This tells SWIG to treat char ** as a special case<br>%typemap(in) char ** {<br> /* Get the length of the array */<br> int size = RARRAY($input)->len; <br> int i;<br> $1 = (char **) malloc((size+1)*sizeof(char *));<br> /* Get the first element in memory */<br> VALUE *ptr = RARRAY($input)->ptr; <br> for (i=0; i < size; i++, ptr++)<br> /* Convert Ruby Object String to char* */<br> $1[i]= StringValuePtr(*ptr); <br> $1[i]=NULL; /* End of list */<br>}<br><br>// This cleans up the char ** array created before <br>// the function call<br><br>%typemap(freearg) char ** {<br> free((char *) $1);<br>}<br><br>// Now a test function<br>%inline %{<br>int print_args(char **argv) {<br> int i = 0;<br> while (argv[i]) {<br> printf("argv[%d] = %s\n", i,argv[i]);<br> i++;<br> }<br> return i;<br>}<br>%}<br><br></pre> @@ -7796,7 +7796,7 @@ <div class="code"> -<pre>%typemap(in) (int nattributes, const char **names, const int *values)<br> (VALUE keys_arr, int i, VALUE key, VALUE val) {<br> Check_Type($input, T_HASH);<br> $1 = NUM2INT(rb_funcall($input, rb_intern("size"), 0, NULL));<br> $2 = NULL;<br> $3 = NULL;<br> if ($1 > 0) {<br> $2 = (char **) malloc($1*sizeof(char *));<br> $3 = (int *) malloc($1*sizeof(int));<br> keys_arr = rb_funcall($input, rb_intern("keys"), 0, NULL);<br> for (i = 0; i < $1; i++) {<br> key = rb_ary_entry(keys_arr, i);<br> val = rb_hash_aref($input, key);<br> Check_Type(key, T_STRING);<br> Check_Type(val, T_FIXNUM);<br> <b>$2[i] = STR2CSTR(key);<br> $3[i] = NUM2INT(val);</b><br>}<br>}<br>}<br></pre> +<pre>%typemap(in) (int nattributes, const char **names, const int *values)<br> (VALUE keys_arr, int i, VALUE key, VALUE val) {<br> Check_Type($input, T_HASH);<br> $1 = NUM2INT(rb_funcall($input, rb_intern("size"), 0, NULL));<br> $2 = NULL;<br> $3 = NULL;<br> if ($1 > 0) {<br> $2 = (char **) malloc($1*sizeof(char *));<br> $3 = (int *) malloc($1*sizeof(int));<br> keys_arr = rb_funcall($input, rb_intern("keys"), 0, NULL);<br> for (i = 0; i < $1; i++) {<br> key = rb_ary_entry(keys_arr, i);<br> val = rb_hash_aref($input, key);<br> Check_Type(key, T_STRING);<br> Check_Type(val, T_FIXNUM);<br> <b>$2[i] = StringValuePtr(key);<br> $3[i] = NUM2INT(val);</b><br>}<br>}<br>}<br></pre> Modified: trunk/Examples/ruby/hashargs/example.i =================================================================== --- trunk/Examples/ruby/hashargs/example.i 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Examples/ruby/hashargs/example.i 2012-12-14 15:48:31 UTC (rev 13967) @@ -14,7 +14,7 @@ val = rb_hash_aref($input, key); Check_Type(key, T_STRING); Check_Type(val, T_FIXNUM); - $2[i] = STR2CSTR(key); + $2[i] = StringValuePtr(key); $3[i] = NUM2INT(val); } } Modified: trunk/Examples/ruby/multimap/example.i =================================================================== --- trunk/Examples/ruby/multimap/example.i 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Examples/ruby/multimap/example.i 2012-12-14 15:48:31 UTC (rev 13967) @@ -31,7 +31,7 @@ free($2); SWIG_exception(SWIG_ValueError, "List items must be strings"); } - $2[i] = STR2CSTR(s); + $2[i] = StringValuePtr(s); } $2[i] = 0; } @@ -46,7 +46,7 @@ if (TYPE($input) != T_STRING) { SWIG_exception(SWIG_ValueError, "Expected a string"); } - $1 = STR2CSTR($input); + $1 = StringValuePtr($input); $2 = RSTRING_LEN($input); } @@ -60,7 +60,7 @@ if (TYPE($input) != T_STRING) { SWIG_exception(SWIG_ValueError,"Expected a string"); } - temp = STR2CSTR($input); + temp = StringValuePtr($input); $2 = RSTRING_LEN($input); $1 = (char *) malloc($2+1); memmove($1,temp,$2); Modified: trunk/Examples/test-suite/memberin1.i =================================================================== --- trunk/Examples/test-suite/memberin1.i 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Examples/test-suite/memberin1.i 2012-12-14 15:48:31 UTC (rev 13967) @@ -47,7 +47,7 @@ #ifdef SWIGRUBY %typemap(in) String { Check_Type($input, T_STRING); - $1 = String(STR2CSTR($input)); + $1 = String(StringValuePtr($input)); } #endif Modified: trunk/Examples/test-suite/namespace_typemap.i =================================================================== --- trunk/Examples/test-suite/namespace_typemap.i 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Examples/test-suite/namespace_typemap.i 2012-12-14 15:48:31 UTC (rev 13967) @@ -100,7 +100,7 @@ #endif #ifdef SWIGRUBY %typemap(in) string_class * { - $1 = new string_class(STR2CSTR($input)); + $1 = new string_class(StringValuePtr($input)); } %typemap(freearg) string_class * { delete $1; Modified: trunk/Lib/ruby/argcargv.i =================================================================== --- trunk/Lib/ruby/argcargv.i 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Lib/ruby/argcargv.i 2012-12-14 15:48:31 UTC (rev 13967) @@ -30,7 +30,7 @@ $2 = (char **) malloc((size+1)*sizeof(char *)); VALUE *ptr = RARRAY_PTR($input); for (i=0; i < size; i++, ptr++) { - $2[i]= STR2CSTR(*ptr); + $2[i]= StringValuePtr(*ptr); } $2[i]=NULL; } else { Modified: trunk/Lib/ruby/rubystrings.swg =================================================================== --- trunk/Lib/ruby/rubystrings.swg 2012-12-14 14:13:12 UTC (rev 13966) +++ trunk/Lib/ruby/rubystrings.swg 2012-12-14 15:48:31 UTC (rev 13967) @@ -7,11 +7,7 @@ SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc) { if (TYPE(obj) == T_STRING) { - %#if defined(StringValuePtr) char *cstr = StringValuePtr(obj); - %#else - char *cstr = STR2CSTR(obj); - %#endif size_t size = RSTRING_LEN(obj) + 1; if (cptr) { if (alloc) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kk...@us...> - 2012-12-15 16:16:46
|
Revision: 13970 http://swig.svn.sourceforge.net/swig/?rev=13970&view=rev Author: kkaempf Date: 2012-12-15 16:16:40 +0000 (Sat, 15 Dec 2012) Log Message: ----------- Apply patch 3530444 Class#methods and Class#constants returns array of symbols from Ruby 1.9 on Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/ruby/ruby_naming_runme.rb Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-15 14:55:54 UTC (rev 13969) +++ trunk/CHANGES.current 2012-12-15 16:16:40 UTC (rev 13970) @@ -5,6 +5,10 @@ Version 2.0.9 (in progress) =========================== +2012-12-15: kkaempf + [Ruby] Apply patch 3530444, Class#methods and Class#constants returns array of + symbols in Ruby 1.9+ + 2012-12-14: kkaempf [Ruby] Apply patch 3530439 and finally replace all occurences of the STR2CSTR() macro with StringValuePtr(). STR2CSTR was deprecated since years and got removed in Ruby 1.9 Modified: trunk/Examples/test-suite/ruby/ruby_naming_runme.rb =================================================================== --- trunk/Examples/test-suite/ruby/ruby_naming_runme.rb 2012-12-15 14:55:54 UTC (rev 13969) +++ trunk/Examples/test-suite/ruby/ruby_naming_runme.rb 2012-12-15 16:16:40 UTC (rev 13970) @@ -35,23 +35,23 @@ raise RuntimeError, "Incorrect value for CONSTANT3" end -if not Ruby_naming::methods.include?("constant4") +if not (Ruby_naming::methods.include?("constant4") || Ruby_naming::methods.include?(:constant4)) raise RuntimeError, "Incorrect mapping for constant4" end -if not Ruby_naming::methods.include?("constant5") +if not (Ruby_naming::methods.include?("constant5") || Ruby_naming::methods.include?(:constant5)) raise RuntimeError, "Incorrect mapping for constant5" end -if not Ruby_naming::methods.include?("constant6") +if not (Ruby_naming::methods.include?("constant6") || Ruby_naming::methods.include?(:constant6)) raise RuntimeError, "Incorrect mapping for constant6" end -if not Ruby_naming::TestConstants.instance_methods.include?("constant7") +if not (Ruby_naming::TestConstants.instance_methods.include?("constant7") || Ruby_naming::TestConstants.instance_methods.include?(:constant7)) raise RuntimeError, "Incorrect mapping for constant7" end -if not Ruby_naming::TestConstants.methods.include?("constant8") +if not (Ruby_naming::TestConstants.methods.include?("constant8") || Ruby_naming::TestConstants.methods.include?(:constant8)) raise RuntimeError, "Incorrect mapping for constant8" end @@ -64,7 +64,7 @@ raise RuntimeError, "Incorrect value for CONSTANT10" end -if not Ruby_naming::methods.include?("constant11") +if not (Ruby_naming::methods.include?("constant11") || Ruby_naming::methods.include?(:constant11)) raise RuntimeError, "Incorrect mapping for constant11" end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-15 23:41:07
|
Revision: 13973 http://swig.svn.sourceforge.net/swig/?rev=13973&view=rev Author: wsfulton Date: 2012-12-15 23:41:01 +0000 (Sat, 15 Dec 2012) Log Message: ----------- Detect mono C# compiler on newer linux distributions Modified Paths: -------------- trunk/Examples/test-suite/csharp/Makefile.in trunk/configure.in Modified: trunk/Examples/test-suite/csharp/Makefile.in =================================================================== --- trunk/Examples/test-suite/csharp/Makefile.in 2012-12-15 18:33:02 UTC (rev 13972) +++ trunk/Examples/test-suite/csharp/Makefile.in 2012-12-15 23:41:01 UTC (rev 13973) @@ -72,7 +72,7 @@ $(MAKE) -f $*/$(top_builddir)/$(EXAMPLES)/Makefile \ CSHARPFLAGS='-nologo -debug+ $(CSHARPFLAGSSPECIAL) -out:$*_runme.exe' \ CSHARPSRCS='`$(CSHARPCYGPATH_W) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX)` `find $* -name "*.cs" -exec $(CSHARPCYGPATH_W) "{}" \+`' csharp_compile && \ - env LD_LIBRARY_PATH="$*:$$LD_LIBRARY_PATH" PATH="$*:$$PATH" SHLIB_PATH="$*:$$SHLIB_PATH" DYLD_FALLBACK_LIBRARY_PATH= $(RUNTOOL) $(INTERPRETER) $(INTERPRETER_FLAGS) $*_runme.exe; \ + env LD_LIBRARY_PATH="$*:$$LD_LIBRARY_PATH" PATH="$*:$$PATH" SHLIB_PATH="$*:$$SHLIB_PATH" DYLD_FALLBACK_LIBRARY_PATH= $(RUNTOOL) $(INTERPRETER) $(INTERPRETER_FLAGS) ./$*_runme.exe; \ else \ cd $* && \ $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile \ Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2012-12-15 18:33:02 UTC (rev 13972) +++ trunk/configure.in 2012-12-15 23:41:01 UTC (rev 13973) @@ -1771,19 +1771,19 @@ case $host in *-*-cygwin* | *-*-mingw*) # prefer Mono gmcs (.NET 2.0) over mcs (.NET 1.1) - note mcs-1.2.3 has major pinvoke bug - AC_CHECK_PROGS(CSHARPCOMPILER, csc gmcs mcs cscc) + AC_CHECK_PROGS(CSHARPCOMPILER, csc mono-csc gmcs mcs cscc) if test -n "$CSHARPCOMPILER" && test "$CSHARPCOMPILER" = "csc" ; then AC_MSG_CHECKING(whether csc is the Microsoft CSharp compiler) csc 2>/dev/null | grep "C#" > /dev/null || CSHARPCOMPILER="" if test -z "$CSHARPCOMPILER" ; then AC_MSG_RESULT(no) - AC_CHECK_PROGS(CSHARPCOMPILER, gmcs mcs cscc) + AC_CHECK_PROGS(CSHARPCOMPILER, mono-csc gmcs mcs cscc) else AC_MSG_RESULT(yes) fi fi ;; - *)AC_CHECK_PROGS(CSHARPCOMPILER, gmcs mcs cscc);; + *)AC_CHECK_PROGS(CSHARPCOMPILER, mono-csc gmcs mcs cscc);; esac else CSHARPCOMPILER="$CSHARPCOMPILERBIN" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-16 13:56:57
|
Revision: 13976 http://swig.svn.sourceforge.net/swig/?rev=13976&view=rev Author: wsfulton Date: 2012-12-16 13:56:50 +0000 (Sun, 16 Dec 2012) Log Message: ----------- Fix garbage line number and empty file name reporting for some '}' or ')' error messages Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/errors/expected.log trunk/Examples/test-suite/errors/make.sh trunk/Source/CParse/cscanner.c trunk/Source/Swig/scanner.c Added Paths: ----------- trunk/Examples/test-suite/errors/cpp_missing_rparenthesis.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-16 08:38:22 UTC (rev 13975) +++ trunk/CHANGES.current 2012-12-16 13:56:50 UTC (rev 13976) @@ -5,6 +5,10 @@ Version 2.0.9 (in progress) =========================== +2012-12-16: wsfulton + Fix garbage line number / empty file name reporting for some missing + '}' or ')' error messages. + 2012-12-15: kkaempf [Ruby] Apply patch 3530444, Class#methods and Class#constants returns array of symbols in Ruby 1.9+ Added: trunk/Examples/test-suite/errors/cpp_missing_rparenthesis.i =================================================================== --- trunk/Examples/test-suite/errors/cpp_missing_rparenthesis.i (rev 0) +++ trunk/Examples/test-suite/errors/cpp_missing_rparenthesis.i 2012-12-16 13:56:50 UTC (rev 13976) @@ -0,0 +1,13 @@ +%module xxx + +%inline %{ +class Klass { +Klass(int i) : m_i( +{ +} +}; +%} + +void something() { +} + Modified: trunk/Examples/test-suite/errors/expected.log =================================================================== --- trunk/Examples/test-suite/errors/expected.log 2012-12-16 08:38:22 UTC (rev 13975) +++ trunk/Examples/test-suite/errors/expected.log 2012-12-16 13:56:50 UTC (rev 13976) @@ -46,7 +46,7 @@ c_long_short.i:6: Error: Extra short specifier. :::::::::::::::::::::::::::::::: c_missing_rbrace.i ::::::::::::::::::::::::::::::::::: -:168430090: Error: Missing '}'. Reached end of input. +c_missing_rbrace.i:3: Error: Missing '}'. Reached end of input. c_missing_rbrace.i:3: Error: Syntax error in input(1). :::::::::::::::::::::::::::::::: c_missing_semi.i ::::::::::::::::::::::::::::::::::: @@ -296,6 +296,10 @@ cpp_macro_locator.i:101: Warning 509: Overloaded method overload5(int const *) effectively ignored, cpp_macro_locator.i:100: Warning 509: as it is shadowed by overload5(int *). +:::::::::::::::::::::::::::::::: cpp_missing_rparenthesis.i ::::::::::::::::::::::::::::::::::: +cpp_missing_rparenthesis.i:5: Error: Missing ')'. Reached end of input. +cpp_missing_rparenthesis.i:5: Error: Syntax error in input(3). + :::::::::::::::::::::::::::::::: cpp_missing_rtemplate.i ::::::::::::::::::::::::::::::::::: cpp_missing_rtemplate.i:4: Error: Syntax error in input(1). Modified: trunk/Examples/test-suite/errors/make.sh =================================================================== --- trunk/Examples/test-suite/errors/make.sh 2012-12-16 08:38:22 UTC (rev 13975) +++ trunk/Examples/test-suite/errors/make.sh 2012-12-16 13:56:50 UTC (rev 13976) @@ -70,6 +70,7 @@ cpp_inline_namespace cpp_inherit cpp_macro_locator +cpp_missing_rparenthesis cpp_missing_rtemplate cpp_namespace_alias cpp_namespace_aliasnot Modified: trunk/Source/CParse/cscanner.c =================================================================== --- trunk/Source/CParse/cscanner.c 2012-12-16 08:38:22 UTC (rev 13975) +++ trunk/Source/CParse/cscanner.c 2012-12-16 13:56:50 UTC (rev 13976) @@ -103,10 +103,11 @@ * ----------------------------------------------------------------------------- */ void skip_balanced(int startchar, int endchar) { + int start_line = Scanner_line(scan); Clear(scanner_ccode); if (Scanner_skip_balanced(scan,startchar,endchar) < 0) { - Swig_error(Scanner_file(scan),Scanner_errline(scan), "Missing '%c'. Reached end of input.\n", endchar); + Swig_error(cparse_file, start_line, "Missing '%c'. Reached end of input.\n", endchar); return; } Modified: trunk/Source/Swig/scanner.c =================================================================== --- trunk/Source/Swig/scanner.c 2012-12-16 08:38:22 UTC (rev 13975) +++ trunk/Source/Swig/scanner.c 2012-12-16 13:56:50 UTC (rev 13976) @@ -65,6 +65,7 @@ s->text = NewStringEmpty(); s->str = 0; s->error = 0; + s->error_line = 0; s->freeze_line = 0; return s; } @@ -104,6 +105,12 @@ s->nexttoken = -1; s->start_line = 0; s->yylen = 0; + /* Should these be cleared too? + s->idstart; + s->file; + s->error_line; + s->freeze_line; + */ } /* ----------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-12-16 14:39:45
|
Revision: 13977 http://swig.svn.sourceforge.net/swig/?rev=13977&view=rev Author: wsfulton Date: 2012-12-16 14:39:37 +0000 (Sun, 16 Dec 2012) Log Message: ----------- 2.0.9 release notes and date Modified Paths: -------------- trunk/ANNOUNCE trunk/CHANGES.current trunk/Doc/Manual/Sections.html trunk/README trunk/RELEASENOTES Modified: trunk/ANNOUNCE =================================================================== --- trunk/ANNOUNCE 2012-12-16 13:56:50 UTC (rev 13976) +++ trunk/ANNOUNCE 2012-12-16 14:39:37 UTC (rev 13977) @@ -1,4 +1,4 @@ -*** ANNOUNCE: SWIG 2.0.9 (in progress) *** +*** ANNOUNCE: SWIG 2.0.9 (16 December 2012) *** http://www.swig.org Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-12-16 13:56:50 UTC (rev 13976) +++ trunk/CHANGES.current 2012-12-16 14:39:37 UTC (rev 13977) @@ -2,11 +2,11 @@ See the CHANGES file for changes in older releases. See the RELEASENOTES file for a summary of changes in each release. -Version 2.0.9 (in progress) -=========================== +Version 2.0.9 (16 December 2012) +================================ 2012-12-16: wsfulton - Fix garbage line number / empty file name reporting for some missing + Fix garbage line number / empty file name reporting for some missing '}' or ')' error messages. 2012-12-15: kkaempf @@ -19,7 +19,7 @@ 2012-12-14: kkaempf [Ruby] Applied patches #3530442 and 3530443 to adapt compile and runtime include - pathes to match Ruby 1.9+ + paths to match Ruby 1.9+ 2012-12-14: wsfulton [CFFI] Fix #3161614 - Some string constants are incorrect Modified: trunk/Doc/Manual/Sections.html =================================================================== --- trunk/Doc/Manual/Sections.html 2012-12-16 13:56:50 UTC (rev 13976) +++ trunk/Doc/Manual/Sections.html 2012-12-16 14:39:37 UTC (rev 13977) @@ -6,7 +6,7 @@ <body bgcolor="#ffffff"> <H1><a name="Sections"></a>SWIG-2.0 Documentation</H1> -Last update : SWIG-2.0.9 (in progress) +Last update : SWIG-2.0.9 (16 December 2012) <H2>Sections</H2> Modified: trunk/README =================================================================== --- trunk/README 2012-12-16 13:56:50 UTC (rev 13976) +++ trunk/README 2012-12-16 14:39:37 UTC (rev 13977) @@ -1,6 +1,6 @@ SWIG (Simplified Wrapper and Interface Generator) -Version: 2.0.9 (in progress) +Version: 2.0.9 (16 December 2012) Tagline: SWIG is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, Ocaml, Lua, Modified: trunk/RELEASENOTES =================================================================== --- trunk/RELEASENOTES 2012-12-16 13:56:50 UTC (rev 13976) +++ trunk/RELEASENOTES 2012-12-16 14:39:37 UTC (rev 13977) @@ -4,6 +4,12 @@ Release Notes ============= +SWIG-2.0.9 summary: +- Improved typemap matching. +- Ruby 1.9 support is much improved. +- Various bug fixes and minor improvements in C#, CFFI, Go, Java, + Modula3, Octave, Perl, Python, R, Ruby, Tcl and in ccache-swig. + SWIG-2.0.8 summary: - Fix a couple of regressions introduced in 2.0.5 and 2.0.7. - Improved using declarations and using directives support. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |