git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6369 626c5289-ae23-0410-ae9c-e8d60b6d4f22
41 lines
685 B
OpenEdge ABL
41 lines
685 B
OpenEdge ABL
%module derived_byvalue
|
|
|
|
%inline %{
|
|
|
|
struct Foo {
|
|
int x;
|
|
|
|
// this works
|
|
int rmethod(const Foo& f) { return f.x; }
|
|
|
|
// this doesn't when DerFoo (below) is introduced
|
|
int method(Foo f) { return f.x; }
|
|
};
|
|
|
|
struct Bar {
|
|
Foo a;
|
|
struct Foo b;
|
|
};
|
|
|
|
/*
|
|
When the next derived class is declared, the
|
|
following bad method is generated
|
|
|
|
static void *_DerFooTo_Foo(void *x) { // **** bad ****
|
|
return (void *)((Foo) ((DerFoo) x));
|
|
}
|
|
|
|
static void *_p_DerFooTo_p_Foo(void *x) { // *** good ***
|
|
return (void *)((Foo *) ((DerFoo *) x));
|
|
}
|
|
|
|
if the derived class is deleted, it works again
|
|
|
|
if the previos Foo::method
|
|
|
|
*/
|
|
struct DerFoo : Foo {
|
|
};
|
|
|
|
#
|
|
%}
|