/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/test-suite/python/director_nested_runme.py
70 строк
2 KB
William S Fulton
Fix undefined behaviour in directorout typemaps for void * and const char *&
15 май 2025, 00:10
15 май 2025, 00:10
53f4751
Код
Авторство
О чём код?
from director_nested import * class A(FooBar_int): def do_step(self): return "A::do_step;" def get_value(self): return "A::get_value" pass a = A() if a.step() != "Bar::step;Foo::advance;Bar::do_advance;A::do_step;": raise RuntimeError("Bad A virtual resolution") class B(FooBar_int): def do_advance(self): return "B::do_advance;" + self.do_step() def do_step(self): return "B::do_step;" def get_value(self): return 1 pass b = B() if b.step() != "Bar::step;Foo::advance;B::do_advance;B::do_step;": raise RuntimeError("Bad B virtual resolution") class C(FooBar_int): def do_advance(self): return "C::do_advance;" + FooBar_int.do_advance(self) def do_step(self): return "C::do_step;" def get_value(self): return 2 def get_name(self): # We suppressed the warning: # Warning 473: Returning a reference, pointer or pointer wrapper in a director method is not recommended. # An extra reference to the returned string is now required to keep it from being deleted as the C code # uses a pointer to the internal Python string which would otherwise be deleted and then the pointer would # point to garbage. self.hack_extra_reference = FooBar_int.get_name(self) + " hello" return self.hack_extra_reference pass cc = C() c = FooBar_int.get_self(cc) c.advance() if c.get_name() != "FooBar::get_name hello": raise RuntimeError if c.name() != "FooBar::get_name hello": raise RuntimeError