Merge from trunk
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-sploving@12270 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
commit
1842244c93
530 changed files with 22854 additions and 11740 deletions
|
|
@ -1709,6 +1709,8 @@ int ALLEGROCL::top(Node *n) {
|
|||
We don't need a dispatch function in the C++ wrapper
|
||||
code; we want it over on the lisp side. */
|
||||
|
||||
#define Swig_overload_rank Allegrocl_swig_overload_rank
|
||||
|
||||
#define MAX_OVERLOAD 256
|
||||
|
||||
/* Overload "argc" and "argv" */
|
||||
|
|
|
|||
|
|
@ -824,9 +824,12 @@ Allocate():
|
|||
int isconst = 0;
|
||||
Delete(SwigType_pop(type));
|
||||
if (SwigType_isconst(type)) {
|
||||
isconst = 1;
|
||||
isconst = !Getattr(inclass, "allocate:smartpointermutable");
|
||||
Setattr(inclass, "allocate:smartpointerconst", "1");
|
||||
}
|
||||
else {
|
||||
Setattr(inclass, "allocate:smartpointermutable", "1");
|
||||
}
|
||||
List *methods = smart_pointer_methods(sc, 0, isconst);
|
||||
Setattr(inclass, "allocate:smartpointer", methods);
|
||||
Setattr(inclass, "allocate:smartpointerbase", base);
|
||||
|
|
@ -834,7 +837,6 @@ Allocate():
|
|||
/* Hmmm. The return value is not a pointer. If the type is a value
|
||||
or reference. We're going to chase it to see if another operator->()
|
||||
can be found */
|
||||
|
||||
if ((SwigType_check_decl(type, "")) || (SwigType_check_decl(type, "r."))) {
|
||||
Node *nn = Swig_symbol_clookup((char *) "operator ->", Getattr(sc, "symtab"));
|
||||
if (nn) {
|
||||
|
|
|
|||
|
|
@ -677,7 +677,7 @@ int CHICKEN::variableWrapper(Node *n) {
|
|||
String *wname = NewString("");
|
||||
String *mangle = NewString("");
|
||||
String *tm;
|
||||
String *tm2 = NewString("");;
|
||||
String *tm2 = NewString("");
|
||||
String *argnum = NewString("0");
|
||||
String *arg = NewString("argv[0]");
|
||||
Wrapper *f;
|
||||
|
|
|
|||
|
|
@ -941,7 +941,7 @@ public:
|
|||
|
||||
// below based on Swig_VargetToFunction()
|
||||
SwigType *ty = Swig_wrapped_var_type(Getattr(n, "type"), use_naturalvar_mode(n));
|
||||
Setattr(n, "wrap:action", NewStringf("result = (%s) %s;", SwigType_lstr(ty, 0), Getattr(n, "value")));
|
||||
Setattr(n, "wrap:action", NewStringf("result = (%s)(%s);", SwigType_lstr(ty, 0), Getattr(n, "value")));
|
||||
}
|
||||
|
||||
Swig_director_emit_dynamic_cast(n, f);
|
||||
|
|
@ -1282,6 +1282,13 @@ public:
|
|||
// Note that this is used in enumValue() amongst other places
|
||||
Setattr(n, "value", tmpValue);
|
||||
|
||||
// Deal with enum values that are bools
|
||||
if (SwigType_type(Getattr(n, "type")) == T_BOOL) {
|
||||
String *boolValue = NewStringf("%s ? 1 : 0", Getattr(n, "enumvalue"));
|
||||
Setattr(n, "enumvalue", boolValue);
|
||||
Delete(boolValue);
|
||||
}
|
||||
|
||||
{
|
||||
EnumFeature enum_feature = decodeEnumFeature(parent);
|
||||
|
||||
|
|
@ -1633,10 +1640,10 @@ public:
|
|||
base = Next(base);
|
||||
continue;
|
||||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n, "classtypeobj"), 0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item, "name"), 0);
|
||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#.\n", proxyclassname, baseclassname);
|
||||
String *proxyclassname = Getattr(n, "classtypeobj");
|
||||
String *baseclassname = Getattr(base.item, "name");
|
||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname));
|
||||
base = Next(base);
|
||||
}
|
||||
}
|
||||
|
|
@ -1654,9 +1661,9 @@ public:
|
|||
Delete(baseclass);
|
||||
baseclass = NULL;
|
||||
if (purebase_notderived)
|
||||
Swig_error(input_file, line_number, "The csbase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
|
||||
Swig_error(Getfile(n), Getline(n), "The csbase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
|
||||
} else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
|
||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#. "
|
||||
"Perhaps you need one of the 'replace' or 'notderived' attributes in the csbase typemap?\n", typemap_lookup_type, pure_baseclass);
|
||||
}
|
||||
|
|
@ -1697,10 +1704,10 @@ public:
|
|||
}
|
||||
if (tm && *Char(tm)) {
|
||||
if (!destruct_methodname) {
|
||||
Swig_error(input_file, line_number, "No methodname attribute defined in csdestruct%s typemap for %s\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
Swig_error(Getfile(n), Getline(n), "No methodname attribute defined in csdestruct%s typemap for %s\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
}
|
||||
if (!destruct_methodmodifiers) {
|
||||
Swig_error(input_file, line_number,
|
||||
Swig_error(Getfile(n), Getline(n),
|
||||
"No methodmodifiers attribute defined in csdestruct%s typemap for %s.\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
}
|
||||
}
|
||||
|
|
@ -1810,7 +1817,8 @@ public:
|
|||
|
||||
// Add code to do C++ casting to base class (only for classes in an inheritance hierarchy)
|
||||
if (derived) {
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, "SWIGUpcast");
|
||||
String *smartptr = Getattr(n, "feature:smartptr");
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, smartptr != 0 ? "SWIGSmartPtrUpcast" : "SWIGUpcast");
|
||||
String *wname = Swig_name_wrapper(upcast_method);
|
||||
|
||||
Printv(imclass_cppcasts_code, "\n [DllImport(\"", dllimport, "\", EntryPoint=\"", wname, "\")]\n", NIL);
|
||||
|
|
@ -1818,10 +1826,35 @@ public:
|
|||
|
||||
Replaceall(imclass_cppcasts_code, "$csclassname", proxy_class_name);
|
||||
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT ", c_baseclass, " * SWIGSTDCALL ", wname,
|
||||
"(", c_classname, " *jarg1) {\n", " return (", c_baseclass, " *)jarg1;\n" "}\n", "\n", NIL);
|
||||
|
||||
if (smartptr) {
|
||||
SwigType *spt = Swig_cparse_type(smartptr);
|
||||
if (spt) {
|
||||
SwigType *smart = SwigType_typedef_resolve_all(spt);
|
||||
Delete(spt);
|
||||
SwigType *bsmart = Copy(smart);
|
||||
SwigType *rclassname = SwigType_typedef_resolve_all(c_classname);
|
||||
SwigType *rbaseclass = SwigType_typedef_resolve_all(c_baseclass);
|
||||
Replaceall(bsmart, rclassname, rbaseclass);
|
||||
Delete(rclassname);
|
||||
Delete(rbaseclass);
|
||||
String *smartnamestr = SwigType_namestr(smart);
|
||||
String *bsmartnamestr = SwigType_namestr(bsmart);
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT ", bsmartnamestr, " * SWIGSTDCALL ", wname, "(", smartnamestr, " *jarg1) {\n",
|
||||
" return jarg1 ? new ", bsmartnamestr, "(*jarg1) : 0;\n"
|
||||
"}\n", "\n", NIL);
|
||||
Delete(bsmartnamestr);
|
||||
Delete(smartnamestr);
|
||||
Delete(bsmart);
|
||||
} else {
|
||||
Swig_error(Getfile(n), Getline(n), "Invalid type (%s) in 'smartptr' feature for class %s.\n", smartptr, c_classname);
|
||||
}
|
||||
} else {
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT ", c_baseclass, " * SWIGSTDCALL ", wname, "(", c_classname, " *jarg1) {\n",
|
||||
" return (", c_baseclass, " *)jarg1;\n"
|
||||
"}\n", "\n", NIL);
|
||||
}
|
||||
Delete(wname);
|
||||
Delete(upcast_method);
|
||||
}
|
||||
|
|
@ -3052,8 +3085,10 @@ public:
|
|||
if (Strstr(tm, "$*csclassname")) {
|
||||
SwigType *classnametype = Copy(strippedtype);
|
||||
Delete(SwigType_pop(classnametype));
|
||||
substituteClassnameSpecialVariable(classnametype, tm, "$*csclassname");
|
||||
substitution_performed = true;
|
||||
if (Len(classnametype) > 0) {
|
||||
substituteClassnameSpecialVariable(classnametype, tm, "$*csclassname");
|
||||
substitution_performed = true;
|
||||
}
|
||||
Delete(classnametype);
|
||||
}
|
||||
if (Strstr(tm, "$&csclassname")) {
|
||||
|
|
@ -3879,7 +3914,7 @@ public:
|
|||
|
||||
int classDirectorConstructor(Node *n) {
|
||||
Node *parent = parentNode(n);
|
||||
String *decl = Getattr(n, "decl");;
|
||||
String *decl = Getattr(n, "decl");
|
||||
String *supername = Swig_class_name(parent);
|
||||
String *classname = directorClassName(parent);
|
||||
String *sub = NewString("");
|
||||
|
|
|
|||
4753
Source/Modules/go.cxx
Normal file
4753
Source/Modules/go.cxx
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -114,7 +114,7 @@ static String *memberfunction_name = 0;
|
|||
|
||||
extern "C" {
|
||||
static int has_classname(Node *class_node) {
|
||||
return Getattr(class_node, "guile:goopsclassname") != NULL;
|
||||
return Getattr(class_node, "guile:goopsclassname") ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -254,7 +254,7 @@ public:
|
|||
}
|
||||
|
||||
// set default value for primsuffix
|
||||
if (primsuffix == NULL)
|
||||
if (!primsuffix)
|
||||
primsuffix = NewString("primitive");
|
||||
|
||||
//goops support can only be enabled if passive or module linkage is used
|
||||
|
|
@ -628,7 +628,7 @@ public:
|
|||
if (maybe_delimiter && Len(output) > 0 && Len(tm) > 0) {
|
||||
Printv(output, maybe_delimiter, NIL);
|
||||
}
|
||||
const String *pn = (name == NULL) ? (const String *) Getattr(p, "name") : name;
|
||||
const String *pn = !name ? (const String *) Getattr(p, "name") : name;
|
||||
String *pt = Getattr(p, "type");
|
||||
Replaceall(tm, "$name", pn); // legacy for $parmname
|
||||
Replaceall(tm, "$type", SwigType_str(pt, 0));
|
||||
|
|
@ -657,7 +657,7 @@ public:
|
|||
Parm *p;
|
||||
String *proc_name = 0;
|
||||
char source[256];
|
||||
Wrapper *f = NewWrapper();;
|
||||
Wrapper *f = NewWrapper();
|
||||
String *cleanup = NewString("");
|
||||
String *outarg = NewString("");
|
||||
String *signature = NewString("");
|
||||
|
|
@ -781,7 +781,7 @@ public:
|
|||
if (strcmp("void", Char(pt)) != 0) {
|
||||
Node *class_node = Swig_symbol_clookup_check(pb, Getattr(n, "sym:symtab"),
|
||||
has_classname);
|
||||
String *goopsclassname = (class_node == NULL) ? NULL : Getattr(class_node, "guile:goopsclassname");
|
||||
String *goopsclassname = !class_node ? NULL : Getattr(class_node, "guile:goopsclassname");
|
||||
/* do input conversion */
|
||||
if (goopsclassname) {
|
||||
Printv(method_signature, " (", argname, " ", goopsclassname, ")", NIL);
|
||||
|
|
|
|||
|
|
@ -1024,7 +1024,7 @@ public:
|
|||
|
||||
// below based on Swig_VargetToFunction()
|
||||
SwigType *ty = Swig_wrapped_var_type(Getattr(n, "type"), use_naturalvar_mode(n));
|
||||
Setattr(n, "wrap:action", NewStringf("result = (%s) %s;", SwigType_lstr(ty, 0), Getattr(n, "value")));
|
||||
Setattr(n, "wrap:action", NewStringf("result = (%s)(%s);", SwigType_lstr(ty, 0), Getattr(n, "value")));
|
||||
}
|
||||
|
||||
// Now write code to make the function call
|
||||
|
|
@ -1352,6 +1352,13 @@ public:
|
|||
// Note that this is used in enumValue() amongst other places
|
||||
Setattr(n, "value", tmpValue);
|
||||
|
||||
// Deal with enum values that are bools
|
||||
if (SwigType_type(Getattr(n, "type")) == T_BOOL) {
|
||||
String *boolValue = NewStringf("%s ? 1 : 0", Getattr(n, "enumvalue"));
|
||||
Setattr(n, "enumvalue", boolValue);
|
||||
Delete(boolValue);
|
||||
}
|
||||
|
||||
{
|
||||
EnumFeature enum_feature = decodeEnumFeature(parent);
|
||||
|
||||
|
|
@ -1707,10 +1714,10 @@ public:
|
|||
base = Next(base);
|
||||
continue;
|
||||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n, "classtypeobj"), 0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item, "name"), 0);
|
||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", proxyclassname, baseclassname);
|
||||
String *proxyclassname = Getattr(n, "classtypeobj");
|
||||
String *baseclassname = Getattr(base.item, "name");
|
||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname));
|
||||
base = Next(base);
|
||||
}
|
||||
}
|
||||
|
|
@ -1728,9 +1735,9 @@ public:
|
|||
Delete(baseclass);
|
||||
baseclass = NULL;
|
||||
if (purebase_notderived)
|
||||
Swig_error(input_file, line_number, "The javabase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
|
||||
Swig_error(Getfile(n), Getline(n), "The javabase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
|
||||
} else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
|
||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java. "
|
||||
"Perhaps you need one of the 'replace' or 'notderived' attributes in the csbase typemap?\n", typemap_lookup_type, pure_baseclass);
|
||||
}
|
||||
|
|
@ -1765,12 +1772,10 @@ public:
|
|||
}
|
||||
if (tm && *Char(tm)) {
|
||||
if (!destruct_methodname) {
|
||||
Swig_error(input_file, line_number,
|
||||
"No methodname attribute defined in javadestruct%s typemap for %s\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
Swig_error(Getfile(n), Getline(n), "No methodname attribute defined in javadestruct%s typemap for %s\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
}
|
||||
if (!destruct_methodmodifiers) {
|
||||
Swig_error(input_file, line_number,
|
||||
"No methodmodifiers attribute defined in javadestruct%s typemap for %s.\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
Swig_error(Getfile(n), Getline(n), "No methodmodifiers attribute defined in javadestruct%s typemap for %s.\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
}
|
||||
}
|
||||
// Emit the finalize and delete methods
|
||||
|
|
@ -1818,19 +1823,51 @@ public:
|
|||
|
||||
// Add code to do C++ casting to base class (only for classes in an inheritance hierarchy)
|
||||
if (derived) {
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, "SWIGUpcast");
|
||||
String *smartptr = Getattr(n, "feature:smartptr");
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, smartptr != 0 ? "SWIGSmartPtrUpcast" : "SWIGUpcast");
|
||||
String *jniname = makeValidJniName(upcast_method);
|
||||
String *wname = Swig_name_wrapper(jniname);
|
||||
|
||||
Printf(imclass_cppcasts_code, " public final static native long %s(long jarg1);\n", upcast_method);
|
||||
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT jlong JNICALL ", wname, "(JNIEnv *jenv, jclass jcls, jlong jarg1) {\n",
|
||||
" jlong baseptr = 0;\n"
|
||||
" (void)jenv;\n" " (void)jcls;\n" " *(", c_baseclass, " **)&baseptr = *(", c_classname, " **)&jarg1;\n"
|
||||
" return baseptr;\n"
|
||||
"}\n", "\n", NIL);
|
||||
|
||||
if (smartptr) {
|
||||
SwigType *spt = Swig_cparse_type(smartptr);
|
||||
if (spt) {
|
||||
SwigType *smart = SwigType_typedef_resolve_all(spt);
|
||||
Delete(spt);
|
||||
SwigType *bsmart = Copy(smart);
|
||||
SwigType *rclassname = SwigType_typedef_resolve_all(c_classname);
|
||||
SwigType *rbaseclass = SwigType_typedef_resolve_all(c_baseclass);
|
||||
Replaceall(bsmart, rclassname, rbaseclass);
|
||||
Delete(rclassname);
|
||||
Delete(rbaseclass);
|
||||
String *smartnamestr = SwigType_namestr(smart);
|
||||
String *bsmartnamestr = SwigType_namestr(bsmart);
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT jlong JNICALL ", wname, "(JNIEnv *jenv, jclass jcls, jlong jarg1) {\n",
|
||||
" jlong baseptr = 0;\n"
|
||||
" ", smartnamestr, " *argp1;\n"
|
||||
" ", bsmartnamestr, " result;\n"
|
||||
" (void)jenv;\n"
|
||||
" (void)jcls;\n"
|
||||
" argp1 = *(", smartnamestr, " **)&jarg1;\n"
|
||||
" *(", bsmartnamestr, " **)&baseptr = argp1 ? new ", bsmartnamestr, "(*argp1) : 0;\n"
|
||||
" return baseptr;\n"
|
||||
"}\n", "\n", NIL);
|
||||
Delete(bsmartnamestr);
|
||||
Delete(smartnamestr);
|
||||
Delete(bsmart);
|
||||
} else {
|
||||
Swig_error(Getfile(n), Getline(n), "Invalid type (%s) in 'smartptr' feature for class %s.\n", smartptr, c_classname);
|
||||
}
|
||||
} else {
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT jlong JNICALL ", wname, "(JNIEnv *jenv, jclass jcls, jlong jarg1) {\n",
|
||||
" jlong baseptr = 0;\n"
|
||||
" (void)jenv;\n"
|
||||
" (void)jcls;\n"
|
||||
" *(", c_baseclass, " **)&baseptr = *(", c_classname, " **)&jarg1;\n"
|
||||
" return baseptr;\n"
|
||||
"}\n", "\n", NIL);
|
||||
}
|
||||
Delete(wname);
|
||||
Delete(jniname);
|
||||
Delete(upcast_method);
|
||||
|
|
@ -2904,8 +2941,10 @@ public:
|
|||
if (Strstr(tm, "$*javaclassname")) {
|
||||
SwigType *classnametype = Copy(strippedtype);
|
||||
Delete(SwigType_pop(classnametype));
|
||||
substituteClassnameSpecialVariable(classnametype, tm, "$*javaclassname", jnidescriptor);
|
||||
substitution_performed = true;
|
||||
if (Len(classnametype) > 0) {
|
||||
substituteClassnameSpecialVariable(classnametype, tm, "$*javaclassname", jnidescriptor);
|
||||
substitution_performed = true;
|
||||
}
|
||||
Delete(classnametype);
|
||||
}
|
||||
if (Strstr(tm, "$&javaclassname")) {
|
||||
|
|
@ -3285,8 +3324,10 @@ public:
|
|||
}
|
||||
|
||||
Printf(f_runtime, "namespace Swig {\n");
|
||||
Printf(f_runtime, " static jclass jclass_%s = NULL;\n", imclass_name);
|
||||
Printf(f_runtime, " static jmethodID director_methids[%d];\n", n_methods);
|
||||
Printf(f_runtime, " namespace {\n");
|
||||
Printf(f_runtime, " jclass jclass_%s = NULL;\n", imclass_name);
|
||||
Printf(f_runtime, " jmethodID director_methids[%d];\n", n_methods);
|
||||
Printf(f_runtime, " }\n");
|
||||
Printf(f_runtime, "}\n");
|
||||
|
||||
Printf(w->def, "SWIGEXPORT void JNICALL Java_%s%s_%s(JNIEnv *jenv, jclass jcls) {", jnipackage, jni_imclass_name, swig_module_init_jni);
|
||||
|
|
@ -4059,7 +4100,7 @@ public:
|
|||
|
||||
int classDirectorConstructor(Node *n) {
|
||||
Node *parent = parentNode(n);
|
||||
String *decl = Getattr(n, "decl");;
|
||||
String *decl = Getattr(n, "decl");
|
||||
String *supername = Swig_class_name(parent);
|
||||
String *classname = directorClassName(parent);
|
||||
String *sub = NewString("");
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ extern "C" {
|
|||
return all_protected_mode;
|
||||
}
|
||||
void Language_replace_special_variables(String *method, String *tm, Parm *parm) {
|
||||
Language::instance()->replaceSpecialVariables(method, tm, parm);
|
||||
Language::instance()->replaceSpecialVariables(method, tm, parm);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1344,7 +1344,7 @@ int Language::variableHandler(Node *n) {
|
|||
Swig_save("variableHandler", n, "feature:immutable", NIL);
|
||||
if (SmartPointer) {
|
||||
/* If a smart-pointer and it's a constant access, we have to set immutable */
|
||||
if (Getattr(CurrentClass, "allocate:smartpointerconst")) {
|
||||
if (!Getattr(CurrentClass, "allocate:smartpointermutable")) {
|
||||
SetFlag(n, "feature:immutable");
|
||||
}
|
||||
}
|
||||
|
|
@ -1391,7 +1391,7 @@ int Language::membervariableHandler(Node *n) {
|
|||
int assignable = is_assignable(n);
|
||||
|
||||
if (SmartPointer) {
|
||||
if (Getattr(CurrentClass, "allocate:smartpointerconst")) {
|
||||
if (!Getattr(CurrentClass, "allocate:smartpointermutable")) {
|
||||
assignable = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -2443,6 +2443,9 @@ int Language::classHandler(Node *n) {
|
|||
List *methods = Getattr(n, "allocate:smartpointer");
|
||||
cplus_mode = PUBLIC;
|
||||
SmartPointer = CWRAP_SMART_POINTER;
|
||||
if (Getattr(n, "allocate:smartpointerconst") && Getattr(n, "allocate:smartpointermutable")) {
|
||||
SmartPointer |= CWRAP_SMART_POINTER_OVERLOAD;
|
||||
}
|
||||
Iterator c;
|
||||
for (c = First(methods); c.item; c = Next(c)) {
|
||||
emit_one(c.item);
|
||||
|
|
@ -2697,7 +2700,7 @@ int Language::destructorDeclaration(Node *n) {
|
|||
|
||||
if (!CurrentClass)
|
||||
return SWIG_NOWRAP;
|
||||
if (cplus_mode != PUBLIC)
|
||||
if (cplus_mode != PUBLIC && !Getattr(CurrentClass, "feature:unref"))
|
||||
return SWIG_NOWRAP;
|
||||
if (ImportMode)
|
||||
return SWIG_NOWRAP;
|
||||
|
|
@ -2995,7 +2998,10 @@ void Language::dumpSymbols() {
|
|||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
Node *Language::symbolLookup(String *s, const_String_or_char_ptr scope) {
|
||||
Hash *symbols = Getattr(symtabs, scope);
|
||||
Hash *symbols = Getattr(symtabs, scope ? scope : "");
|
||||
if (!symbols) {
|
||||
return NULL;
|
||||
}
|
||||
return Getattr(symbols, s);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -129,6 +129,7 @@ static const char *usage3 = (const char *) "\
|
|||
-oh <headfile> - Set name of the output header file to <headfile>\n\
|
||||
-outcurrentdir - Set default output dir to current dir instead of input file's path\n\
|
||||
-outdir <dir> - Set language specific files output directory to <dir>\n\
|
||||
-pcreversion - Display PCRE version information\n\
|
||||
-small - Compile in virtual elimination & compact mode\n\
|
||||
-swiglib - Report location of SWIG library and exit\n\
|
||||
-templatereduce - Reduce all the typedefs in templates\n\
|
||||
|
|
@ -515,6 +516,12 @@ void SWIG_getoptions(int argc, char *argv[]) {
|
|||
} else if (strcmp(argv[i], "-nodirprot") == 0) {
|
||||
Wrapper_director_protected_mode_set(0);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i], "-pcreversion") == 0) {
|
||||
String *version = Swig_pcre_version();
|
||||
Printf(stdout, "%s\n", version);
|
||||
Delete(version);
|
||||
Swig_mark_arg(i);
|
||||
SWIG_exit(EXIT_SUCCESS);
|
||||
} else if (strcmp(argv[i], "-small") == 0) {
|
||||
Wrapper_compact_print_mode_set(1);
|
||||
Wrapper_virtual_elimination_mode_set(1);
|
||||
|
|
@ -622,7 +629,14 @@ void SWIG_getoptions(int argc, char *argv[]) {
|
|||
} else if (strcmp(argv[i], "-version") == 0) {
|
||||
fprintf(stdout, "\nSWIG Version %s\n", Swig_package_version());
|
||||
fprintf(stdout, "\nCompiled with %s [%s]\n", SWIG_CXX, SWIG_PLATFORM);
|
||||
fprintf(stdout, "Please see %s for reporting bugs and further information\n", PACKAGE_BUGREPORT);
|
||||
fprintf(stdout, "\nConfigured options: %cpcre\n",
|
||||
#ifdef HAVE_PCRE
|
||||
'+'
|
||||
#else
|
||||
'-'
|
||||
#endif
|
||||
);
|
||||
fprintf(stdout, "\nPlease see %s for reporting bugs and further information\n", PACKAGE_BUGREPORT);
|
||||
SWIG_exit(EXIT_SUCCESS);
|
||||
} else if (strcmp(argv[i], "-copyright") == 0) {
|
||||
fprintf(stdout, "\nSWIG Version %s\n", Swig_package_version());
|
||||
|
|
|
|||
|
|
@ -1324,7 +1324,7 @@ MODULA3():
|
|||
Parm *p;
|
||||
attachParameterNames(n, "tmap:name", "c:wrapname", "m3arg%d");
|
||||
bool gencomma = false;
|
||||
for (p = skipIgnored(l, "in"); p != NULL; p = skipIgnored(p, "in")) {
|
||||
for (p = skipIgnored(l, "in"); p; p = skipIgnored(p, "in")) {
|
||||
|
||||
String *arg = Getattr(p, "c:wrapname");
|
||||
{
|
||||
|
|
@ -1422,7 +1422,7 @@ MODULA3():
|
|||
|
||||
// below based on Swig_VargetToFunction()
|
||||
SwigType *ty = Swig_wrapped_var_type(Getattr(n, "type"), use_naturalvar_mode(n));
|
||||
Setattr(n, "wrap:action", NewStringf("result = (%s) %s;", SwigType_lstr(ty, 0), Getattr(n, "value")));
|
||||
Setattr(n, "wrap:action", NewStringf("result = (%s)(%s);", SwigType_lstr(ty, 0), Getattr(n, "value")));
|
||||
}
|
||||
|
||||
Setattr(n, "wrap:name", wname);
|
||||
|
|
@ -1545,7 +1545,7 @@ MODULA3():
|
|||
Parm *p;
|
||||
writeArgState state;
|
||||
attachParameterNames(n, "tmap:rawinname", "modula3:rawname", "arg%d");
|
||||
for (p = skipIgnored(l, "m3rawintype"); p != NULL; p = skipIgnored(p, "m3rawintype")) {
|
||||
for (p = skipIgnored(l, "m3rawintype"); p; p = skipIgnored(p, "m3rawintype")) {
|
||||
|
||||
/* Get argument passing mode, should be one of VALUE, VAR, READONLY */
|
||||
String *mode = Getattr(p, "tmap:m3rawinmode");
|
||||
|
|
@ -1928,7 +1928,7 @@ MODULA3():
|
|||
} else if (Strcmp(code, "unsafe") == 0) {
|
||||
unsafe_module = true;
|
||||
} else if (Strcmp(code, "library") == 0) {
|
||||
if (targetlibrary != NULL) {
|
||||
if (targetlibrary) {
|
||||
Delete(targetlibrary);
|
||||
}
|
||||
targetlibrary = Copy(strvalue);
|
||||
|
|
@ -2222,8 +2222,7 @@ MODULA3():
|
|||
}
|
||||
base = Next(base);
|
||||
if (base.item != NIL) {
|
||||
Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, input_file,
|
||||
line_number,
|
||||
Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Modula 3.\n",
|
||||
classDeclarationName, Getattr(base.item, "name"));
|
||||
}
|
||||
|
|
@ -2236,8 +2235,7 @@ MODULA3():
|
|||
// Inheritance from pure Modula 3 classes
|
||||
const String *pure_baseclass = typemapLookup(n, "m3base", classDeclarationName, WARN_NONE);
|
||||
if (hasContent(pure_baseclass) && hasContent(baseclass)) {
|
||||
Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, input_file,
|
||||
line_number,
|
||||
Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Modula 3.\n", classDeclarationName, pure_baseclass);
|
||||
}
|
||||
// Pure Modula 3 interfaces
|
||||
|
|
@ -2273,7 +2271,7 @@ MODULA3():
|
|||
destruct_methodname = Getattr(attributes, "tmap:m3destruct:methodname");
|
||||
}
|
||||
if (!destruct_methodname) {
|
||||
Swig_error(input_file, line_number, "No methodname attribute defined in m3destruct%s typemap for %s\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
Swig_error(Getfile(n), Getline(n), "No methodname attribute defined in m3destruct%s typemap for %s\n", (derived ? "_derived" : ""), proxy_class_name);
|
||||
}
|
||||
// Emit the Finalize and Dispose methods
|
||||
if (tm) {
|
||||
|
|
@ -2466,8 +2464,7 @@ MODULA3():
|
|||
Append(baseclassname, Getattr(base.item, "sym:name"));
|
||||
base = Next(base);
|
||||
if (base.item != NIL) {
|
||||
Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, input_file,
|
||||
line_number,
|
||||
Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Modula 3.\n",
|
||||
proxy_class_name, Getattr(base.item, "name"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -514,7 +514,7 @@ public:
|
|||
|
||||
String *proc_name = NewString("");
|
||||
String *tm;
|
||||
String *tm2 = NewString("");;
|
||||
String *tm2 = NewString("");
|
||||
String *argnum = NewString("0");
|
||||
String *arg = NewString("argv[0]");
|
||||
Wrapper *f;
|
||||
|
|
|
|||
|
|
@ -778,7 +778,7 @@ public:
|
|||
|
||||
String *proc_name = NewString("");
|
||||
String *tm;
|
||||
String *tm2 = NewString("");;
|
||||
String *tm2 = NewString("");
|
||||
String *argnum = NewString("0");
|
||||
String *arg = NewString("SWIG_Field(args,0)");
|
||||
Wrapper *f;
|
||||
|
|
@ -1599,7 +1599,7 @@ public:
|
|||
tm = Getattr(n, "feature:director:except");
|
||||
}
|
||||
if ((tm) && Len(tm) && (Strcmp(tm, "1") != 0)) {
|
||||
Printf(w->code, "if (result == NULL) {\n");
|
||||
Printf(w->code, "if (!result) {\n");
|
||||
Printf(w->code, " CAML_VALUE error = *caml_named_value(\"director_except\");\n");
|
||||
Replaceall(tm, "$error", "error");
|
||||
Printv(w->code, Str(tm), "\n", NIL);
|
||||
|
|
|
|||
|
|
@ -760,6 +760,7 @@ public:
|
|||
SwigType *type = Getattr(n, "type");
|
||||
String *rawval = Getattr(n, "rawval");
|
||||
String *value = rawval ? rawval : Getattr(n, "value");
|
||||
String *cppvalue = Getattr(n, "cppvalue");
|
||||
String *tm;
|
||||
|
||||
if (!addSymbol(iname, n))
|
||||
|
|
@ -775,7 +776,7 @@ public:
|
|||
if ((tm = Swig_typemap_lookup("constcode", n, name, 0))) {
|
||||
Replaceall(tm, "$source", value);
|
||||
Replaceall(tm, "$target", name);
|
||||
Replaceall(tm, "$value", value);
|
||||
Replaceall(tm, "$value", cppvalue ? cppvalue : value);
|
||||
Replaceall(tm, "$nsname", iname);
|
||||
Printf(f_init, "%s\n", tm);
|
||||
} else {
|
||||
|
|
@ -972,12 +973,12 @@ public:
|
|||
Delete(self);
|
||||
}
|
||||
|
||||
return Language::constructorHandler(n);;
|
||||
return Language::constructorHandler(n);
|
||||
}
|
||||
|
||||
virtual int destructorHandler(Node *n) {
|
||||
have_destructor = 1;
|
||||
return Language::destructorHandler(n);;
|
||||
return Language::destructorHandler(n);
|
||||
}
|
||||
|
||||
virtual int staticmemberfunctionHandler(Node *n) {
|
||||
|
|
@ -1243,7 +1244,7 @@ public:
|
|||
idx = 0;
|
||||
p = l;
|
||||
int use_parse = 0;
|
||||
while (p != NULL) {
|
||||
while (p) {
|
||||
if (checkAttribute(p, "tmap:in:numinputs", "0")) {
|
||||
p = Getattr(p, "tmap:in:next");
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ void Wrapper_cast_dispatch_mode_set(int flag) {
|
|||
* languages ignore the first method parsed.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static List *Swig_overload_rank(Node *n, bool script_lang_wrapping) {
|
||||
List *Swig_overload_rank(Node *n, bool script_lang_wrapping) {
|
||||
Overloaded nodes[MAX_OVERLOAD];
|
||||
int nnodes = 0;
|
||||
Node *o = Getattr(n, "sym:overloaded");
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@ public:
|
|||
if (no_pmfile) {
|
||||
f_pm = NewString(0);
|
||||
} else {
|
||||
if (pmfile == NULL) {
|
||||
if (!pmfile) {
|
||||
char *m = Char(module) + Len(module);
|
||||
while (m != Char(module)) {
|
||||
if (*m == ':') {
|
||||
|
|
|
|||
|
|
@ -666,7 +666,7 @@ public:
|
|||
/* We have an extra 'this' parameter. */
|
||||
SetFlag(n, "wrap:this");
|
||||
}
|
||||
String *dispatch = Swig_overload_dispatch(n, "return %s(INTERNAL_FUNCTION_PARAM_PASSTHRU);", &maxargs);
|
||||
String *dispatch = Swig_overload_dispatch(n, "%s(INTERNAL_FUNCTION_PARAM_PASSTHRU); return;", &maxargs);
|
||||
|
||||
/* Generate a dispatch wrapper for all overloaded functions */
|
||||
|
||||
|
|
@ -799,7 +799,7 @@ public:
|
|||
Wrapper_add_local(f, "director", "Swig::Director *director = 0");
|
||||
Printf(f->code, "director = dynamic_cast<Swig::Director*>(arg1);\n");
|
||||
Wrapper_add_local(f, "upcall", "bool upcall = false");
|
||||
Printf(f->code, "upcall = !director->is_overriden_method((char *)\"%s\", (char *)\"%s\");\n",
|
||||
Printf(f->code, "upcall = !director->swig_is_overridden_method((char *)\"%s\", (char *)\"%s\");\n",
|
||||
Swig_class_name(Swig_methodclass(n)), name);
|
||||
}
|
||||
|
||||
|
|
@ -915,8 +915,10 @@ public:
|
|||
}
|
||||
|
||||
/* Insert argument output code */
|
||||
bool hasargout = false;
|
||||
for (i = 0, p = l; p; i++) {
|
||||
if ((tm = Getattr(p, "tmap:argout"))) {
|
||||
hasargout = true;
|
||||
Replaceall(tm, "$source", Getattr(p, "lname"));
|
||||
// Replaceall(tm,"$input",Getattr(p,"lname"));
|
||||
Replaceall(tm, "$target", "return_value");
|
||||
|
|
@ -1206,7 +1208,7 @@ public:
|
|||
}
|
||||
if (!pname_cstr) {
|
||||
// Unnamed parameter, e.g. int foo(int);
|
||||
} else if (pname == NULL) {
|
||||
} else if (!pname) {
|
||||
pname = NewString(pname_cstr);
|
||||
} else {
|
||||
size_t len = strlen(pname_cstr);
|
||||
|
|
@ -1290,7 +1292,7 @@ public:
|
|||
if (errno || *p) {
|
||||
Clear(value);
|
||||
Append(value, "?");
|
||||
} else if (strchr(Char(value), '.') == NULL) {
|
||||
} else if (strchr(Char(value), '.') == 0) {
|
||||
// Ensure value is a double constant, not an integer one.
|
||||
Append(value, ".0");
|
||||
double val2 = strtod(Char(value), &p);
|
||||
|
|
@ -1495,7 +1497,7 @@ public:
|
|||
Printf(prepare, "case %d: ", ++last_handled_i);
|
||||
}
|
||||
if (Cmp(d, "void") != 0) {
|
||||
if ((!directorsEnabled() || !Swig_directorclass(n)) && !newobject) {
|
||||
if ((!directorsEnabled() || !Swig_directorclass(n)) && !newobject) {
|
||||
Append(prepare, "$r=");
|
||||
} else {
|
||||
Printf(prepare, "$this->%s=", SWIG_PTR);
|
||||
|
|
@ -1575,14 +1577,21 @@ public:
|
|||
}
|
||||
if (Getattr(n, "access") && haspublicbase) {
|
||||
Delete(acc);
|
||||
acc = NewString("public");
|
||||
acc = NewStringEmpty(); // implicitly public
|
||||
Swig_warning(WARN_PHP_PUBLIC_BASE, input_file, line_number, Char(warnmsg));
|
||||
Delete(warnmsg);
|
||||
}
|
||||
}
|
||||
if (Cmp(acc, "") != 0) {
|
||||
|
||||
if (Cmp(acc, "public") == 0) {
|
||||
// The default visibility for methods is public, so don't specify
|
||||
// that explicitly to keep the wrapper size down.
|
||||
Delete(acc);
|
||||
acc = NewStringEmpty();
|
||||
} else if (Cmp(acc, "") != 0) {
|
||||
Append(acc, " ");
|
||||
}
|
||||
|
||||
if (constructor) {
|
||||
const char * arg0;
|
||||
if (max_num_of_arguments > 0) {
|
||||
|
|
@ -1631,11 +1640,13 @@ public:
|
|||
Printf(output, "%s", prepare);
|
||||
if (constructor) {
|
||||
if (!directorsEnabled() || !Swig_directorclass(n)) {
|
||||
if (strcmp(methodname, "__construct") == 0) {
|
||||
Printf(output, "\t\t$this->%s=%s;\n", SWIG_PTR, invoke);
|
||||
} else {
|
||||
String *classname = Swig_class_name(current_class);
|
||||
Printf(output, "\t\treturn new %s(%s);\n", classname, invoke);
|
||||
if (!Len(prepare)) {
|
||||
if (strcmp(methodname, "__construct") == 0) {
|
||||
Printf(output, "\t\t$this->%s=%s;\n", SWIG_PTR, invoke);
|
||||
} else {
|
||||
String *classname = Swig_class_name(current_class);
|
||||
Printf(output, "\t\treturn new %s(%s);\n", classname, invoke);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Node *parent = Swig_methodclass(n);
|
||||
|
|
@ -1654,7 +1665,7 @@ public:
|
|||
}
|
||||
}
|
||||
Printf(output, "%s", prepare);
|
||||
} else if (Cmp(d, "void") == 0) {
|
||||
} else if (Cmp(d, "void") == 0 && !hasargout) {
|
||||
if (Cmp(invoke, "$r") != 0)
|
||||
Printf(output, "\t\t%s;\n", invoke);
|
||||
} else if (is_class(d)) {
|
||||
|
|
@ -1693,7 +1704,7 @@ public:
|
|||
Printf(output, "\t\t\treturn new $c($r);\n");
|
||||
} else {
|
||||
Printf(output, "\t\t\t$c = new stdClass();\n");
|
||||
Printf(output, "\t\t\t$c->_cPtr = $r;\n");
|
||||
Printf(output, "\t\t\t$c->"SWIG_PTR" = $r;\n");
|
||||
Printf(output, "\t\t\treturn $c;\n");
|
||||
}
|
||||
Printf(output, "\t\t}\n\t\treturn $r;\n");
|
||||
|
|
@ -1779,8 +1790,6 @@ done:
|
|||
if (!addSymbol(iname, n))
|
||||
return SWIG_ERROR;
|
||||
|
||||
SwigType_remember(t);
|
||||
|
||||
/* First link C variables to PHP */
|
||||
|
||||
tm = Swig_typemap_lookup("varinit", n, name, 0);
|
||||
|
|
@ -2496,7 +2505,7 @@ done:
|
|||
idx = 0;
|
||||
p = l;
|
||||
int use_parse = 0;
|
||||
while (p != NULL) {
|
||||
while (p) {
|
||||
if (checkAttribute(p, "tmap:in:numinputs", "0")) {
|
||||
p = Getattr(p, "tmap:in:next");
|
||||
continue;
|
||||
|
|
@ -2565,7 +2574,7 @@ done:
|
|||
}
|
||||
Append(w->code, "zval *result, funcname;\n");
|
||||
Append(w->code, "MAKE_STD_ZVAL(result);\n");
|
||||
Printf(w->code, "ZVAL_STRING(&funcname, (char *)\"%s\", 0);\n", name);
|
||||
Printf(w->code, "ZVAL_STRING(&funcname, (char *)\"%s\", 0);\n", GetChar(n, "sym:name"));
|
||||
Append(w->code, "if (!swig_self) {\n");
|
||||
Append(w->code, " SWIG_PHP_Error(E_ERROR, \"this pointer is NULL\");");
|
||||
Append(w->code, "}\n\n");
|
||||
|
|
|
|||
|
|
@ -1073,7 +1073,7 @@ public:
|
|||
|
||||
bool have_docstring(Node *n) {
|
||||
String *str = Getattr(n, "feature:docstring");
|
||||
return (str != NULL && Len(str) > 0) || (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc"));
|
||||
return (str && Len(str) > 0) || (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc"));
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
|
|
@ -1085,7 +1085,7 @@ public:
|
|||
|
||||
String *docstring(Node *n, autodoc_t ad_type, const String *indent, bool use_triple = true) {
|
||||
String *str = Getattr(n, "feature:docstring");
|
||||
bool have_ds = (str != NULL && Len(str) > 0);
|
||||
bool have_ds = (str && Len(str) > 0);
|
||||
bool have_auto = (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc"));
|
||||
const char *triple_double = use_triple ? "\"\"\"" : "";
|
||||
String *autodoc = NULL;
|
||||
|
|
@ -1101,7 +1101,7 @@ public:
|
|||
|
||||
if (have_auto) {
|
||||
autodoc = make_autodoc(n, ad_type);
|
||||
have_auto = (autodoc != NULL && Len(autodoc) > 0);
|
||||
have_auto = (autodoc && Len(autodoc) > 0);
|
||||
}
|
||||
// If there is more than one line then make docstrings like this:
|
||||
//
|
||||
|
|
@ -1116,14 +1116,14 @@ public:
|
|||
doc = NewString("");
|
||||
Printv(doc, triple_double, "\n", pythoncode(autodoc, indent), "\n", pythoncode(str, indent), indent, triple_double, NIL);
|
||||
} else if (!have_auto && have_ds) { // only docstring
|
||||
if (Strchr(str, '\n') == NULL) {
|
||||
if (Strchr(str, '\n') == 0) {
|
||||
doc = NewStringf("%s%s%s", triple_double, str, triple_double);
|
||||
} else {
|
||||
doc = NewString("");
|
||||
Printv(doc, triple_double, "\n", pythoncode(str, indent), indent, triple_double, NIL);
|
||||
}
|
||||
} else if (have_auto && !have_ds) { // only autodoc
|
||||
if (Strchr(autodoc, '\n') == NULL) {
|
||||
if (Strchr(autodoc, '\n') == 0) {
|
||||
doc = NewStringf("%s%s%s", triple_double, autodoc, triple_double);
|
||||
} else {
|
||||
doc = NewString("");
|
||||
|
|
@ -1361,7 +1361,7 @@ public:
|
|||
{
|
||||
// Only do the autodoc if there isn't a docstring for the class
|
||||
String *str = Getattr(n, "feature:docstring");
|
||||
if (str == NULL || Len(str) == 0) {
|
||||
if (!str || Len(str) == 0) {
|
||||
if (CPlusPlus) {
|
||||
Printf(doc, "Proxy of C++ %s class", real_classname);
|
||||
} else {
|
||||
|
|
@ -1557,7 +1557,7 @@ public:
|
|||
|
||||
bool have_pythonprepend(Node *n) {
|
||||
String *str = Getattr(n, "feature:pythonprepend");
|
||||
return (str != NULL && Len(str) > 0);
|
||||
return (str && Len(str) > 0);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
|
|
@ -1584,7 +1584,7 @@ public:
|
|||
String *str = Getattr(n, "feature:pythonappend");
|
||||
if (!str)
|
||||
str = Getattr(n, "feature:addtofunc");
|
||||
return (str != NULL && Len(str) > 0);
|
||||
return (str && Len(str) > 0);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
|
|
@ -1799,7 +1799,7 @@ public:
|
|||
} while ((sibl = Getattr(sibl, "sym:nextSibling")));
|
||||
Append(f->code, "fail:\n");
|
||||
Printf(f->code, "SWIG_SetErrorMsg(PyExc_NotImplementedError,"
|
||||
"\"Wrong number of arguments for overloaded function '%s'.\\n\"" "\n\" Possible C/C++ prototypes are:\\n\"%s);\n", symname, protoTypes);
|
||||
"\"Wrong number or type of arguments for overloaded function '%s'.\\n\"" "\n\" Possible C/C++ prototypes are:\\n\"%s);\n", symname, protoTypes);
|
||||
Append(f->code, "return NULL;\n");
|
||||
Delete(protoTypes);
|
||||
}
|
||||
|
|
@ -2721,15 +2721,15 @@ public:
|
|||
Printf(f_directors_h, "\n\n");
|
||||
Printf(f_directors_h, "/* Internal Director utilities */\n");
|
||||
Printf(f_directors_h, "public:\n");
|
||||
Printf(f_directors_h, " bool swig_get_inner(const char* name) const {\n");
|
||||
Printf(f_directors_h, " std::map<std::string, bool>::const_iterator iv = inner.find(name);\n");
|
||||
Printf(f_directors_h, " return (iv != inner.end() ? iv->second : false);\n");
|
||||
Printf(f_directors_h, " bool swig_get_inner(const char* protected_method_name) const {\n");
|
||||
Printf(f_directors_h, " std::map<std::string, bool>::const_iterator iv = swig_inner.find(protected_method_name);\n");
|
||||
Printf(f_directors_h, " return (iv != swig_inner.end() ? iv->second : false);\n");
|
||||
Printf(f_directors_h, " }\n\n");
|
||||
|
||||
Printf(f_directors_h, " void swig_set_inner(const char* name, bool val) const\n");
|
||||
Printf(f_directors_h, " { inner[name] = val;}\n\n");
|
||||
Printf(f_directors_h, " void swig_set_inner(const char* protected_method_name, bool val) const\n");
|
||||
Printf(f_directors_h, " { swig_inner[protected_method_name] = val;}\n\n");
|
||||
Printf(f_directors_h, "private:\n");
|
||||
Printf(f_directors_h, " mutable std::map<std::string, bool> inner;\n");
|
||||
Printf(f_directors_h, " mutable std::map<std::string, bool> swig_inner;\n");
|
||||
|
||||
}
|
||||
if (director_method_index) {
|
||||
|
|
@ -2741,7 +2741,7 @@ public:
|
|||
Printf(f_directors_h, " if (!method) {\n");
|
||||
Printf(f_directors_h, " swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);\n");
|
||||
Printf(f_directors_h, " method = PyObject_GetAttr(swig_get_self(), name);\n");
|
||||
Printf(f_directors_h, " if (method == NULL) {\n");
|
||||
Printf(f_directors_h, " if (!method) {\n");
|
||||
Printf(f_directors_h, " std::string msg = \"Method in class %s doesn't exist, undefined \";\n", classname);
|
||||
Printf(f_directors_h, " msg += method_name;\n");
|
||||
Printf(f_directors_h, " Swig::DirectorMethodException::raise(msg.c_str());\n");
|
||||
|
|
@ -2866,7 +2866,7 @@ public:
|
|||
bool ignore = GetFlag(b.item, "feature:ignore") ? true : false;
|
||||
if (!bname || ignore) {
|
||||
if (!bname && !ignore) {
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, input_file, line_number,
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(n), Getline(n),
|
||||
"Base class '%s' ignored - unknown module name for base. Either import the appropriate module interface file or specify the name of the module in the %%import directive.\n", SwigType_namestr(Getattr(b.item, "name")));
|
||||
}
|
||||
b = Next(b);
|
||||
|
|
@ -2904,7 +2904,7 @@ public:
|
|||
Printf(f_shadow, ":\n");
|
||||
if (have_docstring(n)) {
|
||||
String *str = docstring(n, AUTODOC_CLASS, tab4);
|
||||
if (str != NULL && Len(str))
|
||||
if (str && Len(str))
|
||||
Printv(f_shadow, tab4, str, "\n", NIL);
|
||||
}
|
||||
if (!modern) {
|
||||
|
|
@ -3723,7 +3723,7 @@ int PYTHON::classDirectorMethod(Node *n, Node *parent, String *super) {
|
|||
idx = 0;
|
||||
p = l;
|
||||
int use_parse = 0;
|
||||
while (p != NULL) {
|
||||
while (p) {
|
||||
if (checkAttribute(p, "tmap:in:numinputs", "0")) {
|
||||
p = Getattr(p, "tmap:in:next");
|
||||
continue;
|
||||
|
|
@ -3910,13 +3910,13 @@ int PYTHON::classDirectorMethod(Node *n, Node *parent, String *super) {
|
|||
if (tm)
|
||||
tm = Copy(tm);
|
||||
}
|
||||
Append(w->code, "if (result == NULL) {\n");
|
||||
Append(w->code, "if (!result) {\n");
|
||||
Append(w->code, " PyObject *error = PyErr_Occurred();\n");
|
||||
if ((tm) && Len(tm) && (Strcmp(tm, "1") != 0)) {
|
||||
Replaceall(tm, "$error", "error");
|
||||
Printv(w->code, Str(tm), "\n", NIL);
|
||||
} else {
|
||||
Append(w->code, " if (error != NULL) {\n");
|
||||
Append(w->code, " if (error) {\n");
|
||||
Printf(w->code, " Swig::DirectorMethodException::raise(\"Error detected when calling '%s.%s'\");\n", classname, pyname);
|
||||
Append(w->code, " }\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1299,6 +1299,8 @@ void R::addAccessor(String *memberName, Wrapper *wrapper, String *name,
|
|||
Printf(stderr, "Adding accessor: %s (%s) => %s\n", memberName, name, tmp);
|
||||
}
|
||||
|
||||
#define Swig_overload_rank R_swig_overload_rank
|
||||
|
||||
#define MAX_OVERLOAD 256
|
||||
|
||||
struct Overloaded {
|
||||
|
|
@ -1673,7 +1675,7 @@ int R::functionWrapper(Node *n) {
|
|||
}
|
||||
p = nextSibling(p);
|
||||
}
|
||||
|
||||
|
||||
String *unresolved_return_type =
|
||||
Copy(type);
|
||||
if (expandTypedef(type) &&
|
||||
|
|
@ -1731,7 +1733,7 @@ int R::functionWrapper(Node *n) {
|
|||
|
||||
Wrapper *f = NewWrapper();
|
||||
Wrapper *sfun = NewWrapper();
|
||||
|
||||
|
||||
int isVoidReturnType = (Strcmp(type, "void") == 0);
|
||||
// Need to use the unresolved return type since
|
||||
// typedef resolution removes the const which causes a
|
||||
|
|
@ -2036,7 +2038,13 @@ int R::functionWrapper(Node *n) {
|
|||
Printv(f->code, cleanup, NIL);
|
||||
Delete(cleanup);
|
||||
|
||||
|
||||
/* Look to see if there is any newfree cleanup code */
|
||||
if (GetFlag(n, "feature:new")) {
|
||||
if ((tm = Swig_typemap_lookup("newfree", n, "result", 0))) {
|
||||
Replaceall(tm, "$source", "result"); /* deprecated */
|
||||
Printf(f->code, "%s\n", tm);
|
||||
}
|
||||
}
|
||||
|
||||
Printv(f->code, UnProtectWrapupCode, NIL);
|
||||
|
||||
|
|
@ -2053,7 +2061,17 @@ int R::functionWrapper(Node *n) {
|
|||
Printv(sfun->code, ";", (Len(tm) ? "ans = " : ""), ".Call('", wname,
|
||||
"', ", sargs, "PACKAGE='", Rpackage, "');\n", NIL);
|
||||
if(Len(tm))
|
||||
Printf(sfun->code, "%s\n\nans;\n", tm);
|
||||
{
|
||||
Printf(sfun->code, "%s\n\n", tm);
|
||||
if (constructor)
|
||||
{
|
||||
String *finalizer = NewString(iname);
|
||||
Replace(finalizer, "new_", "", DOH_REPLACE_FIRST);
|
||||
Printf(sfun->code, "reg.finalizer(ans, delete_%s)\n", finalizer);
|
||||
}
|
||||
Printf(sfun->code, "ans\n");
|
||||
}
|
||||
|
||||
if (destructor)
|
||||
Printv(f->code, "R_ClearExternalPtr(self);\n", NIL);
|
||||
|
||||
|
|
@ -2496,7 +2514,7 @@ int R::membervariableHandler(Node *n) {
|
|||
|
||||
int status(Language::membervariableHandler(n));
|
||||
|
||||
if(opaqueClassDeclaration == NULL && debugMode)
|
||||
if(!opaqueClassDeclaration && debugMode)
|
||||
Printf(stderr, "<membervariableHandler> %s %s\n", Getattr(n, "name"), Getattr(n, "type"));
|
||||
|
||||
processing_member_access_function = 0;
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ private:
|
|||
|
||||
bool have_docstring(Node *n) {
|
||||
String *str = Getattr(n, "feature:docstring");
|
||||
return (str != NULL && Len(str) > 0) || (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc"));
|
||||
return (str && Len(str) > 0) || (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc"));
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
|
|
@ -244,7 +244,7 @@ private:
|
|||
String *docstring(Node *n, autodoc_t ad_type) {
|
||||
|
||||
String *str = Getattr(n, "feature:docstring");
|
||||
bool have_ds = (str != NULL && Len(str) > 0);
|
||||
bool have_ds = (str && Len(str) > 0);
|
||||
bool have_auto = (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc"));
|
||||
String *autodoc = NULL;
|
||||
String *doc = NULL;
|
||||
|
|
@ -259,7 +259,7 @@ private:
|
|||
|
||||
if (have_auto) {
|
||||
autodoc = make_autodoc(n, ad_type);
|
||||
have_auto = (autodoc != NULL && Len(autodoc) > 0);
|
||||
have_auto = (autodoc && Len(autodoc) > 0);
|
||||
}
|
||||
// If there is more than one line then make docstrings like this:
|
||||
//
|
||||
|
|
@ -272,14 +272,14 @@ private:
|
|||
doc = NewString("");
|
||||
Printv(doc, "\n", autodoc, "\n", str, NIL);
|
||||
} else if (!have_auto && have_ds) { // only docstring
|
||||
if (Strchr(str, '\n') == NULL) {
|
||||
if (Strchr(str, '\n') == 0) {
|
||||
doc = NewString(str);
|
||||
} else {
|
||||
doc = NewString("");
|
||||
Printv(doc, str, NIL);
|
||||
}
|
||||
} else if (have_auto && !have_ds) { // only autodoc
|
||||
if (Strchr(autodoc, '\n') == NULL) {
|
||||
if (Strchr(autodoc, '\n') == 0) {
|
||||
doc = NewStringf("%s", autodoc);
|
||||
} else {
|
||||
doc = NewString("");
|
||||
|
|
@ -618,7 +618,7 @@ private:
|
|||
{
|
||||
// Only do the autodoc if there isn't a docstring for the class
|
||||
String *str = Getattr(n, "feature:docstring");
|
||||
if (counter == 0 && (str == NULL || Len(str) == 0)) {
|
||||
if (counter == 0 && (str == 0 || Len(str) == 0)) {
|
||||
if (CPlusPlus) {
|
||||
Printf(doc, " Proxy of C++ %s class", full_name);
|
||||
} else {
|
||||
|
|
@ -2054,8 +2054,15 @@ public:
|
|||
|
||||
// Construct real method name
|
||||
String* methodName = NewString("");
|
||||
if ( isMethod )
|
||||
Printv( methodName, Getattr(parentNode(sibl),"sym:name"), ".", NIL );
|
||||
if ( isMethod ) {
|
||||
// Sometimes a method node has no parent (SF#3034054).
|
||||
// This value is used in an exception message, so just skip the class
|
||||
// name in this case so at least we don't segfault. This is probably
|
||||
// just working around a problem elsewhere though.
|
||||
Node *parent_node = parentNode(sibl);
|
||||
if (parent_node)
|
||||
Printv( methodName, Getattr(parent_node,"sym:name"), ".", NIL );
|
||||
}
|
||||
Append( methodName, Getattr(sibl,"sym:name" ) );
|
||||
if ( isCtor ) Append( methodName, ".new" );
|
||||
|
||||
|
|
@ -2395,7 +2402,7 @@ public:
|
|||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n, "classtypeobj"), 0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item, "name"), 0);
|
||||
Swig_warning(WARN_RUBY_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
Swig_warning(WARN_RUBY_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Ruby.\n", proxyclassname, baseclassname);
|
||||
base = Next(base);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ extern "C" {
|
|||
Language *swig_uffi(void);
|
||||
Language *swig_r(void);
|
||||
Language *swig_scilab(void);
|
||||
Language *swig_go(void);
|
||||
}
|
||||
|
||||
struct swig_module {
|
||||
|
|
@ -70,6 +71,7 @@ static swig_module modules[] = {
|
|||
{"-clisp", swig_clisp, "CLISP"},
|
||||
{"-cffi", swig_cffi, "CFFI"},
|
||||
{"-csharp", swig_csharp, "C#"},
|
||||
{"-go", swig_go, "Go"},
|
||||
{"-guile", swig_guile, "Guile"},
|
||||
{"-java", swig_java, "Java"},
|
||||
{"-lua", swig_lua, "Lua"},
|
||||
|
|
|
|||
|
|
@ -344,6 +344,7 @@ void Swig_overload_check(Node *n);
|
|||
String *Swig_overload_dispatch(Node *n, const_String_or_char_ptr fmt, int *);
|
||||
String *Swig_overload_dispatch_cast(Node *n, const_String_or_char_ptr fmt, int *);
|
||||
String *Swig_overload_dispatch_fast(Node *n, const_String_or_char_ptr fmt, int *);
|
||||
List *Swig_overload_rank(Node *n, bool script_lang_wrapping);
|
||||
SwigType *cplus_value_type(SwigType *t);
|
||||
|
||||
/* directors.cxx start */
|
||||
|
|
@ -379,9 +380,15 @@ void Wrapper_fast_dispatch_mode_set(int);
|
|||
void Wrapper_cast_dispatch_mode_set(int);
|
||||
void Wrapper_naturalvar_mode_set(int);
|
||||
|
||||
|
||||
void clean_overloaded(Node *n);
|
||||
|
||||
extern "C" {
|
||||
const char *Swig_to_string(DOH *object, int count = -1);
|
||||
const char *Swig_to_string_with_location(DOH *object, int count = -1);
|
||||
void Swig_print(DOH *object, int count = -1);
|
||||
void Swig_print_with_location(DOH *object, int count = -1);
|
||||
}
|
||||
|
||||
/* Contracts */
|
||||
|
||||
void Swig_contracts(Node *n);
|
||||
|
|
@ -394,5 +401,4 @@ void Swig_browser(Node *n, int);
|
|||
void Swig_default_allocators(Node *n);
|
||||
void Swig_process_types(Node *n);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -175,10 +175,10 @@ class TypePass:private Dispatcher {
|
|||
}
|
||||
}
|
||||
if (Strcmp(nodeType(bcls), "classforward") != 0) {
|
||||
Swig_error(Getfile(cls), Getline(cls), "'%s' does not have a valid base class.\n", Getattr(cls, "name"));
|
||||
Swig_error(Getfile(bcls), Getline(bcls), "'%s' is not a valid base class.\n", SwigType_namestr(bname));
|
||||
Swig_error(Getfile(bname), Getline(bname), "'%s' is not a valid base class.\n", SwigType_namestr(bname));
|
||||
Swig_error(Getfile(bcls), Getline(bcls), "See definition of '%s'.\n", SwigType_namestr(bname));
|
||||
} else {
|
||||
Swig_warning(WARN_TYPE_INCOMPLETE, Getfile(cls), Getline(cls), "Base class '%s' is incomplete.\n", SwigType_namestr(bname));
|
||||
Swig_warning(WARN_TYPE_INCOMPLETE, Getfile(bname), Getline(bname), "Base class '%s' is incomplete.\n", SwigType_namestr(bname));
|
||||
Swig_warning(WARN_TYPE_INCOMPLETE, Getfile(bcls), Getline(bcls), "Only forward declaration '%s' was found.\n", SwigType_namestr(bname));
|
||||
clsforward = 1;
|
||||
}
|
||||
|
|
@ -189,7 +189,7 @@ class TypePass:private Dispatcher {
|
|||
ilist = alist = NewList();
|
||||
Append(ilist, bcls);
|
||||
} else {
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(cls), Getline(cls), "Base class '%s' undefined.\n", SwigType_namestr(bname));
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(bname), Getline(bname), "Base class '%s' undefined.\n", SwigType_namestr(bname));
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(bcls), Getline(bcls), "'%s' must be defined before it is used as a base class.\n", SwigType_namestr(bname));
|
||||
}
|
||||
}
|
||||
|
|
@ -202,10 +202,9 @@ class TypePass:private Dispatcher {
|
|||
if (!bcls) {
|
||||
if (!clsforward) {
|
||||
if (ispublic && !Getmeta(bname, "already_warned")) {
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(cls), Getline(cls), "Nothing known about base class '%s'. Ignored.\n", SwigType_namestr(bname));
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(bname), Getline(bname), "Nothing known about base class '%s'. Ignored.\n", SwigType_namestr(bname));
|
||||
if (Strchr(bname, '<')) {
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(cls), Getline(cls), "Maybe you forgot to instantiate '%s' using %%template.\n",
|
||||
SwigType_namestr(bname));
|
||||
Swig_warning(WARN_TYPE_UNDEFINED_CLASS, Getfile(bname), Getline(bname), "Maybe you forgot to instantiate '%s' using %%template.\n", SwigType_namestr(bname));
|
||||
}
|
||||
Setmeta(bname, "already_warned", "1");
|
||||
}
|
||||
|
|
@ -231,6 +230,37 @@ class TypePass:private Dispatcher {
|
|||
Node *bclass = n; /* Getattr(n,"class"); */
|
||||
Hash *scopes = Getattr(bclass, "typescope");
|
||||
SwigType_inherit(clsname, bname, cast, 0);
|
||||
String *smartptr = Getattr(first, "feature:smartptr");
|
||||
if (smartptr) {
|
||||
SwigType *smart = 0;
|
||||
SwigType *spt = Swig_cparse_type(smartptr);
|
||||
if (spt) {
|
||||
smart = SwigType_typedef_resolve_all(spt);
|
||||
Delete(spt);
|
||||
/* Record a (fake) inheritance relationship between smart pointer
|
||||
and smart pointer to base class, so that smart pointer upcasts
|
||||
are automatically generated. */
|
||||
SwigType *bsmart = Copy(smart);
|
||||
SwigType *rclsname = SwigType_typedef_resolve_all(clsname);
|
||||
SwigType *rbname = SwigType_typedef_resolve_all(bname);
|
||||
Replaceall(bsmart, rclsname, rbname);
|
||||
Delete(rclsname);
|
||||
Delete(rbname);
|
||||
String *smartnamestr = SwigType_namestr(smart);
|
||||
String *bsmartnamestr = SwigType_namestr(bsmart);
|
||||
/* construct casting code */
|
||||
String *convcode = NewStringf("\n *newmemory = SWIG_CAST_NEW_MEMORY;\n return (void *) new %s(*(%s *)$from);\n", bsmartnamestr, smartnamestr);
|
||||
Delete(bsmartnamestr);
|
||||
Delete(smartnamestr);
|
||||
/* setup inheritance relationship between smart pointer templates */
|
||||
SwigType_inherit(smart, bsmart, 0, convcode);
|
||||
Delete(convcode);
|
||||
Delete(bsmart);
|
||||
Delete(smart);
|
||||
} else {
|
||||
Swig_error(Getfile(first), Getline(first), "Invalid type (%s) in 'smartptr' feature for class %s.\n", SwigType_namestr(smartptr), SwigType_namestr(clsname));
|
||||
}
|
||||
}
|
||||
if (!importmode) {
|
||||
String *btype = Copy(bname);
|
||||
SwigType_add_pointer(btype);
|
||||
|
|
@ -244,7 +274,7 @@ class TypePass:private Dispatcher {
|
|||
Symtab *st = Getattr(cls, "symtab");
|
||||
Symtab *bst = Getattr(bclass, "symtab");
|
||||
if (st == bst) {
|
||||
Swig_warning(WARN_PARSE_REC_INHERITANCE, Getfile(cls), Getline(cls), "Recursive scope inheritance of '%s'.\n", Getattr(cls, "name"));
|
||||
Swig_warning(WARN_PARSE_REC_INHERITANCE, Getfile(cls), Getline(cls), "Recursive scope inheritance of '%s'.\n", SwigType_namestr(Getattr(cls, "name")));
|
||||
continue;
|
||||
}
|
||||
Symtab *s = Swig_symbol_current();
|
||||
|
|
@ -765,7 +795,7 @@ class TypePass:private Dispatcher {
|
|||
|
||||
bool reset;
|
||||
String *enumvalue = Getattr(c, "enumvalue");
|
||||
if (GetFlag(c, "feature:ignore")) {
|
||||
if (GetFlag(c, "feature:ignore") || !Getattr(c, "sym:name")) {
|
||||
reset = enumvalue ? true : false;
|
||||
previous_ignored = true;
|
||||
} else {
|
||||
|
|
@ -807,11 +837,15 @@ class TypePass:private Dispatcher {
|
|||
value = name;
|
||||
if (Strcmp(value, name) == 0) {
|
||||
String *new_value;
|
||||
if (((nsname) || (inclass)) && cparse_cplusplus) {
|
||||
if ((nsname || inclass) && cparse_cplusplus) {
|
||||
new_value = NewStringf("%s::%s", SwigType_namestr(Swig_symbol_qualified(n)), value);
|
||||
} else {
|
||||
new_value = NewString(value);
|
||||
}
|
||||
if ((nsname || inclass) && !cparse_cplusplus) {
|
||||
String *cppvalue = NewStringf("%s::%s", SwigType_namestr(Swig_symbol_qualified(n)), value);
|
||||
Setattr(n, "cppvalue", cppvalue); /* for target languages that always generate C++ code even when wrapping C code */
|
||||
}
|
||||
Setattr(n, "value", new_value);
|
||||
Delete(new_value);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,3 +100,116 @@ void clean_overloaded(Node *n) {
|
|||
Delattr(n, "sym:overloaded");
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_set_max_hash_expand()
|
||||
*
|
||||
* Controls how many Hash objects are displayed when displaying nested Hash objects.
|
||||
* Makes DohSetMaxHashExpand an externally callable function (for debugger).
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Swig_set_max_hash_expand(int count) {
|
||||
SetMaxHashExpand(count);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_get_max_hash_expand()
|
||||
*
|
||||
* Returns how many Hash objects are displayed when displaying nested Hash objects.
|
||||
* Makes DohGetMaxHashExpand an externally callable function (for debugger).
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
int Swig_get_max_hash_expand() {
|
||||
return GetMaxHashExpand();
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_to_doh_string()
|
||||
*
|
||||
* DOH version of Swig_to_string()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static String *Swig_to_doh_string(DOH *object, int count) {
|
||||
int old_count = Swig_get_max_hash_expand();
|
||||
if (count >= 0)
|
||||
Swig_set_max_hash_expand(count);
|
||||
|
||||
String *debug_string = object ? NewStringf("%s", object) : NewString("NULL");
|
||||
|
||||
Swig_set_max_hash_expand(old_count);
|
||||
return debug_string;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_to_doh_string_with_location()
|
||||
*
|
||||
* DOH version of Swig_to_string_with_location()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static String *Swig_to_doh_string_with_location(DOH *object, int count) {
|
||||
int old_count = Swig_get_max_hash_expand();
|
||||
if (count >= 0)
|
||||
Swig_set_max_hash_expand(count);
|
||||
|
||||
String *debug_string = Swig_stringify_with_location(object);
|
||||
|
||||
Swig_set_max_hash_expand(old_count);
|
||||
return debug_string;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_to_string()
|
||||
*
|
||||
* Swig debug - return C string representation of any DOH type.
|
||||
* Nested Hash types expand count is value of Swig_get_max_hash_expand when count<0
|
||||
* Note: leaks memory.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
const char *Swig_to_string(DOH *object, int count) {
|
||||
return Char(Swig_to_doh_string(object, count));
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_to_string_with_location()
|
||||
*
|
||||
* Swig debug - return C string representation of any DOH type, within [] brackets
|
||||
* for Hash and List types, prefixed by line and file information.
|
||||
* Nested Hash types expand count is value of Swig_get_max_hash_expand when count<0
|
||||
* Note: leaks memory.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
const char *Swig_to_string_with_location(DOH *object, int count) {
|
||||
return Char(Swig_to_doh_string_with_location(object, count));
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_print()
|
||||
*
|
||||
* Swig debug - display string representation of any DOH type.
|
||||
* Nested Hash types expand count is value of Swig_get_max_hash_expand when count<0
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Swig_print(DOH *object, int count) {
|
||||
String *output = Swig_to_doh_string(object, count);
|
||||
Printf(stdout, "%s\n", output);
|
||||
Delete(output);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Swig_to_string_with_location()
|
||||
*
|
||||
* Swig debug - display string representation of any DOH type, within [] brackets
|
||||
* for Hash and List types, prefixed by line and file information.
|
||||
* Nested Hash types expand count is value of Swig_get_max_hash_expand when count<0
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Swig_print_with_location(DOH *object, int count) {
|
||||
String *output = Swig_to_doh_string_with_location(object, count);
|
||||
Printf(stdout, "%s\n", output);
|
||||
Delete(output);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue