C# char wrappers fixes for enum values, static const member char values and %csconst
Use hex escaping for char values used as C# constants
This commit is contained in:
parent
391a3cf00a
commit
5fb6537f69
4 changed files with 56 additions and 10 deletions
|
|
@ -24,8 +24,8 @@
|
||||||
|
|
||||||
#if defined(SWIGJAVA)
|
#if defined(SWIGJAVA)
|
||||||
%javaconst(1);
|
%javaconst(1);
|
||||||
//#elif SWIGCSHARP
|
#elif SWIGCSHARP
|
||||||
//%csconst(1);
|
%csconst(1);
|
||||||
#elif SWIGD
|
#elif SWIGD
|
||||||
%dmanifestconst;
|
%dmanifestconst;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@ struct CharTestClass {
|
||||||
|
|
||||||
#if defined(SWIGJAVA)
|
#if defined(SWIGJAVA)
|
||||||
%javaconst(1);
|
%javaconst(1);
|
||||||
//#elif SWIGCSHARP
|
#elif SWIGCSHARP
|
||||||
//%csconst(1);
|
%csconst(1);
|
||||||
#elif SWIGD
|
#elif SWIGD
|
||||||
%dmanifestconst;
|
%dmanifestconst;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1309,7 +1309,7 @@ public:
|
||||||
const char *val = Equal(Getattr(n, "enumvalue"), "true") ? "1" : "0";
|
const char *val = Equal(Getattr(n, "enumvalue"), "true") ? "1" : "0";
|
||||||
Setattr(n, "enumvalue", val);
|
Setattr(n, "enumvalue", val);
|
||||||
} else if (swigtype == T_CHAR) {
|
} else if (swigtype == T_CHAR) {
|
||||||
String *val = NewStringf("'%s'", Getattr(n, "enumvalue"));
|
String *val = NewStringf("'%(hexescape)s'", Getattr(n, "enumvalue"));
|
||||||
Setattr(n, "enumvalue", val);
|
Setattr(n, "enumvalue", val);
|
||||||
Delete(val);
|
Delete(val);
|
||||||
}
|
}
|
||||||
|
|
@ -1433,6 +1433,7 @@ public:
|
||||||
virtual int constantWrapper(Node *n) {
|
virtual int constantWrapper(Node *n) {
|
||||||
String *symname = Getattr(n, "sym:name");
|
String *symname = Getattr(n, "sym:name");
|
||||||
SwigType *t = Getattr(n, "type");
|
SwigType *t = Getattr(n, "type");
|
||||||
|
SwigType *valuetype = Getattr(n, "valuetype");
|
||||||
ParmList *l = Getattr(n, "parms");
|
ParmList *l = Getattr(n, "parms");
|
||||||
String *tm;
|
String *tm;
|
||||||
String *return_type = NewString("");
|
String *return_type = NewString("");
|
||||||
|
|
@ -1485,13 +1486,15 @@ public:
|
||||||
Swig_warning(WARN_CSHARP_TYPEMAP_CSWTYPE_UNDEF, input_file, line_number, "No cstype typemap defined for %s\n", SwigType_str(t, 0));
|
Swig_warning(WARN_CSHARP_TYPEMAP_CSWTYPE_UNDEF, input_file, line_number, "No cstype typemap defined for %s\n", SwigType_str(t, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default (octal) escaping is no good - change to hex escaped value
|
||||||
|
String *hexescaped_value = Getattr(n, "rawvalue") ? NewStringf("%(hexescape)s", Getattr(n, "rawvalue")) : 0;
|
||||||
// Add the stripped quotes back in
|
// Add the stripped quotes back in
|
||||||
String *new_value = NewString("");
|
String *new_value = NewString("");
|
||||||
if (SwigType_type(t) == T_STRING) {
|
if (SwigType_type(t) == T_STRING) {
|
||||||
Printf(new_value, "\"%s\"", Copy(Getattr(n, "value")));
|
Printf(new_value, "\"%s\"", hexescaped_value ? hexescaped_value : Copy(Getattr(n, "value")));
|
||||||
Setattr(n, "value", new_value);
|
Setattr(n, "value", new_value);
|
||||||
} else if (SwigType_type(t) == T_CHAR) {
|
} else if (SwigType_type(t) == T_CHAR) {
|
||||||
Printf(new_value, "\'%s\'", Copy(Getattr(n, "value")));
|
Printf(new_value, "\'%s\'", hexescaped_value ? hexescaped_value : Copy(Getattr(n, "value")));
|
||||||
Setattr(n, "value", new_value);
|
Setattr(n, "value", new_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1532,10 +1535,14 @@ public:
|
||||||
} else {
|
} else {
|
||||||
// Alternative constant handling will use the C syntax to make a true C# constant and hope that it compiles as C# code
|
// Alternative constant handling will use the C syntax to make a true C# constant and hope that it compiles as C# code
|
||||||
if (Getattr(n, "wrappedasconstant")) {
|
if (Getattr(n, "wrappedasconstant")) {
|
||||||
if (SwigType_type(t) == T_CHAR)
|
if (SwigType_type(t) == T_CHAR) {
|
||||||
Printf(constants_code, "\'%s\';\n", Getattr(n, "staticmembervariableHandler:value"));
|
if (SwigType_type(valuetype) == T_CHAR)
|
||||||
else
|
Printf(constants_code, "\'%(hexescape)s\';\n", Getattr(n, "staticmembervariableHandler:value"));
|
||||||
|
else
|
||||||
|
Printf(constants_code, "(char)%s;\n", Getattr(n, "staticmembervariableHandler:value"));
|
||||||
|
} else {
|
||||||
Printf(constants_code, "%s;\n", Getattr(n, "staticmembervariableHandler:value"));
|
Printf(constants_code, "%s;\n", Getattr(n, "staticmembervariableHandler:value"));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Printf(constants_code, "%s;\n", Getattr(n, "value"));
|
Printf(constants_code, "%s;\n", Getattr(n, "value"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,7 @@ int Swig_storage_isstatic(Node *n) {
|
||||||
* Swig_string_escape()
|
* Swig_string_escape()
|
||||||
*
|
*
|
||||||
* Takes a string object and produces a string with escape codes added to it.
|
* Takes a string object and produces a string with escape codes added to it.
|
||||||
|
* Octal escaping is used.
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
String *Swig_string_escape(String *s) {
|
String *Swig_string_escape(String *s) {
|
||||||
|
|
@ -342,6 +343,43 @@ String *Swig_string_escape(String *s) {
|
||||||
return ns;
|
return ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Swig_string_hexescape()
|
||||||
|
*
|
||||||
|
* Takes a string object and produces a string with escape codes added to it.
|
||||||
|
* Hex escaping is used.
|
||||||
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
String *Swig_string_hexescape(String *s) {
|
||||||
|
String *ns;
|
||||||
|
int c;
|
||||||
|
ns = NewStringEmpty();
|
||||||
|
|
||||||
|
while ((c = Getc(s)) != EOF) {
|
||||||
|
if (c == '\n') {
|
||||||
|
Printf(ns, "\\n");
|
||||||
|
} else if (c == '\r') {
|
||||||
|
Printf(ns, "\\r");
|
||||||
|
} else if (c == '\t') {
|
||||||
|
Printf(ns, "\\t");
|
||||||
|
} else if (c == '\\') {
|
||||||
|
Printf(ns, "\\\\");
|
||||||
|
} else if (c == '\'') {
|
||||||
|
Printf(ns, "\\'");
|
||||||
|
} else if (c == '\"') {
|
||||||
|
Printf(ns, "\\\"");
|
||||||
|
} else if (c == ' ') {
|
||||||
|
Putc(c, ns);
|
||||||
|
} else if (!isgraph(c)) {
|
||||||
|
if (c < 0)
|
||||||
|
c += UCHAR_MAX + 1;
|
||||||
|
Printf(ns, "\\x%X", c);
|
||||||
|
} else {
|
||||||
|
Putc(c, ns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ns;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Swig_string_upper()
|
* Swig_string_upper()
|
||||||
|
|
@ -1392,6 +1430,7 @@ String *Swig_pcre_version(void) {
|
||||||
void Swig_init() {
|
void Swig_init() {
|
||||||
/* Set some useful string encoding methods */
|
/* Set some useful string encoding methods */
|
||||||
DohEncoding("escape", Swig_string_escape);
|
DohEncoding("escape", Swig_string_escape);
|
||||||
|
DohEncoding("hexescape", Swig_string_hexescape);
|
||||||
DohEncoding("upper", Swig_string_upper);
|
DohEncoding("upper", Swig_string_upper);
|
||||||
DohEncoding("lower", Swig_string_lower);
|
DohEncoding("lower", Swig_string_lower);
|
||||||
DohEncoding("title", Swig_string_title);
|
DohEncoding("title", Swig_string_title);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue