summaryrefslogtreecommitdiff
path: root/Source/Modules/lang.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Modules/lang.cxx')
-rw-r--r--Source/Modules/lang.cxx73
1 files changed, 61 insertions, 12 deletions
diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx
index 38658ce9c..6a42111f4 100644
--- a/Source/Modules/lang.cxx
+++ b/Source/Modules/lang.cxx
@@ -1379,15 +1379,22 @@ int Language::globalvariableHandler(Node *n) {
int Language::membervariableHandler(Node *n) {
- Swig_require("membervariableHandler", n, "*name", "*sym:name", "*type", NIL);
+ Swig_require("membervariableHandler", n, "*name", "*sym:name", "*type", "?sym:casePreservingName", NIL);
Swig_save("membervariableHandler", n, "parms", NIL);
String *name = Getattr(n, "name");
String *symname = Getattr(n, "sym:name");
SwigType *type = Getattr(n, "type");
+ String *case_preserving_name = 0;
+ int case_insensitive_target = Swig_symbol_get_case_insensitive_target();
+
+ if (case_insensitive_target)
+ case_preserving_name = Getattr(n, "sym:casePreservingName");
if (!AttributeFunctionGet) {
- String *mname = Swig_name_member(ClassPrefix, symname);
+ String *mname = case_insensitive_target ?
+ Swig_name_member(ClassPrefix, case_preserving_name) :
+ Swig_name_member(ClassPrefix, symname);
String *mrename_get = Swig_name_get(mname);
String *mrename_set = Swig_name_set(mname);
Delete(mname);
@@ -1456,7 +1463,14 @@ int Language::membervariableHandler(Node *n) {
Delete(target);
if (make_set_wrapper) {
- Setattr(n, "sym:name", mrename_set);
+ if (!case_insensitive_target) {
+ Setattr(n, "sym:name", mrename_set);
+ } else {
+ String *mrename_set_lower = Swig_string_lower(mrename_set);
+ Setattr(n, "sym:name", mrename_set_lower);
+ Setattr(n, "sym:casePreservingName", mrename_set);
+ Delete(mrename_set_lower);
+ }
functionWrapper(n);
} else {
SetFlag(n, "feature:immutable");
@@ -1465,6 +1479,8 @@ int Language::membervariableHandler(Node *n) {
Setattr(n, "type", type);
Setattr(n, "name", name);
Setattr(n, "sym:name", symname);
+ if (case_insensitive_target)
+ Setattr(n, "sym:casePreservingName", case_preserving_name);
/* Delete all attached typemaps and typemap attributes */
Iterator ki;
@@ -1479,7 +1495,14 @@ int Language::membervariableHandler(Node *n) {
if (is_non_virtual_protected_access(n))
flags = flags | CWRAP_ALL_PROTECTED_ACCESS;
Swig_MembergetToFunction(n, ClassType, flags);
- Setattr(n, "sym:name", mrename_get);
+ if (!case_insensitive_target) {
+ Setattr(n, "sym:name", mrename_get);
+ } else {
+ String *mrename_get_lower = Swig_string_lower(mrename_get);
+ Setattr(n, "sym:name", mrename_get_lower);
+ Setattr(n, "sym:casePreservingName", mrename_get);
+ Delete(mrename_get_lower);
+ }
Setattr(n, "memberget", "1");
functionWrapper(n);
}
@@ -2325,7 +2348,8 @@ int Language::classDeclaration(Node *n) {
String *symname = Getattr(n, "sym:name");
char *classname = tdname ? Char(tdname) : Char(name);
- char *iname = Char(symname);
+ char *iname = Swig_symbol_get_case_insensitive_target() ?
+ Char(Getattr(n, "sym:casePreservingName")) : Char(symname);
int strip = (tdname || CPlusPlus) ? 1 : 0;
@@ -2836,10 +2860,15 @@ int Language::constantWrapper(Node *n) {
* ---------------------------------------------------------------------- */
int Language::variableWrapper(Node *n) {
- Swig_require("variableWrapper", n, "*name", "*sym:name", "*type", "?parms", NIL);
+ Swig_require("variableWrapper", n, "*name", "*sym:name", "*type", "?parms", "?sym:casePreservingName", NIL);
String *symname = Getattr(n, "sym:name");
SwigType *type = Getattr(n, "type");
String *name = Getattr(n, "name");
+ String *case_preserving_name = 0;
+ int case_insensitive_target = Swig_symbol_get_case_insensitive_target();
+
+ if (case_insensitive_target)
+ case_preserving_name = Getattr(n, "sym:casePreservingName");
/* If no way to set variables. We simply create functions */
int assignable = is_assignable(n);
@@ -2852,9 +2881,18 @@ int Language::variableWrapper(Node *n) {
String *tm = Swig_typemap_lookup("globalin", n, name, 0);
Swig_VarsetToFunction(n, flags);
- String *sname = Swig_name_set(symname);
- Setattr(n, "sym:name", sname);
- Delete(sname);
+ if (!case_insensitive_target) {
+ String *sname = Swig_name_set(symname);
+ Setattr(n, "sym:name", sname);
+ Delete(sname);
+ } else {
+ String *sname = Swig_name_set(case_preserving_name);
+ String *sname_lower = Swig_string_lower(sname);
+ Setattr(n, "sym:name", sname_lower);
+ Setattr(n, "sym:casePreservingName", sname);
+ Delete(sname_lower);
+ Delete(sname);
+ }
if (!tm) {
if (SwigType_isarray(type)) {
@@ -2875,6 +2913,8 @@ int Language::variableWrapper(Node *n) {
}
/* Restore parameters */
Setattr(n, "sym:name", symname);
+ if (case_insensitive_target)
+ Setattr(n, "sym:casePreservingName", case_preserving_name);
Setattr(n, "type", type);
Setattr(n, "name", name);
@@ -2887,9 +2927,18 @@ int Language::variableWrapper(Node *n) {
}
Swig_VargetToFunction(n, flags);
- String *gname = Swig_name_get(symname);
- Setattr(n, "sym:name", gname);
- Delete(gname);
+ if (!case_insensitive_target) {
+ String *gname = Swig_name_get(symname);
+ Setattr(n, "sym:name", gname);
+ Delete(gname);
+ } else {
+ String *gname = Swig_name_get(case_preserving_name);
+ String *gname_lower = Swig_string_lower(gname);
+ Setattr(n, "sym:name", gname_lower);
+ Setattr(n, "sym:casePreservingName", gname);
+ Delete(gname_lower);
+ Delete(gname);
+ }
functionWrapper(n);
Swig_restore(n);
return SWIG_OK;