idenitfy the exact cast case (minimum rank possible) and dispatch inmediatly
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8106 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d480e004ff
commit
4c18b66923
1 changed files with 7 additions and 1 deletions
|
|
@ -408,6 +408,7 @@ Swig_overload_dispatch_cast(Node *n, const String_or_char *fmt, int *maxargs) {
|
||||||
Printf(f,"if (%s >= %d) {\n", argc_template_string, num_required);
|
Printf(f,"if (%s >= %d) {\n", argc_template_string, num_required);
|
||||||
}
|
}
|
||||||
Printf(f,"SWIG_TypeRank _ranki = 0;\n");
|
Printf(f,"SWIG_TypeRank _ranki = 0;\n");
|
||||||
|
Printf(f,"SWIG_TypeRank _rankm = 0;\n");
|
||||||
Printf(f,"SWIG_TypeRank _pi = 1;\n",num_arguments);
|
Printf(f,"SWIG_TypeRank _pi = 1;\n",num_arguments);
|
||||||
|
|
||||||
/* create a list with the wrappers that collide with the
|
/* create a list with the wrappers that collide with the
|
||||||
|
|
@ -497,6 +498,7 @@ Swig_overload_dispatch_cast(Node *n, const String_or_char *fmt, int *maxargs) {
|
||||||
fn = i + 1;
|
fn = i + 1;
|
||||||
Printf(f, "if (!_v) goto check_%d;\n", fn);
|
Printf(f, "if (!_v) goto check_%d;\n", fn);
|
||||||
Printf(f, "_ranki += _v*_pi;\n", fn);
|
Printf(f, "_ranki += _v*_pi;\n", fn);
|
||||||
|
Printf(f, "_rankm += _pi;\n", fn);
|
||||||
Printf(f, "_pi *= SWIG_MAXCASTRANK;\n", fn);
|
Printf(f, "_pi *= SWIG_MAXCASTRANK;\n", fn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -517,7 +519,10 @@ Swig_overload_dispatch_cast(Node *n, const String_or_char *fmt, int *maxargs) {
|
||||||
/* close braces */
|
/* close braces */
|
||||||
for (/* empty */; num_braces > 0; num_braces--) Printf(f, "}\n");
|
for (/* empty */; num_braces > 0; num_braces--) Printf(f, "}\n");
|
||||||
|
|
||||||
Printf(f,"if (!_index || (_ranki < _rank)) { _rank = _ranki; _index = %d;}\n",i+1);
|
Printf(f,"if (!_index || (_ranki < _rank)) {\n",i+1);
|
||||||
|
Printf(f," _rank = _ranki; _index = %d;\n",i+1);
|
||||||
|
Printf(f," if (_rank == _rankm) goto dispatch;\n",i+1);
|
||||||
|
Printf(f,"}\n",i+1);
|
||||||
String *lfmt = ReplaceFormat (fmt, num_arguments);
|
String *lfmt = ReplaceFormat (fmt, num_arguments);
|
||||||
Printf(sw, "case %d:\n", i+1);
|
Printf(sw, "case %d:\n", i+1);
|
||||||
Printf(sw, Char(lfmt),Getattr(ni,"wrap:name"));
|
Printf(sw, Char(lfmt),Getattr(ni,"wrap:name"));
|
||||||
|
|
@ -530,6 +535,7 @@ Swig_overload_dispatch_cast(Node *n, const String_or_char *fmt, int *maxargs) {
|
||||||
Delete(coll);
|
Delete(coll);
|
||||||
}
|
}
|
||||||
Delete(dispatch);
|
Delete(dispatch);
|
||||||
|
Printf(f,"dispatch:\n");
|
||||||
Printf(f,"switch(_index) {\n");
|
Printf(f,"switch(_index) {\n");
|
||||||
Printf(f,"%s",sw);
|
Printf(f,"%s",sw);
|
||||||
Printf(f,"}\n");
|
Printf(f,"}\n");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue