Scott Michel patch which removes supefluous ricochet director checking code except for pure virtual methods.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@5288 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
fd6ff5aef9
commit
2636349aa1
1 changed files with 9 additions and 60 deletions
|
|
@ -751,7 +751,6 @@ class JAVA : public Language {
|
|||
bool pure_virtual = false;
|
||||
bool director_method = false;
|
||||
bool feature_director = false;
|
||||
bool recursive_upcall = false;
|
||||
bool feature_extend = !Cmp(Getattr(n, "feature:extend"), "1");
|
||||
String *director_class = NULL;
|
||||
String *director_uargs = NewString("director->swig_get_self()");
|
||||
|
|
@ -771,9 +770,6 @@ class JAVA : public Language {
|
|||
udata = getUpcallMethodData(dirimclass_meth, Getattr(n, "decl"));
|
||||
imclass_methodidx = Getattr(udata, "imclass_methodidx");
|
||||
class_methodidx = Getattr(udata, "class_methodidx");
|
||||
|
||||
recursive_upcall = !(Cmp(Getattr(n, "feature:director:recursive"), "1")
|
||||
&& Cmp(Getattr(parent, "feature:director:recursive"), "1"));
|
||||
}
|
||||
|
||||
if (!Cmp(Getattr(n, "value"), "0"))
|
||||
|
|
@ -1093,7 +1089,7 @@ class JAVA : public Language {
|
|||
upcall_method = getUpcallJNIMethod(jdescrip);
|
||||
|
||||
if (upcall_method != NULL) {
|
||||
if (!recursive_upcall) {
|
||||
if (pure_virtual) {
|
||||
Printf(f->code, " if (!director->swig_get_ricochet(%s)) {\n", class_methodidx);
|
||||
Printf(f->code, " director->swig_set_ricochet(%s);\n", class_methodidx);
|
||||
}
|
||||
|
|
@ -1105,22 +1101,12 @@ class JAVA : public Language {
|
|||
Printf(f->code, " jenv->%s(jcls, Swig::director_methids[%s], %s);\n",
|
||||
upcall_method, imclass_methodidx, director_uargs);
|
||||
|
||||
if (!recursive_upcall)
|
||||
if (pure_virtual) {
|
||||
Printf(f->code, " director->swig_clear_ricochet(%s);\n", class_methodidx);
|
||||
|
||||
if (!recursive_upcall) {
|
||||
Printf(f->code, " } else {\n");
|
||||
|
||||
if (!pure_virtual) {
|
||||
Printf(f->code, " SWIG_JavaThrowException(jenv, SWIG_JavaDirectorRicochet,\n");
|
||||
Printf(f->code, " \"Recursive loop into director method %s::%s detected.\");\n",
|
||||
proxy_class_name, Getattr(n, "name"));
|
||||
} else {
|
||||
Printf(f->code, " SWIG_JavaThrowException(jenv, SWIG_JavaDirectorPureVirtual,\n");
|
||||
Printf(f->code, " \"Pure virtual director method %s::%s invoked.\");\n",
|
||||
proxy_class_name, Getattr(n, "name"));
|
||||
}
|
||||
|
||||
Printf(f->code, " SWIG_JavaThrowException(jenv, SWIG_JavaDirectorPureVirtual,\n");
|
||||
Printf(f->code, " \"Pure virtual director method %s::%s invoked.\");\n",
|
||||
proxy_class_name, Getattr(n, "name"));
|
||||
Printf(f->code, "}");
|
||||
}
|
||||
|
||||
|
|
@ -1664,9 +1650,10 @@ class JAVA : public Language {
|
|||
f_proxy = NULL;
|
||||
|
||||
/* Output the downcast method, if necessary. Note: There's no other really
|
||||
good place to put this code, since ABCs can and should have downcasts,
|
||||
making the constructorHandler() a bad place. */
|
||||
if (Getattr(n, "feature:director:downcast")) {
|
||||
good place to put this code, since Abstract Base Classes (ABCs) can and should have
|
||||
downcasts, making the constructorHandler() a bad place (because ABCs don't get to
|
||||
have constructors emitted.) */
|
||||
if (Getattr(n, "feature:javadowncast")) {
|
||||
String *jni_imclass_name = makeValidJniName(imclass_name);
|
||||
String *jni_class_name = makeValidJniName(proxy_class_name);
|
||||
String *norm_name = SwigType_namestr(Getattr(n, "name"));
|
||||
|
|
@ -2677,11 +2664,9 @@ class JAVA : public Language {
|
|||
ParmList *l = Getattr(n, "parms");
|
||||
bool is_void = !(Cmp(type, "void"));
|
||||
bool pure_virtual = (!(Cmp(storage, "virtual")) && !(Cmp(value, "0")));
|
||||
bool is_const = SwigType_isconst(decl) ? true : false;
|
||||
int status = SWIG_OK;
|
||||
|
||||
bool output_director = true;
|
||||
bool recursive_upcall = false;
|
||||
String *dirclassname = directorClassName(parent);
|
||||
String *qualified_name = NewStringf("%s::%s", dirclassname, name);
|
||||
String *jnidesc = NewString("");
|
||||
|
|
@ -2714,10 +2699,6 @@ class JAVA : public Language {
|
|||
if (!(Cmp(type, "class")))
|
||||
c_classname = classname;
|
||||
|
||||
/* Check if the user wants upcall recursion */
|
||||
recursive_upcall = !(Cmp(Getattr(n, "feature:director:recursive"), "1")
|
||||
&& Cmp(Getattr(parent, "feature:director:recursive"), "1"));
|
||||
|
||||
/* Handle and form complete return type, including the modification
|
||||
to a pointer, if return type is a reference. */
|
||||
|
||||
|
|
@ -2898,14 +2879,6 @@ class JAVA : public Language {
|
|||
Delete(tp);
|
||||
}
|
||||
|
||||
if (!recursive_upcall) {
|
||||
if (!is_const)
|
||||
Printf(w->code, "if (!swig_get_ricochet(%d)) {\n", classmeth_off);
|
||||
else
|
||||
Printf(w->code, "if (!const_cast<%s *>(this)->swig_get_ricochet(%d)) {\n",
|
||||
dirclassname, classmeth_off);
|
||||
}
|
||||
|
||||
/* Get number of required and total arguments */
|
||||
num_arguments = emit_num_arguments(l);
|
||||
num_required = emit_num_required(l);
|
||||
|
|
@ -3113,14 +3086,6 @@ class JAVA : public Language {
|
|||
String *methid = Getattr(udata, "imclass_methodidx");
|
||||
String *methop = getUpcallJNIMethod(jniret_desc);
|
||||
|
||||
if (!recursive_upcall) {
|
||||
if (!is_const)
|
||||
Printf(w->code, " swig_set_ricochet(%d);\n", classmeth_off);
|
||||
else
|
||||
Printf(w->code, " const_cast<%s *>(this)->swig_set_ricochet(%d);\n",
|
||||
dirclassname, classmeth_off);
|
||||
}
|
||||
|
||||
if (!is_void) {
|
||||
Printf(w->code, "jresult = (%s) jenv->%s(Swig::jclass_%s, Swig::director_methids[%s], %s);\n",
|
||||
jniret_type, methop, imclass_name, methid, jupcall_args);
|
||||
|
|
@ -3129,14 +3094,6 @@ class JAVA : public Language {
|
|||
methop, imclass_name, methid, jupcall_args);
|
||||
}
|
||||
|
||||
if (!recursive_upcall) {
|
||||
if (!is_const)
|
||||
Printf(w->code, "swig_clear_ricochet(%d);\n", classmeth_off);
|
||||
else
|
||||
Printf(w->code, " const_cast<%s *>(this)->swig_clear_ricochet(%d);\n",
|
||||
dirclassname, classmeth_off);
|
||||
}
|
||||
|
||||
Printf(w->code, "if (jenv->ExceptionOccurred()) return $null;\n");
|
||||
|
||||
if (!is_void) {
|
||||
|
|
@ -3163,14 +3120,6 @@ class JAVA : public Language {
|
|||
Delete(result_str);
|
||||
}
|
||||
|
||||
if (!recursive_upcall) {
|
||||
Printf(w->code, "} else {\n");
|
||||
Printf(w->code, " SWIG_JavaThrowException(jenv, SWIG_JavaDirectorRicochet,\n");
|
||||
Printf(w->code, " \"Recursive loop into director method %s::%s detected.\");\n",
|
||||
c_classname, name);
|
||||
Printf(w->code, "}\n");
|
||||
}
|
||||
|
||||
Delete(imclass_desc);
|
||||
Delete(class_desc);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue