mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
*** empty log message ***
This commit is contained in:
parent
5009b622bd
commit
ac19f25620
@ -660,7 +660,7 @@ void InterfaceMakerPythonNative::write_ClasseDetails(ostream &out, Object * obj)
|
|||||||
for (fi = obj->_methods.begin(); fi != obj->_methods.end(); ++fi)
|
for (fi = obj->_methods.begin(); fi != obj->_methods.end(); ++fi)
|
||||||
{
|
{
|
||||||
Function *func = (*fi);
|
Function *func = (*fi);
|
||||||
if(isFunctionLegal(func))
|
if( (func))
|
||||||
{
|
{
|
||||||
ostringstream GetThis;
|
ostringstream GetThis;
|
||||||
GetThis << " "<<cClassName << " * local_this = NULL;\n";
|
GetThis << " "<<cClassName << " * local_this = NULL;\n";
|
||||||
@ -894,6 +894,13 @@ void InterfaceMakerPythonNative::write_module_support(ostream &out,ostream *out_
|
|||||||
write_sub_module(out,object);
|
write_sub_module(out,object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
out << "//********************************************************************\n";
|
||||||
|
out << "//*** Module Init Updcall .. Externally Defined Class\n";
|
||||||
|
out << "//********************************************************************\n";
|
||||||
|
|
||||||
|
for(std::set< std::string >::iterator ii = _external_imports.begin(); ii != _external_imports.end(); ii++)
|
||||||
|
out << "Dtool_" <<*ii <<"._Dtool_ClassInit(NULL);\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
out << "}\n";
|
out << "}\n";
|
||||||
@ -1267,7 +1274,7 @@ void InterfaceMakerPythonNative::write_module_class(ostream &out, Object *obj)
|
|||||||
if(HasAGetKeyFunction(obj->_itype))
|
if(HasAGetKeyFunction(obj->_itype))
|
||||||
{
|
{
|
||||||
out << "//////////////////\n";
|
out << "//////////////////\n";
|
||||||
out << "// A LocalHash(GetKey) Function for this type";
|
out << "// A LocalHash(getKey) Function for this type";
|
||||||
out << "// " <<ClassName << "\n";
|
out << "// " <<ClassName << "\n";
|
||||||
out << "//////////////////\n";
|
out << "//////////////////\n";
|
||||||
out << "static long DTool_HashKey_"<<ClassName << "(PyObject * self)\n";
|
out << "static long DTool_HashKey_"<<ClassName << "(PyObject * self)\n";
|
||||||
@ -1278,7 +1285,7 @@ void InterfaceMakerPythonNative::write_module_class(ostream &out, Object *obj)
|
|||||||
out << " {\n";
|
out << " {\n";
|
||||||
out << " return -1;\n";
|
out << " return -1;\n";
|
||||||
out << " };\n";
|
out << " };\n";
|
||||||
out << " return local_this->GetKey();\n";
|
out << " return local_this->get_key();\n";
|
||||||
out << "}\n\n";
|
out << "}\n\n";
|
||||||
has_local_hash = true;
|
has_local_hash = true;
|
||||||
}
|
}
|
||||||
@ -1480,7 +1487,7 @@ void InterfaceMakerPythonNative::write_module_class(ostream &out, Object *obj)
|
|||||||
else
|
else
|
||||||
out << " RegisterRuntimeClass(&Dtool_"<<ClassName<<",-1);\n";
|
out << " RegisterRuntimeClass(&Dtool_"<<ClassName<<",-1);\n";
|
||||||
|
|
||||||
|
out << " Py_INCREF(&Dtool_"<< ClassName << ".As_PyTypeObject());\n";
|
||||||
out << " }\n";
|
out << " }\n";
|
||||||
|
|
||||||
out << " if(module != NULL)\n";
|
out << " if(module != NULL)\n";
|
||||||
@ -1757,7 +1764,7 @@ int GetParnetDepth(CPPType *type)
|
|||||||
{
|
{
|
||||||
answer ++;
|
answer ++;
|
||||||
int deepest = 0;
|
int deepest = 0;
|
||||||
TypeIndex type_index = builder.get_type(TypeManager::unwrap(type),false);
|
TypeIndex type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &itype = idb->get_type(type_index);
|
const InterrogateType &itype = idb->get_type(type_index);
|
||||||
|
|
||||||
@ -2010,7 +2017,7 @@ void InterfaceMakerPythonNative::write_function_instance(ostream &out, Interface
|
|||||||
parameter_list += ", &" + param_name;
|
parameter_list += ", &" + param_name;
|
||||||
pname_for_pyobject += param_name;
|
pname_for_pyobject += param_name;
|
||||||
|
|
||||||
TypeIndex p_type_index = builder.get_type(TypeManager::unwrap(type),false);
|
TypeIndex p_type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &p_itype = idb->get_type(p_type_index);
|
const InterrogateType &p_itype = idb->get_type(p_type_index);
|
||||||
|
|
||||||
@ -2220,7 +2227,7 @@ void InterfaceMakerPythonNative::pack_return_value(ostream &out, int indent_leve
|
|||||||
{
|
{
|
||||||
if( TypeManager::is_ref_to_anything(orig_type))
|
if( TypeManager::is_ref_to_anything(orig_type))
|
||||||
{
|
{
|
||||||
TypeIndex type_index = builder.get_type(TypeManager::unwrap(type),false);
|
TypeIndex type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &itype = idb->get_type(type_index);
|
const InterrogateType &itype = idb->get_type(type_index);
|
||||||
std::string ows_memory_flag("true");
|
std::string ows_memory_flag("true");
|
||||||
@ -2249,7 +2256,7 @@ void InterfaceMakerPythonNative::pack_return_value(ostream &out, int indent_leve
|
|||||||
// this is were we type to returned a class/struct.. ie CPP TYpe
|
// this is were we type to returned a class/struct.. ie CPP TYpe
|
||||||
|
|
||||||
|
|
||||||
TypeIndex type_index = builder.get_type(TypeManager::unwrap(orig_type),false);
|
TypeIndex type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(orig_type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &itype = idb->get_type(type_index);
|
const InterrogateType &itype = idb->get_type(type_index);
|
||||||
indent(out, indent_level)
|
indent(out, indent_level)
|
||||||
@ -2266,7 +2273,7 @@ void InterfaceMakerPythonNative::pack_return_value(ostream &out, int indent_leve
|
|||||||
|
|
||||||
if(remap->_manage_reference_count)
|
if(remap->_manage_reference_count)
|
||||||
{
|
{
|
||||||
TypeIndex type_index = builder.get_type(TypeManager::unwrap(type),false);
|
TypeIndex type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &itype = idb->get_type(type_index);
|
const InterrogateType &itype = idb->get_type(type_index);
|
||||||
|
|
||||||
@ -2283,7 +2290,7 @@ void InterfaceMakerPythonNative::pack_return_value(ostream &out, int indent_leve
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TypeIndex type_index = builder.get_type(TypeManager::unwrap(orig_type),false);
|
TypeIndex type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(orig_type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &itype = idb->get_type(type_index);
|
const InterrogateType &itype = idb->get_type(type_index);
|
||||||
|
|
||||||
@ -2304,7 +2311,7 @@ void InterfaceMakerPythonNative::pack_return_value(ostream &out, int indent_leve
|
|||||||
}
|
}
|
||||||
else if( TypeManager::is_struct(orig_type->as_pointer_type()->_pointing_at) )
|
else if( TypeManager::is_struct(orig_type->as_pointer_type()->_pointing_at) )
|
||||||
{
|
{
|
||||||
TypeIndex type_index = builder.get_type(TypeManager::unwrap(orig_type),false);
|
TypeIndex type_index = builder.get_type(TypeManager::unwrap(TypeManager::resolve_type(orig_type)),false);
|
||||||
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
InterrogateDatabase *idb = InterrogateDatabase::get_ptr();
|
||||||
const InterrogateType &itype = idb->get_type(type_index);
|
const InterrogateType &itype = idb->get_type(type_index);
|
||||||
|
|
||||||
@ -2544,42 +2551,46 @@ void InterfaceMakerPythonNative::generate_wrappers()
|
|||||||
//
|
//
|
||||||
// is the cpp object supported by by the dtool_py interface..
|
// is the cpp object supported by by the dtool_py interface..
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
bool InterfaceMakerPythonNative::isCppTypeLegal(CPPType *ctype)
|
bool InterfaceMakerPythonNative::isCppTypeLegal(CPPType *in_ctype)
|
||||||
{
|
{
|
||||||
if(ctype == NULL)
|
if(in_ctype == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(builder.in_ignoretype(ctype->get_local_name(&parser)))
|
if(builder.in_ignoretype(in_ctype->get_local_name(&parser)))
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool answer = false;
|
//bool answer = false;
|
||||||
CPPType *type = TypeManager::unwrap(ctype);
|
CPPType *type = TypeManager::unwrap(TypeManager::resolve_type(in_ctype));
|
||||||
|
type = TypeManager::unwrap(type);
|
||||||
//CPPType *type = ctype;
|
//CPPType *type = ctype;
|
||||||
|
|
||||||
if(TypeManager::is_basic_string_char(type))
|
if(TypeManager::is_basic_string_char(type))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
answer = true;
|
|
||||||
}
|
}
|
||||||
else if(TypeManager::is_simple(type))
|
else if(TypeManager::is_simple(type))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
answer = true;
|
|
||||||
}
|
}
|
||||||
else if(builder.in_forcetype(ctype->get_local_name(&parser)))
|
else if(builder.in_forcetype(in_ctype->get_local_name(&parser)))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if(TypeManager::IsExported(type) == true)
|
else if(TypeManager::IsExported(type) == true)
|
||||||
{
|
{
|
||||||
answer = true;
|
return true;
|
||||||
}
|
}
|
||||||
else if(TypeManager::is_pointer_to_PyObject(ctype) == true)
|
else if(TypeManager::is_pointer_to_PyObject(in_ctype) == true)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
//if(answer == false)
|
||||||
|
// printf(" -------------------- Bad Type ?? %s \n",type->get_local_name().c_str());
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// Function :isExportThisRun
|
// Function :isExportThisRun
|
||||||
@ -2621,7 +2632,10 @@ bool InterfaceMakerPythonNative::isRemapLegal( FunctionRemap &remap)
|
|||||||
{
|
{
|
||||||
// return must be legal and managable..
|
// return must be legal and managable..
|
||||||
if(!isCppTypeLegal(remap._return_type->get_orig_type()))
|
if(!isCppTypeLegal(remap._return_type->get_orig_type()))
|
||||||
|
{
|
||||||
|
// printf(" isRemapLegal Return Is Bad %s\n",remap._return_type->get_orig_type()->get_fully_scoped_name().c_str());
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// ouch .. bad things will happen here .. do not even try..
|
// ouch .. bad things will happen here .. do not even try..
|
||||||
if(remap._ForcedVoidReturn)
|
if(remap._ForcedVoidReturn)
|
||||||
@ -2648,9 +2662,14 @@ bool InterfaceMakerPythonNative::isFunctionLegal( Function *func)
|
|||||||
{
|
{
|
||||||
FunctionRemap *remap = (*ri);
|
FunctionRemap *remap = (*ri);
|
||||||
if(isRemapLegal(*remap))
|
if(isRemapLegal(*remap))
|
||||||
|
{
|
||||||
|
// printf(" Function Is Marked Legal %s\n",func->_name.c_str());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// printf(" Function Is Marked Illegal %s\n",func->_name.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
@ -2773,7 +2792,7 @@ bool InterfaceMakerPythonNative::HasAGetKeyFunction(const InterrogateType &itype
|
|||||||
{
|
{
|
||||||
FunctionIndex func_index = itype_class.get_method(mi);
|
FunctionIndex func_index = itype_class.get_method(mi);
|
||||||
const InterrogateFunction &ifunc = idb->get_function(func_index);
|
const InterrogateFunction &ifunc = idb->get_function(func_index);
|
||||||
if(ifunc.get_name() == "GetKey")
|
if(ifunc.get_name() == "get_key")
|
||||||
{
|
{
|
||||||
if (ifunc._instances != (InterrogateFunction::Instances *)NULL)
|
if (ifunc._instances != (InterrogateFunction::Instances *)NULL)
|
||||||
{
|
{
|
||||||
@ -2918,3 +2937,5 @@ bool InterfaceMakerPythonNative::NeedsAReprFunction(const InterrogateType &itype
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,7 +130,18 @@ read_command_file(istream &in) {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void InterrogateBuilder::
|
void InterrogateBuilder::
|
||||||
do_command(const string &command, const string ¶ms) {
|
do_command(const string &command, const string ¶ms) {
|
||||||
if (command == "forcetype") {
|
|
||||||
|
if(command == "forcevisible")
|
||||||
|
{
|
||||||
|
CPPType *type = parser.parse_type(params);
|
||||||
|
if (type == (CPPType *)NULL) {
|
||||||
|
nout << "Unknown type: allowtype " << params << "\n";
|
||||||
|
} else {
|
||||||
|
type = type->resolve_type(&parser, &parser);
|
||||||
|
type->_vis = min_vis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (command == "forcetype") {
|
||||||
// forcetype explicitly exports the given type.
|
// forcetype explicitly exports the given type.
|
||||||
CPPType *type = parser.parse_type(params);
|
CPPType *type = parser.parse_type(params);
|
||||||
if (type == (CPPType *)NULL) {
|
if (type == (CPPType *)NULL) {
|
||||||
|
@ -1429,8 +1429,13 @@ bool TypeManager::IsExported(CPPType *in_type)
|
|||||||
|
|
||||||
CPPScope::Declarations::const_iterator di;
|
CPPScope::Declarations::const_iterator di;
|
||||||
for (di = scope->_declarations.begin();di != scope->_declarations.end(); di++)
|
for (di = scope->_declarations.begin();di != scope->_declarations.end(); di++)
|
||||||
|
{
|
||||||
if ((*di)->_vis <= min_vis)
|
if ((*di)->_vis <= min_vis)
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (base_type->get_subtype() == CPPDeclaration::ST_instance)
|
else if (base_type->get_subtype() == CPPDeclaration::ST_instance)
|
||||||
{
|
{
|
||||||
@ -1477,13 +1482,13 @@ bool TypeManager::IsExported(CPPType *in_type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
// printf("---------------------> Visibility Failed %s %d Vis=%d, Minvis=%d\n",
|
printf("---------------------> Visibility Failed %s %d Vis=%d, Minvis=%d\n",
|
||||||
// base_type->get_fully_scoped_name().c_str(),
|
base_type->get_fully_scoped_name().c_str(),
|
||||||
// base_type->get_subtype(),
|
base_type->get_subtype(),
|
||||||
// base_type->_vis,
|
base_type->_vis,
|
||||||
// min_vis);
|
min_vis);
|
||||||
|
*/
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ typedef void ( *PyModuleClassInit)(PyObject *module);
|
|||||||
//DTOOL_C_LINKAGE inline long DTool_HashKey(PyObject * inst);
|
//DTOOL_C_LINKAGE inline long DTool_HashKey(PyObject * inst);
|
||||||
inline Dtool_PyTypedObject * Dtool_RuntimeTypeDtoolType(int type);
|
inline Dtool_PyTypedObject * Dtool_RuntimeTypeDtoolType(int type);
|
||||||
inline void Dtool_Deallocate_General(PyObject * self);
|
inline void Dtool_Deallocate_General(PyObject * self);
|
||||||
|
inline int DTOOL_PyObject_Compare(PyObject *v1, PyObject *v2);
|
||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// THIS IS THE INSTANCE CONTAINER FOR ALL panda py objects....
|
// THIS IS THE INSTANCE CONTAINER FOR ALL panda py objects....
|
||||||
@ -208,7 +208,7 @@ EXPORT_THIS Dtool_PyTypedObject Dtool_##CLASS_NAME = {\
|
|||||||
0, /*tp_print*/\
|
0, /*tp_print*/\
|
||||||
0, /*tp_getattr*/\
|
0, /*tp_getattr*/\
|
||||||
0, /*tp_setattr*/\
|
0, /*tp_setattr*/\
|
||||||
0, /*tp_compare*/\
|
&DTOOL_PyObject_Compare, /*tp_compare*/\
|
||||||
0, /*tp_repr*/\
|
0, /*tp_repr*/\
|
||||||
&Dtool_PyNumberMethods_##CLASS_NAME, /*tp_as_number*/\
|
&Dtool_PyNumberMethods_##CLASS_NAME, /*tp_as_number*/\
|
||||||
0, /*tp_as_sequence*/\
|
0, /*tp_as_sequence*/\
|
||||||
@ -343,6 +343,21 @@ DTOOL_C_LINKAGE inline void * DTOOL_Call_GetPointerThisClass(PyObject *self, Dto
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
DTOOL_C_LINKAGE inline void * DTOOL_Call_GetPointerThis(PyObject *self)
|
||||||
|
{
|
||||||
|
if(self != NULL)
|
||||||
|
{
|
||||||
|
if(DtoolCanThisBeAPandaInstance(self))
|
||||||
|
{
|
||||||
|
Dtool_PyInstDef * pyself = (Dtool_PyInstDef *) self;
|
||||||
|
return pyself->_ptr_to_object;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// Function : DTool_CreatePyInstanceTyped
|
// Function : DTool_CreatePyInstanceTyped
|
||||||
//
|
//
|
||||||
@ -586,6 +601,13 @@ inline void Dtool_PyModuleInitHelper( LibrayDef *defs[], char * modulename)
|
|||||||
|
|
||||||
PyObject * module = Py_InitModule(modulename,newdef);
|
PyObject * module = Py_InitModule(modulename,newdef);
|
||||||
|
|
||||||
|
if(module == NULL)
|
||||||
|
{
|
||||||
|
PyErr_SetString(PyExc_TypeError, "Py_InitModule Returned NULL ???");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// the constant inits... enums, classes ...
|
// the constant inits... enums, classes ...
|
||||||
for(int y = 0; defs[y] != NULL; y++)
|
for(int y = 0; defs[y] != NULL; y++)
|
||||||
defs[y]->_constants(module);
|
defs[y]->_constants(module);
|
||||||
@ -683,6 +705,67 @@ inline long DTool_HashKey(PyObject * inst)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Compare v to w. Return
|
||||||
|
-1 if v < w or exception (PyErr_Occurred() true in latter case).
|
||||||
|
0 if v == w.
|
||||||
|
1 if v > w.
|
||||||
|
XXX The docs (C API manual) say the return value is undefined in case
|
||||||
|
XXX of error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
inline int DTOOL_PyObject_Compare(PyObject *v1, PyObject *v2)
|
||||||
|
{
|
||||||
|
// if we are related..
|
||||||
|
if(PyType_IsSubtype(v1->ob_type, v2->ob_type))
|
||||||
|
{
|
||||||
|
void * v1_this = DTOOL_Call_GetPointerThis(v1);
|
||||||
|
void * v2_this = DTOOL_Call_GetPointerThis(v2);
|
||||||
|
if(v1_this != NULL && v2_this != NULL) // both are our types...
|
||||||
|
{
|
||||||
|
PyObject * func = PyObject_GetAttrString(v1, "compareTo");
|
||||||
|
if (func == NULL)
|
||||||
|
{
|
||||||
|
PyErr_Clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PyObject * res = NULL;
|
||||||
|
PyObject * args = Py_BuildValue("(O)", v2);
|
||||||
|
if (args != NULL)
|
||||||
|
{
|
||||||
|
res = PyObject_Call(func, args, NULL);
|
||||||
|
Py_DECREF(args);
|
||||||
|
}
|
||||||
|
Py_DECREF(func);
|
||||||
|
PyErr_Clear(); // just in case the function threw an error
|
||||||
|
// only use if the cuntion return an INT... hmm
|
||||||
|
if(res != NULL && PyInt_Check(res))
|
||||||
|
{
|
||||||
|
int answer = PyInt_AsLong(res);
|
||||||
|
Py_DECREF(res);
|
||||||
|
return answer;
|
||||||
|
}
|
||||||
|
if(res != NULL)
|
||||||
|
Py_DECREF(res);
|
||||||
|
|
||||||
|
};
|
||||||
|
// CompareTo Failed some how :(
|
||||||
|
// do a this compare .. if Posible...
|
||||||
|
if(v1_this < v2_this)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if(v1_this > v2_this)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// ok drop to a basic object compare hmmmmmm
|
||||||
|
}
|
||||||
|
if(v1 < v2)
|
||||||
|
return -1;
|
||||||
|
if(v1 > v2)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // PY_PANDA_H_
|
#endif // PY_PANDA_H_
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user