Chicken: multiple_inheritance test now passes, and we correctly handle %ignored classes

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7683 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
John Lenz 2005-10-19 06:27:56 +00:00
commit 464ae5b1b0
3 changed files with 39 additions and 9 deletions

View file

@ -1,6 +1,22 @@
Version 1.3.27 (October 15, 2005)
=================================
10/18/2005: wuzzeb
Chicken:
- Correctly handle %ignored classes
- Correctly convert long, long long, unsigned long, etc
to chicken primitives. (Thanks to Felix Winkelmann)
- Using argout parameters when the return value was a
wrapped pointer caused a memory corruption. The chicken
garbage collector moved a pointer out from under us.
This is now fixed by running all the proxy creation
functions as continuations after the wrapper function
returns. As part of this, we no longer need the
chickenfastproxy flag on output typemaps.
- using -proxy and -nocollection together works now
Before, it was not exporting the destructor in the proxy
wrapper.
10/18/2005: mmatus
Unifying the typemaps for

View file

@ -12,4 +12,20 @@
(check (= (foo fb) 2))
(check (= (fooBar fb) 3))
(define id1 (make <IgnoreDerived1>))
(check (= (bar id1) 1))
(check (= (ignorederived1 id1) 7))
(define id2 (make <IgnoreDerived2>))
(check (= (bar id2) 1))
(check (= (ignorederived2 id2) 8))
(define id3 (make <IgnoreDerived3>))
(check (= (bar id3) 1))
(check (= (ignorederived3 id3) 9))
(define id4 (make <IgnoreDerived4>))
(check (= (bar id4) 1))
(check (= (ignorederived4 id4) 10))
(exit 0)

View file

@ -1058,19 +1058,17 @@ CHICKEN::classHandler(Node *n)
if (!addSymbol(class_name,n)) return SWIG_ERROR;
/* Handle inheritance */
String *base_class = NewString("<");
String *base_class = NewString("");
List *baselist = Getattr(n,"bases");
if (baselist && Len(baselist)) {
Iterator base = First(baselist);
while (base.item) {
Printv(base_class, Getattr(base.item, "sym:name"),NIL);
base = Next(base);
if (base.item) {
Printf(base_class, "> <");
}
}
if (!Getattr(base.item, "feature:ignore"))
Printv(base_class, "<", Getattr(base.item, "sym:name"), "> ", NIL);
base = Next(base);
}
Printf(base_class, ">");
}
Replaceall(base_class, "_", "-");
String *scmmod = NewString(module);
@ -1080,7 +1078,7 @@ CHICKEN::classHandler(Node *n)
" (make <swig-metaclass-", scmmod, "> 'name \"", short_class_name, "\"\n", NIL);
Delete(scmmod);
if (Len(base_class) > 2) {
if (Len(base_class)) {
Printv(clos_class_defines," 'direct-supers (list ", base_class, ")\n", NIL);
} else {
Printv(clos_class_defines," 'direct-supers (list <object>)\n", NIL);