| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Reviewed by Hugo Parent <hugo.lima@openbossa.org>
|
|
|
|
|
|
|
|
| |
python arguments to C++.
This fixes bug #133
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The simplest definition of duck punching for our purposes is
the ability to change the definition of a method in an instance of
a class.
To allow this behaviour the SbkBaseWrapper structure had to be
extended with a 'ob_dict' which is a PyObject pointer to the instance
dictionary. It is originally set to NULL until the user tries to access
it. This dictionary could be accessed through the '__dict__' instance
property. For now it is read-only.
The generator was updated to handle the instance dictionary, and an
extensive duck punching test was also added.
Reviewed by Hugo Parente Lima <hugo.lima@openbossa.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a class contains one or more overloads with static and non-static
signatures Python must accept both usages, but for this to work some
steps must be taken:
* The overload method is defined with its own PyMethodDef structure,
instead of being parte of an array of definitions.
* The overload method is marked as static in the PyMethodDef.
* This method definition is inserted in the PyMethodDef array for the
class.
* A tp_getattro function is generated and registered for the Python
wrapper. It is used to intercept instance calls to methods with
static versions to add the 'self' to the PyMethod.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
| |
Reviewed by Hugo Parente Lima <hugo.lima@openbossa.org>
|
|
|
|
|
| |
Generated code now makes use of the new convenience classes instead
of directly using the Python provided PyGILState_STATE and PyThreadState.
|
|
|
|
|
|
|
|
|
|
| |
The code to write the definition of cppSelf was in two places and
contained an #ifdef clause, now it is a writer method.
Also added the ShibokenGenerator::cppSelfVariableName() method
to be used instead of directly writing the "cppSelf" string.
Updated custom code on test binding to remove warning.
Reviewed by Hugo Parente Lima <hugo.lima@openbossa.org>
|
|
|
|
|
|
| |
A code injection on the tests was updated.
Reviewed by Hugo Parente Lima <hugo.lima@openbossa.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The previous behaviour was to pass the result, if any, straight to
the to-Python-converter method. Separating the C++ from the Python
part allows us to release the thread lock when calling C++ and taking
it back before calling the converter filled with Python calls.
Also renamed "retvalVariableName()" to the more meaninful name
"pythonReturnVariableName()" and added "cppReturnVariableName()".
Also updated the type system variable replacement to recognize "%0" as
"cppReturnVariableName()".
|
|
|
|
|
|
| |
operator overloads.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
|
|
| |
bindinded method names.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
| |
parameter.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The problem:
- There are two class, A and B, B inherits from A.
- You are inside a virtual method reimplemented in python with just one parameter of type A*.
- But the object referenced by a variable of type A* is an instance of B and it was created by C++,
not Python!
- Shiboken needs to create a PyObject of type B, not A! This does not makes sense for C++, but does
for Python, because python variables does not store type information, just values.
To achieve this we use RTTI to get the real type name of a variable, then we create the PyObject using
the TypeResolver infrastructure initially developed to help with signal slot problems. In other words,
the TypeResolver class has been moved from libpyside to libshiboken.
|
|
|
|
| |
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
|
|
|
| |
The C++ object instanciation was made in tp_init function instead of tp_new function. Now tp_new just
create a useless python object which will be filled in the tp_init function.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
| |
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
| |
|
|
|
|
| |
Reviewer: Hugo Lima <hugo.lima@openbossa.org>
|
|
|
|
|
|
|
| |
A NULL pointer in the "lastArg" parameter of writeCodeSnips means that
the function being processed will be called without arguments. The
behavior prior to this change was that a NULL lastArg indicates that
all arguments are to be used.
|
|
|
|
|
|
| |
dynamic one.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
template struct
In addition to the mere use of SbkCopyCppObject to copy C++ objects,
it is needed to know if a C++ type has a C++ wrapped produced by the
generator. To solve this SbkCopyCppObject was transformed in the template
struct CppObjectCopier with the methods copy and the constant member
isCppWrapper.
The Converter[Base]<>::createWrapper methods were replaced by template
function SbkCreateWrapper.
Also some refactoring was made on the Converters code to improve legibility.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
|
|
|
|
| |
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
|
| |
|
| |
|
|
|
|
| |
the flag enable-pyside-extensions is on.
|
|
|
|
|
|
|
|
|
|
| |
You need to enable these extensions if you are generating a binding for a Qt-based library
and need to pass some types through the signal slots mechanism.
If you turn this flag on, you also need to link the generated bindings with the
libpyside, besides add libpyside include path to your project.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
| |
modifications.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
SbkBaseWrapperType.
The wrapped classes are described with a SbkBaseWrapperType structure which
extends the PyTypeObject with information about multiple inheritance and
parenting ownership. This works well for the classes produced by the generator
but inheriting classes written in Python continues using the PyTypeObject to
describe themselves. To fix this the SbkBaseWrapperType is now a metatype for
all the wrapped classes and anyone inheriting from them.
In addition all the wrapped classes now inherit from SbkBaseWrapper, since
Python's PyType_Ready method need that multiple inheriting classes have a
common base class with the same size of the classes involved in the multiple
inheritance, which disqualifies Python's base "object" class.
The metatype and the base wrapper type are initialized by calling the new
Shiboken::init_shiboken() function. This is done by all the imported binding
modules, but it is really run only in the first call.
Another noteworthy change is the replacement of PyTypeObject as a basis for
SbkBaseWrapperType by the PyHeapTypeObject, since the latter is the proper
choice for types created on the heap, e.g. user defined classes extending
the generated wrapper classes.
Reviewed by Hugo Lima <hugo.lima@openbossa.org>
|
|
|
|
| |
with SbkBaseWrapper.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added the template function
T* SbkCopyCppObject(const T& cppobj);
whose task is simply to copy a C++ object. If the binding has a C++ class
wrapper for it, the function is specialized to use the copy constructor
of the C++ wrapper class. This replaces the Converter<T>::copyCppObject
method.
Also moved implementation of Converter<T>::toPython from the generator to
ConverterBase<T> in the conversions header, for it makes use of the
SbkCopyCppObject.
Reviewed by Lauro Neto <lauro.neto@openbossa.org>
|
|
|
|
| |
Reviewed by Hugo Lima <hugo.lima@openbossa.org>
|
|
|
|
| |
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To avoid confusion of Python stuff with Shiboken generated stuff.
For example: a C++ class called "String" would have the PyString_Type
wrapper generated for it, mixing with the proper Python PyString_Type;
now the generate code will have things like SbkString_Type, SbkString_New,
SbkString_someMethod, and so on.
PyBaseWrapper and its variants were renamed to SbkBaseWrapper.
PyType<T>() is now SbkType<T>()
PyEnumObject was renamed to SbkEnumObject.
|
|
|
|
|
|
|
|
|
|
|
| |
The Shiboken_TypeCheck calls Python's PyObject_TypeCheck using the
type pointer stored in PyType<T> for the type being checked.
Conversion<T*>::toCpp(pyobj) converter tries first to convert pyobj
to the Python wrapper for type T and only second to any of the
convertible types. If pyobj is neither of those, 0 is returned as
the C++ object. This works fine for Py_None and invalid values are
not expected to be passed because the generated code checked the
types first.
|
|
|
|
|
|
|
| |
auto generated by the compiler using the function PyType<T> to get
PyTypeObject of a type T.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
|
|
|
|
| |
classes.
The Python wrapper constructor for classes that have multiple inheritance
now copies the needed information (mi_offsets, mi_init and mi_specialcast)
from the nearest wrapped class parent in the inheritance hierarchy.
|
|
|
|
| |
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
|
|
|
| |
object-types.
|
|
|
|
|
|
|
|
|
| |
Using the CLASS->tp_mro, which contains the list of method resolution for
a Python class, to find an override for a wrapped C++ virtual method is
more correct than relying in the ShiboTypeObject's baseWrapperType value.
Also baseWrapperType was removed from ShiboTypeObject structure.
Reviewed by Hugo Lima <hugo.lima@openbossa.org>
|
| |
|
|
|
|
| |
custom type.
|
|
|
|
|
|
|
| |
The parentship was expressed inverted in the type system and was
working because the generator implementation was also screwed.
Reviewed by Hugo Lima <hugo.lima@openbossa.org>
|
|
|
|
| |
value-type pointers.
|
|
|
|
| |
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
|
| |
|
|
|
|
|
| |
When enabled, this heuristic will check every constructor for an argument named "parent",
if the argument is a pointer, then it'll be the parent of this object.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Simple ownership transference, i.e. without parenting, is now performed
by the new BindingManager::transferOwnershipToCpp method. It remove the
parent of the transfered object and proceeds transfer or invalidation
if needed. The generated code for simple ownership transfer from Python
to C++ now reflects this change.
Fixed the method BlackBox::keepObjectType that steals an ObjectType
ownership to C++ to remove it from its parent also. The BlackBox
class does not take care of the stolen object as a proper parent
would, but its destructor deletes the object, so the "unparenting"
is needed to avoid freeing the same memory twice.
Created an unit test that adds children to a parent ObjectType and then
steal the children to C++ with BlackBox.keepObjectType.
Reviewed by Hugo Lima <hugo.lima@openbossa.org>
|
|
|
|
| |
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
|