blob: 269cf9eee67d82579fa39a0c81c6bdadc128144f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/* -----------------------------------------------------------------------------
* See the LICENSE file for information on copyright, usage and redistribution
* of SWIG, and the README file for authors - http://www.swig.org/release.html.
*
* deprecate.c
*
* The functions in this file are SWIG core functions that are deprecated
* or which do not fit in nicely with everything else. Generally this means
* that the function and/or API needs to be changed in some future release.
* ----------------------------------------------------------------------------- */
char cvsroot_deprecate_c[] = "$Id: parms.c 9630 2007-01-02 21:17:19Z beazley $";
#include "swig.h"
/* ---------------------------------------------------------------------
* ParmList_is_compactdefargs()
*
* Returns 1 if the parameter list passed in is marked for compact argument
* handling (by the "compactdefargs" attribute). Otherwise returns 0.
* ---------------------------------------------------------------------- */
/* Discussion:
"compactdefargs" is a property set by the Parser to indicate special
handling of default arguments. This property seems to be something that
is associated with functions and methods rather than low-level ParmList
objects. Therefore, I don't like the fact that this special purpose
feature is bolted onto the side of ParmList objects.
Proposed solution:
1. "compactdefargs" should be a feature set on function/method nodes
instead of ParmList objects. For example, if you have a function,
you would check the function node to see if the parameters are
to be handled in this way.
Difficulties:
1. This is used by functions in cwrap.c and emit.cxx, none of which
are passed information about the function/method node. We might
have to change the API of those functions to make this work correctly.
For example:
int emit_num_required(ParmList *parms)
might become
int emit_num_required(ParmList *parms, int compactargs)
*/
int ParmList_is_compactdefargs(ParmList *p) {
int compactdefargs = 0;
if (p) {
compactdefargs = Getattr(p, "compactdefargs") ? 1 : 0;
/* The "compactdefargs" attribute should only be set on the first parameter in the list.
* However, sometimes an extra parameter is inserted at the beginning of the parameter list,
* so we check the 2nd parameter too. */
if (!compactdefargs) {
Parm *nextparm = nextSibling(p);
compactdefargs = (nextparm && Getattr(nextparm, "compactdefargs")) ? 1 : 0;
}
}
return compactdefargs;
}
|