CFFI - Fix seg faults when for %extend and using statements

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11136 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2009-02-20 23:55:37 +00:00
commit 3d05f50eab
2 changed files with 9 additions and 6 deletions

View file

@ -1,6 +1,9 @@
Version 1.3.39 (in progress) Version 1.3.39 (in progress)
============================ ============================
2008-02-20: wsfulton
[CFFI] Fix seg faults when for %extend and using statements.
2008-02-20: wsfulton 2008-02-20: wsfulton
Fix SF #2605955: -co option which broke in 1.3.37. Fix SF #2605955: -co option which broke in 1.3.37.

View file

@ -245,7 +245,7 @@ void CFFI::emit_defmethod(Node *n) {
ParmList *pl = Getattr(n, "parms"); ParmList *pl = Getattr(n, "parms");
int argnum = 0; int argnum = 0;
Node *parent = parentNode(n); Node *parent = getCurrentClass();
bool first = 0; bool first = 0;
for (Parm *p = pl; p; p = nextSibling(p), argnum++) { for (Parm *p = pl; p; p = nextSibling(p), argnum++) {
@ -300,7 +300,7 @@ void CFFI::emit_initialize_instance(Node *n) {
ParmList *pl = Getattr(n, "parms"); ParmList *pl = Getattr(n, "parms");
int argnum = 0; int argnum = 0;
Node *parent = parentNode(n); Node *parent = getCurrentClass();
for (Parm *p = pl; p; p = nextSibling(p), argnum++) { for (Parm *p = pl; p; p = nextSibling(p), argnum++) {
String *argname = Getattr(p, "name"); String *argname = Getattr(p, "name");
@ -337,18 +337,18 @@ void CFFI::emit_initialize_instance(Node *n) {
} }
void CFFI::emit_setter(Node *n) { void CFFI::emit_setter(Node *n) {
Node *p = parentNode(n); Node *parent = getCurrentClass();
Printf(f_clos, "(cl:defmethod (cl:setf %s) (arg0 (obj %s))\n (%s (ff-pointer obj) arg0))\n\n", Printf(f_clos, "(cl:defmethod (cl:setf %s) (arg0 (obj %s))\n (%s (ff-pointer obj) arg0))\n\n",
lispify_name(n, Getattr(n, "name"), "'method"), lispify_name(n, Getattr(n, "name"), "'method"),
lispify_name(p, lispy_name(Char(Getattr(p, "sym:name"))), "'class"), lispify_name(n, Getattr(n, "sym:name"), "'function")); lispify_name(parent, lispy_name(Char(Getattr(parent, "sym:name"))), "'class"), lispify_name(n, Getattr(n, "sym:name"), "'function"));
} }
void CFFI::emit_getter(Node *n) { void CFFI::emit_getter(Node *n) {
Node *p = parentNode(n); Node *parent = getCurrentClass();
Printf(f_clos, "(cl:defmethod %s ((obj %s))\n (%s (ff-pointer obj)))\n\n", Printf(f_clos, "(cl:defmethod %s ((obj %s))\n (%s (ff-pointer obj)))\n\n",
lispify_name(n, Getattr(n, "name"), "'method"), lispify_name(n, Getattr(n, "name"), "'method"),
lispify_name(p, lispy_name(Char(Getattr(p, "sym:name"))), "'class"), lispify_name(n, Getattr(n, "sym:name"), "'function")); lispify_name(parent, lispy_name(Char(Getattr(parent, "sym:name"))), "'class"), lispify_name(n, Getattr(n, "sym:name"), "'function"));
} }
int CFFI::memberfunctionHandler(Node *n) { int CFFI::memberfunctionHandler(Node *n) {