Conditionalise generation of the C++ implemented proxy classes on the target

PHP version being PHP4 (since they don't work for PHP5).


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9122 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Olly Betts 2006-05-17 09:22:57 +00:00
commit 6251ece095

View file

@ -846,7 +846,7 @@ public:
String *tmp = NewString(""); String *tmp = NewString("");
String *dispatch = Swig_overload_dispatch(n,"return %s(INTERNAL_FUNCTION_PARAM_PASSTHRU);",&maxargs); String *dispatch = Swig_overload_dispatch(n,"return %s(INTERNAL_FUNCTION_PARAM_PASSTHRU);",&maxargs);
int has_this_ptr = (wrapperType==memberfn)?shadow:0; int has_this_ptr = (wrapperType==memberfn && shadow && php_version == 4);
/* Generate a dispatch wrapper for all overloaded functions */ /* Generate a dispatch wrapper for all overloaded functions */
@ -912,7 +912,7 @@ public:
int i,numopt; int i,numopt;
String *tm; String *tm;
Wrapper *f; Wrapper *f;
bool mvr=(shadow && wrapperType == membervar); bool mvr=(shadow && php_version == 4 && wrapperType == membervar);
bool mvrset=(mvr && (Strcmp(iname, Swig_name_set(Swig_name_member(shadow_classname, name)))==0) ); bool mvrset=(mvr && (Strcmp(iname, Swig_name_set(Swig_name_member(shadow_classname, name)))==0) );
char wname[256]; char wname[256];
@ -949,7 +949,7 @@ public:
strcat(wname,Char(overname)); strcat(wname,Char(overname));
} }
// if shadow and variable wrapper we want to snag the main contents // if PHP4, shadow and variable wrapper we want to snag the main contents
// of this function to stick in to the property handler.... // of this function to stick in to the property handler....
if (mvr) { if (mvr) {
String *php_function_name = NewString(iname); String *php_function_name = NewString(iname);
@ -982,7 +982,7 @@ public:
// destructors when using shadows. // destructors when using shadows.
// And for static member variables // And for static member variables
if (!overloaded && if (!overloaded &&
!(destructor && shadow) && !(destructor && shadow && php_version == 4) &&
wrapperType != staticmembervar ) { wrapperType != staticmembervar ) {
create_command( iname, wname ); create_command( iname, wname );
} }
@ -1001,7 +1001,7 @@ public:
int num_required = emit_num_required(l); int num_required = emit_num_required(l);
numopt = num_arguments - num_required; numopt = num_arguments - num_required;
int has_this_ptr = (wrapperType==memberfn)?shadow:0; int has_this_ptr = (wrapperType==memberfn && shadow && php_version == 4);
sprintf(args, "zval **args[%d]", num_arguments-has_this_ptr); sprintf(args, "zval **args[%d]", num_arguments-has_this_ptr);
@ -1181,7 +1181,7 @@ public:
Printf(f->code, "{\n/* ALTERNATIVE Constructor, make an object wrapper */\n"); Printf(f->code, "{\n/* ALTERNATIVE Constructor, make an object wrapper */\n");
// Make object // Make object
String *shadowrettype = NewString(""); String *shadowrettype = NewString("");
SwigToPhpType(d, iname, shadowrettype, shadow); SwigToPhpType(d, iname, shadowrettype, (shadow && php_version == 4));
Printf(f->code,"zval *obj, *_cPtr;\n"); Printf(f->code,"zval *obj, *_cPtr;\n");
Printf(f->code,"MAKE_STD_ZVAL(obj);\n"); Printf(f->code,"MAKE_STD_ZVAL(obj);\n");
@ -1189,13 +1189,12 @@ public:
Printf(f->code,"*_cPtr = *return_value;\n"); Printf(f->code,"*_cPtr = *return_value;\n");
Printf(f->code,"INIT_ZVAL(*return_value);\n"); Printf(f->code,"INIT_ZVAL(*return_value);\n");
if (! shadow) { if (shadow && php_version == 4) {
Printf(f->code,"*return_value=*_cPtr;\n");
} else {
Printf(f->code,"object_init_ex(obj,ptr_ce_swig_%s);\n",shadowrettype); Printf(f->code,"object_init_ex(obj,ptr_ce_swig_%s);\n",shadowrettype);
Printf(f->code,"add_property_zval(obj,\"_cPtr\",_cPtr);\n"); Printf(f->code,"add_property_zval(obj,\"_cPtr\",_cPtr);\n");
Printf(f->code,"*return_value=*obj;\n"); Printf(f->code,"*return_value=*obj;\n");
} else {
Printf(f->code,"*return_value=*_cPtr;\n");
} }
Printf(f->code, "}\n"); Printf(f->code, "}\n");
} }
@ -1400,7 +1399,7 @@ public:
current_class = n; current_class = n;
// String *use_class_name=SwigType_manglestr(SwigType_ltype(t)); // String *use_class_name=SwigType_manglestr(SwigType_ltype(t));
if(shadow) { if (shadow && php_version == 4) {
char *rename = GetChar(n, "sym:name"); char *rename = GetChar(n, "sym:name");
if (!addSymbol(rename,n)) return SWIG_ERROR; if (!addSymbol(rename,n)) return SWIG_ERROR;
@ -1450,7 +1449,7 @@ public:
Language::classHandler(n); Language::classHandler(n);
classnode=0; classnode=0;
if(shadow) { if (shadow && php_version == 4) {
DOH *key; DOH *key;
int gcount, scount; int gcount, scount;
String *s_propget=NewString(""); String *s_propget=NewString("");
@ -1705,7 +1704,8 @@ public:
// Only declare the member function if // Only declare the member function if
// we are doing shadow classes, and the function // we are doing shadow classes, and the function
// is not overloaded, or if it is overloaded, it is the dispatch function. // is not overloaded, or if it is overloaded, it is the dispatch function.
if(shadow && (!Getattr(n,"sym:overloaded") || !Getattr(n,"sym:nextSibling"))) { if (shadow && php_version == 4 &&
(!Getattr(n,"sym:overloaded") || !Getattr(n,"sym:nextSibling"))) {
char *realname = iname ? iname : name; char *realname = iname ? iname : name;
String *php_function_name = Swig_name_member(shadow_classname, realname); String *php_function_name = Swig_name_member(shadow_classname, realname);
create_command(realname,Swig_name_wrapper(php_function_name)); create_command(realname,Swig_name_wrapper(php_function_name));
@ -1809,7 +1809,7 @@ public:
Language::staticmemberfunctionHandler(n); Language::staticmemberfunctionHandler(n);
wrapperType = standard; wrapperType = standard;
if(shadow) { if (shadow && php_version == 4) {
String *symname = Getattr(n, "sym:name"); String *symname = Getattr(n, "sym:name");
char *realname = iname ? iname : name; char *realname = iname ? iname : name;
String *php_function_name = Swig_name_member(shadow_classname, realname); String *php_function_name = Swig_name_member(shadow_classname, realname);
@ -1897,7 +1897,7 @@ public:
int abstractConstructorHandler(Node *n) { int abstractConstructorHandler(Node *n) {
String *iname = GetChar(n, "sym:name"); String *iname = GetChar(n, "sym:name");
if (shadow) { if (shadow && php_version == 4) {
Wrapper *f; Wrapper *f;
f = NewWrapper(); f = NewWrapper();
@ -1922,9 +1922,12 @@ public:
char *name = GetChar(n, "name"); char *name = GetChar(n, "name");
char *iname = GetChar(n, "sym:name"); char *iname = GetChar(n, "sym:name");
if (shadow) { if (shadow && php_version == 4) {
native_constructor = (strcmp(iname, shadow_classname) == 0)?\ if (strcmp(iname, shadow_classname) == 0) {
NATIVE_CONSTRUCTOR:ALTERNATIVE_CONSTRUCTOR; native_constructor = NATIVE_CONSTRUCTOR;
} else {
native_constructor = ALTERNATIVE_CONSTRUCTOR;
}
} }
else { else {
native_constructor=0; native_constructor=0;
@ -1932,7 +1935,7 @@ public:
constructors++; constructors++;
Language::constructorHandler(n); Language::constructorHandler(n);
if(shadow) { if (shadow && php_version == 4) {
String *wname = NewStringf( "_wrap_new_%s", iname ); String *wname = NewStringf( "_wrap_new_%s", iname );
if(!Getattr(n,"sym:overloaded") || !Getattr(n,"sym:nextSibling")) { if(!Getattr(n,"sym:overloaded") || !Getattr(n,"sym:nextSibling")) {
char *realname = iname ? iname : name; char *realname = iname ? iname : name;