]> git.saurik.com Git - wxWidgets.git/blob - wxPython/SWIG/swig.python.patch
Reworked how stock objects are initialized. They now have an
[wxWidgets.git] / wxPython / SWIG / swig.python.patch
1 Index: Source/Modules/python.cxx
2 ===================================================================
3 RCS file: /cvsroot/SWIG/Source/Modules/python.cxx,v
4 retrieving revision 1.25
5 diff -u -r1.25 python.cxx
6 --- Source/Modules/python.cxx 23 Sep 2003 21:26:04 -0000 1.25
7 +++ Source/Modules/python.cxx 30 Oct 2003 02:39:33 -0000
8 @@ -292,6 +292,9 @@
9 static String *shadow_indent = 0;
10 static int in_class = 0;
11 static int classic = 0;
12 +static int modern = 0;
13 +static int apply = 0;
14 +static int new_repr = 0;
15
16 /* C++ Support + Shadow Classes */
17
18 @@ -306,6 +309,9 @@
19 -interface <lib>- Set the lib name to <lib>\n\
20 -keyword - Use keyword arguments\n\
21 -classic - Use classic classes only\n\
22 + -modern - Use modern python features only, without compatibility code\n\
23 + -apply - Use apply() in proxy classes\n\
24 + -new_repr - Use more informative version of __repr__ in proxy classes\n\
25 -noexcept - No automatic exception handling\n\
26 -noproxy - Don't generate proxy classes \n\n";
27
28 @@ -344,6 +350,12 @@
29 } else if ((strcmp(argv[i],"-shadow") == 0) || ((strcmp(argv[i],"-proxy") == 0))) {
30 shadow = 1;
31 Swig_mark_arg(i);
32 + } else if (strcmp(argv[i],"-apply") == 0) {
33 + apply = 1;
34 + Swig_mark_arg(i);
35 + } else if (strcmp(argv[i],"-new_repr") == 0) {
36 + new_repr = 1;
37 + Swig_mark_arg(i);
38 } else if ((strcmp(argv[i],"-noproxy") == 0)) {
39 shadow = 0;
40 Swig_mark_arg(i);
41 @@ -353,6 +365,10 @@
42 } else if (strcmp(argv[i],"-classic") == 0) {
43 classic = 1;
44 Swig_mark_arg(i);
45 + } else if (strcmp(argv[i],"-modern") == 0) {
46 + classic = 0;
47 + modern = 1;
48 + Swig_mark_arg(i);
49 } else if (strcmp(argv[i],"-help") == 0) {
50 fputs(usage,stderr);
51 } else if (strcmp (argv[i], "-ldflags") == 0) {
52 @@ -480,47 +496,54 @@
53 Printv(f_shadow,
54 "# This file was created automatically by SWIG.\n",
55 "# Don't modify this file, modify the SWIG interface instead.\n",
56 - "# This file is compatible with both classic and new-style classes.\n",
57 NIL);
58
59 - Printf(f_shadow,"import %s\n", module);
60 -
61 - // Python-2.2 object hack
62 -
63 - Printv(f_shadow,
64 - "def _swig_setattr(self,class_type,name,value):\n",
65 - tab4, "if (name == \"this\"):\n",
66 - tab4, tab4, "if isinstance(value, class_type):\n",
67 - tab4, tab8, "self.__dict__[name] = value.this\n",
68 - tab4, tab8, "if hasattr(value,\"thisown\"): self.__dict__[\"thisown\"] = value.thisown\n",
69 - tab4, tab8, "del value.thisown\n",
70 - tab4, tab8, "return\n",
71 - // tab8, "if (name == \"this\") or (name == \"thisown\"): self.__dict__[name] = value; return\n",
72 - tab4, "method = class_type.__swig_setmethods__.get(name,None)\n",
73 - tab4, "if method: return method(self,value)\n",
74 - tab4, "self.__dict__[name] = value\n\n",
75 - NIL);
76 + if (! modern) {
77 + Printv(f_shadow,
78 + "# This file is compatible with both classic and new-style classes.\n",
79 + NIL);
80 + }
81 +
82 + Printf(f_shadow,"\nimport %s\n\n", module);
83
84 - Printv(f_shadow,
85 - "def _swig_getattr(self,class_type,name):\n",
86 - tab4, "method = class_type.__swig_getmethods__.get(name,None)\n",
87 - tab4, "if method: return method(self)\n",
88 - tab4, "raise AttributeError,name\n\n",
89 - NIL);
90 + if (! modern) {
91 + // Python-2.2 object hack
92 + Printv(f_shadow,
93 + "def _swig_setattr(self,class_type,name,value):\n",
94 + tab4, "if (name == \"this\"):\n",
95 + tab4, tab4, "if isinstance(value, class_type):\n",
96 + tab4, tab8, "self.__dict__[name] = value.this\n",
97 + tab4, tab8, "if hasattr(value,\"thisown\"): self.__dict__[\"thisown\"] = value.thisown\n",
98 + tab4, tab8, "del value.thisown\n",
99 + tab4, tab8, "return\n",
100 + // tab8, "if (name == \"this\") or (name == \"thisown\"): self.__dict__[name] = value; return\n",
101 + tab4, "method = class_type.__swig_setmethods__.get(name,None)\n",
102 + tab4, "if method: return method(self,value)\n",
103 + tab4, "self.__dict__[name] = value\n\n",
104 + NIL);
105
106 - if (!classic) {
107 - Printv(f_shadow,
108 - "import types\n",
109 - "try:\n",
110 - " _object = types.ObjectType\n",
111 - " _newclass = 1\n",
112 - "except AttributeError:\n",
113 - " class _object : pass\n",
114 - " _newclass = 0\n",
115 - "\n\n",
116 - NIL);
117 + Printv(f_shadow,
118 + "def _swig_getattr(self,class_type,name):\n",
119 + tab4, "method = class_type.__swig_getmethods__.get(name,None)\n",
120 + tab4, "if method: return method(self)\n",
121 + tab4, "raise AttributeError,name\n\n",
122 + NIL);
123 +
124 + if (!classic) {
125 + Printv(f_shadow,
126 + "import types\n",
127 + "try:\n",
128 + " _object = types.ObjectType\n",
129 + " _newclass = 1\n",
130 + "except AttributeError:\n",
131 + " class _object : pass\n",
132 + " _newclass = 0\n",
133 + "del types\n",
134 + "\n\n",
135 + NIL);
136 + }
137 }
138 -
139 +
140 if (directorsEnabled()) {
141 // Try loading weakref.proxy, which is only available in Python 2.1 and higher
142 Printv(f_shadow,
143 @@ -610,6 +633,83 @@
144 return Language::importDirective(n);
145 }
146
147 +
148 + /* ------------------------------------------------------------
149 + * emitFuncCallHelper()
150 + * Write the shadow code to call a function in the extension
151 + * module. Takes into account the -apply flag and whether
152 + * to use keyword args or not.
153 + * ------------------------------------------------------------ */
154 +
155 + String *funcCallHelper(String *name, int kw) {
156 + String *str;
157 +
158 + str = NewString("");
159 + if (apply) {
160 + Printv(str, "apply(", module, ".", name, ", args", (kw ? ", kwargs" : ""), ")", NIL);
161 + } else {
162 + Printv(str, module, ".", name, "(*args", (kw ? ", **kwargs" : ""), ")", NIL);
163 + }
164 + return str;
165 + }
166 +
167 +
168 + /* ------------------------------------------------------------
169 + * emitFunctionShadowHelper()
170 + * Refactoring some common code out of functionWrapper and
171 + * dispatchFunction that writes the proxy code for non-member
172 + * functions.
173 + * ------------------------------------------------------------ */
174 +
175 + void emitFunctionShadowHelper(Node *n, File *f_dest, String *name, int kw) {
176 + if ( ! have_addtofunc(n) ) {
177 + /* If there is no addtofunc directive then just assign from the extension module */
178 + Printv(f_dest, "\n", name, " = ", module, ".", name, "\n", NIL);
179 + } else {
180 + /* Otherwise make a wrapper function to insert the code into */
181 + Printv(f_dest, "\ndef ", name, "(*args", (kw ? ", **kwargs" : ""), "):\n", NIL);
182 + Printv(f_dest, tab4, "val = ", funcCallHelper(name, kw), "\n", NIL);
183 + Printv(f_dest, tab4, addtofunc(n), "\n", NIL);
184 + Printv(f_dest, tab4, "return val\n", NIL);
185 + }
186 + }
187 +
188 +
189 + /* ------------------------------------------------------------
190 + * check_kwargs()
191 + * check if using kwargs is allowed for this Node
192 + * ------------------------------------------------------------ */
193 +
194 + int check_kwargs(Node *n) {
195 + return ((use_kw || Getattr(n,"feature:kwargs")) && !Getattr(n, "feature:nokwargs")) ? 1 : 0;
196 + }
197 +
198 +
199 + /* ------------------------------------------------------------
200 + * have_addtofunc()
201 + * Check if there is a %addtofunc directive and it has text
202 + * ------------------------------------------------------------ */
203 +
204 + bool have_addtofunc(Node *n) {
205 + String* str = Getattr(n, "feature:addtofunc");
206 + return (str != NULL && Len(str) > 0);
207 + }
208 +
209 + /* ------------------------------------------------------------
210 + * addtofunc()
211 + * Get the %addtofunc code, stripping off {} if neccessary
212 + * ------------------------------------------------------------ */
213 +
214 + String *addtofunc(Node *n) {
215 + String* str = Getattr(n, "feature:addtofunc");
216 + char* t = Char(str);
217 + if (*t == '{') {
218 + Delitem(str ,0);
219 + Delitem(str,DOH_END);
220 + }
221 + return str;
222 + }
223 +
224 /* ------------------------------------------------------------
225 * add_method()
226 * ------------------------------------------------------------ */
227 @@ -650,7 +750,7 @@
228 int num_required;
229 int num_arguments;
230 int varargs = 0;
231 - int allow_kwargs = (use_kw || Getattr(n,"feature:kwargs")) ? 1 : 0;
232 + int allow_kwargs = check_kwargs(n);
233
234 /* member of a director class? */
235 String *nodeType = Getattr(n, "nodeType");
236 @@ -1007,11 +1107,7 @@
237
238 /* Create a shadow for this function (if enabled and not in a member function) */
239 if ((shadow) && (!(shadow & PYSHADOW_MEMBER))) {
240 - if (in_class) {
241 - Printv(f_shadow_stubs,iname, " = ", module, ".", iname, "\n\n", NIL);
242 - } else {
243 - Printv(f_shadow,iname, " = ", module, ".", iname, "\n\n", NIL);
244 - }
245 + emitFunctionShadowHelper(n, in_class ? f_shadow_stubs : f_shadow, iname, allow_kwargs);
246 }
247 } else {
248 if (!Getattr(n,"sym:nextSibling")) {
249 @@ -1068,7 +1164,7 @@
250
251 /* Create a shadow for this function (if enabled and not in a member function) */
252 if ((shadow) && (!(shadow & PYSHADOW_MEMBER))) {
253 - Printv(f_shadow_stubs,symname, " = ", module, ".", symname, "\n\n", NIL);
254 + emitFunctionShadowHelper(n, f_shadow_stubs, symname, 0);
255 }
256 DelWrapper(f);
257 Delete(dispatch);
258 @@ -1754,6 +1850,7 @@
259
260 virtual int classHandler(Node *n) {
261 int oldclassic = classic;
262 + int oldmodern = modern;
263
264 if (shadow) {
265
266 @@ -1763,8 +1860,16 @@
267
268 if (Getattr(n,"cplus:exceptionclass")) {
269 classic = 1;
270 + modern = 0;
271 + }
272 + if (Getattr(n,"feature:classic")) {
273 + classic = 1;
274 + modern = 0;
275 + }
276 + if (Getattr(n,"feature:modern")) {
277 + classic = 0;
278 + modern = 1;
279 }
280 - if (Getattr(n,"feature:classic")) classic = 1;
281
282 shadow_indent = (String *) tab4;
283
284 @@ -1798,30 +1903,32 @@
285 Printf(f_shadow,"(%s)", base_class);
286 } else {
287 if (!classic) {
288 - Printf(f_shadow,"(_object)");
289 + Printf(f_shadow, modern ? "(object)" : "(_object)");
290 }
291 }
292 Printf(f_shadow,":\n");
293
294 - Printv(f_shadow,tab4,"__swig_setmethods__ = {}\n",NIL);
295 - if (Len(base_class)) {
296 - Printf(f_shadow,"%sfor _s in [%s]: __swig_setmethods__.update(_s.__swig_setmethods__)\n",tab4,base_class);
297 - }
298 + if (!modern) {
299 + Printv(f_shadow,tab4,"__swig_setmethods__ = {}\n",NIL);
300 + if (Len(base_class)) {
301 + Printf(f_shadow,"%sfor _s in [%s]: __swig_setmethods__.update(_s.__swig_setmethods__)\n",tab4,base_class);
302 + }
303
304 - Printv(f_shadow,
305 - tab4, "__setattr__ = lambda self, name, value: _swig_setattr(self, ", class_name, ", name, value)\n",
306 - NIL);
307 + Printv(f_shadow,
308 + tab4, "__setattr__ = lambda self, name, value: _swig_setattr(self, ", class_name, ", name, value)\n",
309 + NIL);
310
311 - Printv(f_shadow,tab4,"__swig_getmethods__ = {}\n",NIL);
312 - if (Len(base_class)) {
313 - Printf(f_shadow,"%sfor _s in [%s]: __swig_getmethods__.update(_s.__swig_getmethods__)\n",tab4,base_class);
314 - }
315 + Printv(f_shadow,tab4,"__swig_getmethods__ = {}\n",NIL);
316 + if (Len(base_class)) {
317 + Printf(f_shadow,"%sfor _s in [%s]: __swig_getmethods__.update(_s.__swig_getmethods__)\n",tab4,base_class);
318 + }
319
320 - Printv(f_shadow,
321 - tab4, "__getattr__ = lambda self, name: _swig_getattr(self, ", class_name, ", name)\n",
322 - NIL);
323 + Printv(f_shadow,
324 + tab4, "__getattr__ = lambda self, name: _swig_getattr(self, ", class_name, ", name)\n",
325 + NIL);
326 + }
327 }
328 -
329 +
330 /* Emit all of the members */
331
332 in_class = 1;
333 @@ -1853,21 +1960,37 @@
334
335 if (!have_repr) {
336 /* Supply a repr method for this class */
337 - Printv(f_shadow,
338 - tab4, "def __repr__(self):\n",
339 - tab8, "return \"<C ", class_name," instance at %s>\" % (self.this,)\n",
340 - NIL);
341 + if (new_repr) {
342 + Printv(f_shadow,
343 + tab4, "def __repr__(self):\n",
344 + tab8, "return \"<%s.%s; proxy of ", CPlusPlus ? "C++ " : "C ", real_classname," instance at %s>\" % (self.__class__.__module__, self.__class__.__name__, self.this,)\n",
345 + NIL);
346 + }
347 + else {
348 + Printv(f_shadow,
349 + tab4, "def __repr__(self):\n",
350 + tab8, "return \"<C ", real_classname," instance at %s>\" % (self.this,)\n",
351 + NIL);
352 + }
353 }
354 - /* Now build the real class with a normal constructor */
355 + /* Now the Ptr class */
356 Printv(f_shadow,
357 "\nclass ", class_name, "Ptr(", class_name, "):\n",
358 - tab4, "def __init__(self,this):\n",
359 - tab8, "_swig_setattr(self, ", class_name, ", 'this', this)\n",
360 - tab8, "if not hasattr(self,\"thisown\"): _swig_setattr(self, ", class_name, ", 'thisown', 0)\n",
361 + tab4, "def __init__(self, this):\n", NIL);
362 + if (!modern) {
363 + Printv(f_shadow,
364 + tab8, "_swig_setattr(self, ", class_name, ", 'this', this)\n",
365 + tab8, "if not hasattr(self,\"thisown\"): _swig_setattr(self, ", class_name, ", 'thisown', 0)\n",
366 + tab8, "_swig_setattr(self, ", class_name, ",self.__class__,", class_name, ")\n",
367 + NIL);
368 + } else {
369 + Printv(f_shadow,
370 + tab8, "self.this = this\n",
371 + tab8, "if not hasattr(self,\"thisown\"): self.thisown = 0\n",
372 + tab8, "self.__class__ = ", class_name, "\n", NIL);
373 // tab8,"try: self.this = this.this; self.thisown = getattr(this,'thisown',0); this.thisown=0\n",
374 // tab8,"except AttributeError: self.this = this\n"
375 - tab8, "_swig_setattr(self, ", class_name, ",self.__class__,", class_name, ")\n",
376 - NIL);
377 + }
378
379 Printf(f_shadow,"%s.%s_swigregister(%sPtr)\n", module, class_name, class_name,0);
380 shadow_indent = 0;
381 @@ -1875,6 +1998,7 @@
382 Clear(f_shadow_stubs);
383 }
384 classic = oldclassic;
385 + modern = oldmodern;
386 return SWIG_OK;
387 }
388
389 @@ -1894,7 +2018,7 @@
390
391 if (!Getattr(n,"sym:nextSibling")) {
392 if (shadow) {
393 - int allow_kwargs = (use_kw || Getattr(n,"feature:kwargs")) ? 1 : 0;
394 + int allow_kwargs = (check_kwargs(n) && !Getattr(n,"sym:overloaded")) ? 1 : 0;
395 if (Strcmp(symname,"__repr__") == 0)
396 have_repr = 1;
397
398 @@ -1902,14 +2026,18 @@
399 String *pycode = pythoncode(Getattr(n,"feature:shadow"),tab4);
400 Printv(f_shadow,pycode,"\n",NIL);
401 } else {
402 - if (allow_kwargs && !Getattr(n,"sym:overloaded")) {
403 - Printv(f_shadow,tab4, "def ", symname, "(*args, **kwargs): ", NIL);
404 - Printv(f_shadow, "return apply(", module, ".", Swig_name_member(class_name,symname), ",args, kwargs)\n", NIL);
405 - } else {
406 - Printv(f_shadow, tab4, "def ", symname, "(*args): ", NIL);
407 - Printv(f_shadow, "return apply(", module, ".", Swig_name_member(class_name,symname), ",args)\n",NIL);
408 - }
409 - }
410 +
411 + Printv(f_shadow, tab4, "def ", symname, "(*args", (allow_kwargs ? ", **kwargs" : ""), "): ", NIL);
412 + if ( have_addtofunc(n) ) {
413 + Printv(f_shadow, "\n", NIL);
414 + Printv(f_shadow, tab8, "val = ", funcCallHelper(Swig_name_member(class_name,symname), allow_kwargs), "\n", NIL);
415 + Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
416 + Printv(f_shadow, tab8, "return val\n", NIL);
417 + } else {
418 + Printv(f_shadow, "return ", funcCallHelper(Swig_name_member(class_name,symname), allow_kwargs), "\n", NIL);
419 + }
420 + }
421 +
422 }
423 }
424 return SWIG_OK;
425 @@ -1923,10 +2051,28 @@
426 String *symname = Getattr(n,"sym:name");
427 Language::staticmemberfunctionHandler(n);
428 if (shadow) {
429 - Printv(f_shadow, tab4, "__swig_getmethods__[\"", symname, "\"] = lambda x: ", module, ".", Swig_name_member(class_name, symname), "\n", NIL);
430 - if (!classic) {
431 - Printv(f_shadow, tab4, "if _newclass:", symname, " = staticmethod(", module, ".",
432 - Swig_name_member(class_name, symname), ")\n", NIL);
433 + if ( !classic && have_addtofunc(n) ) {
434 + int kw = (check_kwargs(n) && !Getattr(n,"sym:overloaded")) ? 1 : 0;
435 + Printv(f_shadow, tab4, "def ", symname, "(*args", (kw ? ", **kwargs" : ""), "):\n", NIL);
436 + Printv(f_shadow, tab8, "val = ", funcCallHelper(Swig_name_member(class_name, symname), kw), "\n", NIL);
437 + Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
438 + Printv(f_shadow, tab8, "return val\n", NIL);
439 + Printv(f_shadow, tab4, modern ? "" : "if _newclass:", symname,
440 + " = staticmethod(", symname, ")\n", NIL);
441 +
442 + if (!modern) {
443 + Printv(f_shadow, tab4, "__swig_getmethods__[\"", symname, "\"] = lambda x: ", symname, "\n", NIL);
444 + }
445 +
446 + } else {
447 + if (!modern) {
448 + Printv(f_shadow, tab4, "__swig_getmethods__[\"", symname, "\"] = lambda x: ", module, ".", Swig_name_member(class_name, symname), "\n", NIL);
449 + }
450 + if (!classic) {
451 + Printv(f_shadow, tab4, modern ? "" : "if _newclass:", symname,
452 + " = staticmethod(", module, ".",
453 + Swig_name_member(class_name, symname), ")\n", NIL);
454 + }
455 }
456 }
457 return SWIG_OK;
458 @@ -1972,7 +2118,7 @@
459
460 if (!Getattr(n,"sym:nextSibling")) {
461 if (shadow) {
462 - int allow_kwargs = (use_kw || Getattr(n,"feature:kwargs")) ? 1 : 0;
463 + int allow_kwargs = (check_kwargs(n) && (!Getattr(n,"sym:overloaded"))) ? 1 : 0;
464 if (!have_constructor) {
465 if (Getattr(n,"feature:shadow")) {
466 String *pycode = pythoncode(Getattr(n,"feature:shadow"),tab4);
467 @@ -1991,18 +2137,25 @@
468 tab8, tab4, "args = (self,) + args\n",
469 NIL);
470 }
471 - if ((allow_kwargs) && (!Getattr(n,"sym:overloaded"))) {
472 - Printv(f_shadow, tab4, "def __init__(self,*args,**kwargs):\n", NIL);
473 - Printv(f_shadow, pass_self, NIL);
474 - Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', apply(", module, ".", Swig_name_construct(symname), ",args, kwargs))\n", NIL);
475 - } else {
476 - Printv(f_shadow, tab4, "def __init__(self,*args):\n",NIL);
477 - Printv(f_shadow, pass_self, NIL);
478 - Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', apply(", module, ".", Swig_name_construct(symname), ",args))\n", NIL);
479 - }
480 - Printv(f_shadow,
481 - tab8, "_swig_setattr(self, ", rclassname, ", 'thisown', 1)\n",
482 - NIL);
483 +
484 + Printv(f_shadow, tab4, "def __init__(self, *args",
485 + (allow_kwargs ? ", **kwargs" : ""), "):\n", NIL);
486 + Printv(f_shadow, pass_self, NIL);
487 + if (!modern) {
488 + Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', ",
489 + funcCallHelper(Swig_name_construct(symname), allow_kwargs), ")\n", NIL);
490 + Printv(f_shadow,
491 + tab8, "_swig_setattr(self, ", rclassname, ", 'thisown', 1)\n",
492 + NIL);
493 + } else {
494 + Printv(f_shadow, tab8, "newobj = ",
495 + funcCallHelper(Swig_name_construct(symname), allow_kwargs), "\n", NIL);
496 + Printv(f_shadow, tab8, "self.this = newobj.this\n", NIL);
497 + Printv(f_shadow, tab8, "self.thisown = 1\n", NIL);
498 + Printv(f_shadow, tab8, "del newobj.thisown\n", NIL);
499 + }
500 + if ( have_addtofunc(n) )
501 + Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
502 Delete(pass_self);
503 }
504 have_constructor = 1;
505 @@ -2014,19 +2167,16 @@
506 String *pycode = pythoncode(Getattr(n,"feature:shadow"),"");
507 Printv(f_shadow_stubs,pycode,"\n",NIL);
508 } else {
509 - if ((allow_kwargs) && (!Getattr(n,"sym:overloaded")))
510 - Printv(f_shadow_stubs, "def ", symname, "(*args,**kwargs):\n", NIL);
511 - else
512 - Printv(f_shadow_stubs, "def ", symname, "(*args):\n", NIL);
513 -
514 - Printv(f_shadow_stubs, tab4, "val = apply(", NIL);
515 - if ((allow_kwargs) && (!Getattr(n,"sym:overloaded")))
516 - Printv(f_shadow_stubs, module, ".", Swig_name_construct(symname), ",args,kwargs)\n", NIL);
517 - else
518 - Printv(f_shadow_stubs, module, ".", Swig_name_construct(symname), ",args)\n", NIL);
519 - Printv(f_shadow_stubs,tab4, "val.thisown = 1\n",
520 - tab4, "return val\n\n", NIL);
521 - }
522 +
523 + Printv(f_shadow_stubs, "\ndef ", symname, "(*args",
524 + (allow_kwargs ? ", **kwargs" : ""), "):\n", NIL);
525 + Printv(f_shadow_stubs, tab4, "val = ",
526 + funcCallHelper(Swig_name_construct(symname), allow_kwargs), "\n", NIL);
527 + Printv(f_shadow_stubs, tab4, "val.thisown = 1\n", NIL);
528 + if ( have_addtofunc(n) )
529 + Printv(f_shadow_stubs, tab4, addtofunc(n), "\n", NIL);
530 + Printv(f_shadow_stubs, tab4, "return val\n", NIL);
531 + }
532 }
533 }
534 }
535 @@ -2045,7 +2195,9 @@
536 Language::destructorHandler(n);
537 shadow = oldshadow;
538 if (shadow) {
539 - Printv(f_shadow, tab4, "def __del__(self, destroy= ", module, ".", Swig_name_destroy(symname), "):\n", NIL);
540 + Printv(f_shadow, tab4, "def __del__(self, destroy=", module, ".", Swig_name_destroy(symname), "):\n", NIL);
541 + if ( have_addtofunc(n) )
542 + Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
543 Printv(f_shadow, tab8, "try:\n", NIL);
544 Printv(f_shadow, tab4, tab8, "if self.thisown: destroy(self)\n", NIL);
545 Printv(f_shadow, tab8, "except: pass\n", NIL);
546 @@ -2066,21 +2218,22 @@
547 shadow = oldshadow;
548
549 if (shadow) {
550 - int immutable = 0;
551 - if (!Getattr(n,"feature:immutable")) {
552 - Printv(f_shadow, tab4, "__swig_setmethods__[\"", symname, "\"] = ", module, ".", Swig_name_set(Swig_name_member(class_name,symname)), "\n", NIL);
553 - } else {
554 - immutable = 1;
555 + int immutable = (Getattr(n,"feature:immutable") != NULL);
556 + if (!modern) {
557 + if (!immutable) {
558 + Printv(f_shadow, tab4, "__swig_setmethods__[\"", symname, "\"] = ", module, ".", Swig_name_set(Swig_name_member(class_name,symname)), "\n", NIL);
559 + }
560 + Printv(f_shadow, tab4, "__swig_getmethods__[\"", symname, "\"] = ", module, ".", Swig_name_get(Swig_name_member(class_name,symname)),"\n", NIL);
561 }
562 - Printv(f_shadow, tab4, "__swig_getmethods__[\"", symname, "\"] = ", module, ".", Swig_name_get(Swig_name_member(class_name,symname)),"\n", NIL);
563 -
564 if (!classic) {
565 if (immutable) {
566 - Printv(f_shadow,tab4,"if _newclass:", symname," = property(", module, ".",
567 + Printv(f_shadow,tab4, modern ? "" : "if _newclass:",
568 + symname," = property(", module, ".",
569 Swig_name_get(Swig_name_member(class_name,symname)),")\n", NIL);
570 } else {
571 - Printv(f_shadow,tab4,"if _newclass:", symname," = property(",
572 - module, ".", Swig_name_get(Swig_name_member(class_name,symname)),",",
573 + Printv(f_shadow,tab4, modern ? "" : "if _newclass:",
574 + symname," = property(",
575 + module, ".", Swig_name_get(Swig_name_member(class_name,symname)),", ",
576 module, ".", Swig_name_set(Swig_name_member(class_name,symname)),")\n", NIL);
577 }
578 }
579 @@ -2142,8 +2295,9 @@
580 Delitem(temp,0);
581 Delitem(temp,DOH_END);
582 }
583 +
584 /* Split the input text into lines */
585 - List *clist = DohSplit(temp,'\n',-1);
586 + List *clist = DohSplitLines(temp);
587 Delete(temp);
588 int initial = 0;
589 String *s = 0;
590 @@ -2194,7 +2348,7 @@
591 if ((!ImportMode) && ((Cmp(section,"python") == 0) || (Cmp(section,"shadow") == 0))) {
592 if (shadow) {
593 String *pycode = pythoncode(code,shadow_indent);
594 - Printv(f_shadow, pycode, "\n", NIL);
595 + Printv(f_shadow, pycode, NIL);
596 Delete(pycode);
597 }
598 } else {