mirror of https://github.com/swig/swig
66 lines
985 B
OpenEdge ABL
66 lines
985 B
OpenEdge ABL
%module python_nondynamic
|
|
|
|
/*
|
|
Use the %pythonnondynamic directive to make the wrapped class a
|
|
nondynamic one, ie, a python class that doesn't dynamically add new
|
|
attributes. Hence, for the class
|
|
|
|
%pythonnondynamic A;
|
|
struct A
|
|
{
|
|
int a;
|
|
int b;
|
|
};
|
|
|
|
you will get:
|
|
|
|
aa = A()
|
|
aa.a = 1 # Ok
|
|
aa.b = 1 # Ok
|
|
aa.c = 3 # error
|
|
|
|
Since "nondynamic" is a feature, if you use
|
|
|
|
%pythonnondynamic;
|
|
|
|
it will make all the wrapped class nondynamic ones.
|
|
|
|
The implementation is based on the recipe:
|
|
|
|
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252158
|
|
|
|
*/
|
|
|
|
|
|
|
|
%pythonnondynamic A;
|
|
%pythondynamic C;
|
|
|
|
|
|
%inline %{
|
|
|
|
struct A
|
|
{
|
|
int a;
|
|
int b;
|
|
};
|
|
|
|
|
|
struct C
|
|
{
|
|
int a;
|
|
int b;
|
|
};
|
|
|
|
int retrieve_A_a(const struct A* self) { return self->a; }
|
|
int retrieve_A_b(const struct A* self) { return self->b; }
|
|
%}
|
|
%inline %{
|
|
#ifdef SWIGPYTHON_BUILTIN
|
|
int is_python_builtin() { return 1; }
|
|
#else
|
|
int is_python_builtin() { return 0; }
|
|
#endif
|
|
%}
|
|
|