From 2e50998bd0f1b4f4b2ca271c21fea4cdad43ccdd Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Sun, 28 Mar 2004 14:04:36 +0000 Subject: [PATCH] fixes some compiler warnings, and add better support for member variables (in C++/python). git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5793 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Source/Swig/cwrap.c | 23 ++++++++++++++++++++--- Source/Swig/misc.c | 6 ++---- Source/Swig/stype.c | 1 - Source/Swig/swig.h | 3 ++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Source/Swig/cwrap.c b/Source/Swig/cwrap.c index 0fd6106b9..c4eb45cff 100644 --- a/Source/Swig/cwrap.c +++ b/Source/Swig/cwrap.c @@ -85,13 +85,20 @@ Swig_clocal(SwigType *t, String_or_char *name, String_or_char *value) { * This function only converts user defined types to pointers. * ----------------------------------------------------------------------------- */ +static int varref = 0; String * Swig_wrapped_var_type(SwigType *t) { SwigType *ty; ty = Copy(t); if (SwigType_isclass(t)) { - SwigType_add_pointer(ty); + if (varref) { + SwigType_add_qualifier(ty, "const"); + SwigType_add_reference(ty); + } else { + SwigType_add_qualifier(ty, "const"); + SwigType_add_pointer(ty); + } } return ty; } @@ -108,7 +115,12 @@ Swig_wrapped_var_deref(SwigType *t, String_or_char *name) { static String * Swig_wrapped_var_assign(SwigType *t, const String_or_char *name) { if (SwigType_isclass(t)) { - return NewStringf("&%s",name); + if (varref) { + String* ty = SwigType_namestr(t); + return NewStringf("(const %s&)%s",ty, name); + } else { + return NewStringf("&%s",name); + } } else { return SwigType_lcaststr(t,name); } @@ -562,7 +574,8 @@ Swig_cmemberset_call(String_or_char *name, SwigType *type, String_or_char *self) * ----------------------------------------------------------------------------- */ String * -Swig_cmemberget_call(const String_or_char *name, SwigType *t, String_or_char *self) { +Swig_cmemberget_call(const String_or_char *name, SwigType *t, + String_or_char *self) { String *func; if (!self) self = NewString("(this)->"); else self = NewString(self); @@ -919,6 +932,7 @@ Swig_MembersetToFunction(Node *n, String *classname, int flags) { String *membername; String *mangled; String *self= 0; + varref = flags & CWRAP_VAR_REFERENCE; if (flags & CWRAP_SMART_POINTER) { self = NewString("(*this)->"); @@ -964,6 +978,7 @@ Swig_MembersetToFunction(Node *n, String *classname, int flags) { Delete(membername); Delete(mangled); Delete(self); + varref = 0; return SWIG_OK; } @@ -983,6 +998,7 @@ Swig_MembergetToFunction(Node *n, String *classname, int flags) { String *membername; String *mangled; String *self = 0; + varref = flags & CWRAP_VAR_REFERENCE; if (flags & CWRAP_SMART_POINTER) { self = NewString("(*this)->"); @@ -1020,6 +1036,7 @@ Swig_MembergetToFunction(Node *n, String *classname, int flags) { Delete(ty); Delete(membername); Delete(mangled); + varref = 0; return SWIG_OK; } diff --git a/Source/Swig/misc.c b/Source/Swig/misc.c index 19ab057b4..dcf9cf98f 100644 --- a/Source/Swig/misc.c +++ b/Source/Swig/misc.c @@ -211,7 +211,7 @@ String *Swig_string_typecode(String *s) { * A_get_value. * ----------------------------------------------------------------------------- */ -String *Swig_string_mangle(String *s) { +String *Swig_string_mangle(const String *s) { #if 0 /* old mangling, not suitable for using in macros */ String *t = Copy(s); @@ -241,7 +241,7 @@ String *Swig_string_mangle(String *s) { Printf(result,"_SS_"); } space = 0; - Printf(result,"%c",c); + Printf(result,"%c",(int)c); } else { if (isspace((int)c)) { @@ -267,8 +267,6 @@ String *Swig_string_mangle(String *s) { Append(result,"_"); ++pc; ++pc; continue; - } else { - c = 's'; } break; case '*': diff --git a/Source/Swig/stype.c b/Source/Swig/stype.c index de5b968ea..b48ad035a 100644 --- a/Source/Swig/stype.c +++ b/Source/Swig/stype.c @@ -758,7 +758,6 @@ String *SwigType_lcaststr(SwigType *s, const String_or_char *name) { } String *SwigType_manglestr_default(SwigType *s) { - char *c; String *result,*base,*mbase; SwigType *lt, *ltp; SwigType *ss = 0; diff --git a/Source/Swig/swig.h b/Source/Swig/swig.h index 0acb58806..38a5b660f 100644 --- a/Source/Swig/swig.h +++ b/Source/Swig/swig.h @@ -406,7 +406,7 @@ extern void Swig_feature_set(Hash *features, const String_or_char *name, Sw extern char *Swig_copy_string(const char *c); extern void Swig_banner(File *f); extern String *Swig_string_escape(String *s); -extern String *Swig_string_mangle(String *s); +extern String *Swig_string_mangle(const String *s); extern String *Swig_scopename_prefix(String *s); extern String *Swig_scopename_last(String *s); extern String *Swig_scopename_first(String *s); @@ -463,6 +463,7 @@ extern int Swig_VarsetToFunction(Node *n); #define CWRAP_EXTEND 0x01 #define CWRAP_SMART_POINTER 0x02 +#define CWRAP_VAR_REFERENCE 0x04 /* --- Director Helpers --- */ extern Node *Swig_methodclass(Node *n);