summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Jezabek <jezabek@poczta.onet.pl>2009-09-03 21:49:39 +0000
committerJan Jezabek <jezabek@poczta.onet.pl>2009-09-03 21:49:39 +0000
commitdbcffbb6d8be5a1080b0336bf0d2e62e8854af27 (patch)
tree81c76a19c0003e178f3fc4b771dcebbca6d50bc7
parent492d1fac78800b83e819b4f41c30d4ac625b66af (diff)
downloadswig-dbcffbb6d8be5a1080b0336bf0d2e62e8854af27.tar.gz
Make the COM module case-preserving. Make preliminary changes to lang.cxx for case-insensitive language support.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-jezabek@11684 626c5289-ae23-0410-ae9c-e8d60b6d4f22
-rw-r--r--Source/Modules/com.cxx40
-rw-r--r--Source/Modules/lang.cxx73
2 files changed, 81 insertions, 32 deletions
diff --git a/Source/Modules/com.cxx b/Source/Modules/com.cxx
index f9125da29..8be564288 100644
--- a/Source/Modules/com.cxx
+++ b/Source/Modules/com.cxx
@@ -264,7 +264,7 @@ public:
if (proxy_flag) {
Node *n = classLookup(t);
if (n) {
- return Getattr(n, "sym:name");
+ return Getattr(n, "sym:casePreservingName");
}
}
return NULL;
@@ -622,7 +622,7 @@ public:
* ----------------------------------------------------------------------------- */
virtual int functionWrapper(Node *n) {
- String *symname = Getattr(n, "sym:name");
+ String *symname = Getattr(n, "sym:casePreservingName");
SwigType *t = Getattr(n, "type");
ParmList *l = Getattr(n, "parms");
String *tm;
@@ -882,7 +882,7 @@ public:
virtual int globalvariableHandler(Node *n) {
generate_property_declaration_flag = true;
- variable_name = Getattr(n, "sym:name");
+ variable_name = Getattr(n, "sym:casePreservingName");
global_variable_flag = true;
int ret = Language::globalvariableHandler(n);
global_variable_flag = false;
@@ -902,7 +902,7 @@ public:
if (!wrapping_member_flag) {
global_variable_flag = true;
- variable_name = Getattr(n, "sym:name");
+ variable_name = Getattr(n, "sym:casePreservingName");
} else {
static_flag = true;
}
@@ -926,9 +926,9 @@ public:
if (proxy_flag) {
// FIXME: String *overloaded_name = getOverloadedName(n);
- String *overloaded_name = Getattr(n, "sym:name");
+ String *overloaded_name = Getattr(n, "sym:casePreservingName");
String *intermediary_function_name = Swig_name_member(proxy_class_name, overloaded_name);
- Setattr(n, "proxyfuncname", Getattr(n, "sym:name"));
+ Setattr(n, "proxyfuncname", Getattr(n, "sym:casePreservingName"));
proxyClassFunctionHandler(n);
Delete(overloaded_name);
}
@@ -942,7 +942,7 @@ public:
virtual int membervariableHandler(Node *n) {
generate_property_declaration_flag = true;
- variable_name = Getattr(n, "sym:name");
+ variable_name = Getattr(n, "sym:casePreservingName");
wrapping_member_flag = true;
variable_wrapper_flag = true;
Language::membervariableHandler(n);
@@ -962,7 +962,7 @@ public:
bool static_const_member_flag = (Getattr(n, "value") == 0);
generate_property_declaration_flag = true;
- variable_name = Getattr(n, "sym:name");
+ variable_name = Getattr(n, "sym:casePreservingName");
wrapping_member_flag = true;
static_flag = true;
Language::staticmembervariableHandler(n);
@@ -979,7 +979,7 @@ public:
virtual int memberconstantHandler(Node *n) {
- variable_name = Getattr(n, "sym:name");
+ variable_name = Getattr(n, "sym:casePreservingName");
wrapping_member_flag = true;
Language::memberconstantHandler(n);
wrapping_member_flag = false;
@@ -1050,17 +1050,17 @@ public:
if (proxy_flag && global_variable_flag) {
func_name = NewString("");
- setter_flag = (Cmp(Getattr(n, "sym:name"), Swig_name_set(variable_name)) == 0);
+ setter_flag = (Cmp(Getattr(n, "sym:casePreservingName"), Swig_name_set(variable_name)) == 0);
Printf(func_name, "%s", variable_name);
if (setter_flag) {
- Printf(function_code, " [ propput ]\n");
+ Printf(function_code, " [ propput ]\n");
} else {
- Printf(function_code, " [ propget ]\n");
+ Printf(function_code, " [ propget ]\n");
}
} else {
/* FIXME: ... */
- func_name = Getattr(n, "sym:name");
+ func_name = Getattr(n, "sym:casePreservingName");
}
if (hresult_flag) {
@@ -1204,7 +1204,7 @@ public:
" HRESULT %s([ retval, out ] I%sStatic **SWIG_result);\n",
proxy_class_name, proxy_class_name);
- Printf(module_class_vtable_code, ",\n (SWIG_funcptr) _wrap_%sStatic");
+ Printf(module_class_vtable_code, ",\n (SWIG_funcptr) _wrap_%sStatic", proxy_class_name);
Printf(f_wrappers, "extern GUID IID_I%sStatic;\n\n", proxy_class_name);
Printf(f_wrappers, "extern SWIG_funcptr _wrap%sStatic_vtable[];\n\n", proxy_class_name);
@@ -1379,7 +1379,7 @@ public:
virtual int classHandler(Node *n) {
if (proxy_flag) {
- proxy_class_name = NewString(Getattr(n, "sym:name"));
+ proxy_class_name = NewString(Getattr(n, "sym:casePreservingName"));
List *bases = NULL;
if (!addSymbol(proxy_class_name, n))
@@ -1466,7 +1466,7 @@ public:
base = Next(base);
if (base.item) {
- Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_I%s)", Getattr(base.item, "sym:name"));
+ Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_I%s)", Getattr(base.item, "sym:casePreservingName"));
/* Get next base */
bases = Getattr(base.item, "bases");
} else {
@@ -1539,7 +1539,7 @@ public:
base = Next(base);
if (base.item) {
- Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_I%s)", Getattr(base.item, "sym:name"));
+ Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_I%s)", Getattr(base.item, "sym:casePreservingName"));
/* Get next base */
bases = Getattr(base.item, "bases");
} else {
@@ -1758,9 +1758,9 @@ public:
if (proxy_flag) {
// FIXME: String *overloaded_name = getOverloadedName(n);
- String *overloaded_name = Getattr(n, "sym:name");
+ String *overloaded_name = Getattr(n, "sym:casePreservingName");
String *intermediary_function_name = Swig_name_member(proxy_class_name, overloaded_name);
- Setattr(n, "proxyfuncname", Getattr(n, "sym:name"));
+ Setattr(n, "proxyfuncname", Getattr(n, "sym:casePreservingName"));
proxyClassFunctionHandler(n);
Delete(overloaded_name);
}
@@ -1875,7 +1875,7 @@ public:
if (wrapping_member_flag && !enum_constant_flag) {
// Properties
- setter_flag = (Cmp(Getattr(n, "sym:name"), Swig_name_set(Swig_name_member(proxy_class_name, variable_name))) == 0);
+ setter_flag = (Cmp(Getattr(n, "sym:casePreservingName"), Swig_name_set(Swig_name_member(proxy_class_name, variable_name))) == 0);
if (setter_flag) {
Printf(function_code, " [ propput ]\n");
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;