Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v8plus / share / swig / 1.3.26 / python / argcargv.i
CommitLineData
920dae64
AT
1/* ------------------------------------------------------------
2 * --- Argc & Argv ---
3 * ------------------------------------------------------------ */
4
5%fragment("SWIG_AsArgcArgv","header",
6 fragment="SWIG_AsCharPtr") {
7SWIGINTERN char**
8 SWIG_AsArgcArgv(PyObject* input,
9 swig_type_info* ppchar_info,
10 size_t* argc, int* owner)
11{
12 char **argv = 0;
13 size_t i = 0;
14 if (SWIG_ConvertPtr(input, (void **)&argv, ppchar_info, 0) == -1) {
15 int list = 0;
16 PyErr_Clear();
17 list = PyList_Check(input);
18 if (list || PyTuple_Check(input)) {
19 *argc = list ? PyList_Size(input) : PyTuple_Size(input);
20 argv = SWIG_new_array(*argc + 1, char*);
21 *owner = 1;
22 for (; i < *argc; ++i) {
23 PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i);
24 if (!SWIG_AsCharPtr(obj, &(argv[i]))) {
25 PyErr_Clear();
26 PyErr_SetString(PyExc_TypeError,"list or tuple must contain strings only");
27 }
28 }
29 argv[i] = 0;
30 return argv;
31 } else {
32 *argc = 0;
33 PyErr_SetString(PyExc_TypeError,"a list or tuple is expected");
34 return 0;
35 }
36 } else {
37 /* seems dangerous, but the user asked for it... */
38 while (argv[i] != 0) ++i;
39 *argc = i;
40 owner = 0;
41 return argv;
42 }
43}
44}
45
46/*
47 This typemap works with either a char**, a python list or a python
48 tuple
49 */
50
51%typemap(in,fragment="SWIG_AsArgcArgv") (int ARGC, char **ARGV)
52 (int owner) {
53 size_t argc = 0;
54 char **argv = SWIG_AsArgcArgv($input, $descriptor(char**), &argc, &owner);
55 if (PyErr_Occurred()) {
56 $1 = 0; $2 = 0;
57 if (SWIG_arg_fail($argnum)) SWIG_fail;
58 } else {
59 $1 = ($1_ltype) argc;
60 $2 = ($2_ltype) argv;
61 }
62}
63
64%typemap(freearg) (int ARGC, char **ARGV) {
65 if (owner$argnum) SWIG_delete_array($2);
66}
67