From 926aaf2e35d30136d0fb0fde8d45c53836916d28 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Mon, 13 Nov 2006 22:32:42 +0000 Subject: [PATCH] More %extend tests - especially derived classes and $self tests git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9554 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Examples/test-suite/common.mk | 1 + SWIG/Examples/test-suite/extend.i | 52 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 SWIG/Examples/test-suite/extend.i diff --git a/SWIG/Examples/test-suite/common.mk b/SWIG/Examples/test-suite/common.mk index bda27791c..362413fca 100644 --- a/SWIG/Examples/test-suite/common.mk +++ b/SWIG/Examples/test-suite/common.mk @@ -152,6 +152,7 @@ CPP_TEST_CASES += \ evil_diamond_prop \ exception_order \ exception_partial_info \ + extend \ extend_default \ extend_placement \ extend_template \ diff --git a/SWIG/Examples/test-suite/extend.i b/SWIG/Examples/test-suite/extend.i new file mode 100644 index 000000000..cb0e2b236 --- /dev/null +++ b/SWIG/Examples/test-suite/extend.i @@ -0,0 +1,52 @@ +%module extend + +%extend Base { + ~Base() { + delete $self; + } + static int zeroVal() { + return 0; + } + virtual int currentValue() { + return $self->value; + } + int extendmethod(int v) { + int ret = $self->method(v); + return ret * 2; + } +}; + +%inline %{ +struct Base { + Base(int v = 0) : value(v) {} + int value; + virtual int method(int v) { + } +}; +struct Derived : Base { + double actualval; +}; +%} + +%{ + double extendval = 0; + double Derived_extendval_get(Derived *self) { + return self->actualval * 100; + } + void Derived_extendval_set(Derived *self, double d) { + self->actualval = d/100; + } +%} + +%extend Derived { + Derived(int v) { + Derived *$self = new Derived(); + $self->value = v*2; + return $self; + } + virtual int method(int v) { + int ret = $self->Base::method(v); + return ret * 2; + } + double extendval; +}