44
44
45
45
typedef struct _positional_argstack {
46
46
PyObject * argv ;
47
- long argnum ;
47
+ int argnum ;
48
48
struct _positional_argstack * prev ;
49
49
} positional_argstack ;
50
50
@@ -93,10 +93,9 @@ int _PyArg_ParseTupleAndKeywords_SizeT(PyObject *argv, PyObject *kwds, const cha
93
93
unsigned char rest_optional = 0 ;
94
94
unsigned char rest_keywords_only = 0 ;
95
95
96
- positional_argstack * v = (positional_argstack * )truffle_managed_malloc ( sizeof (positional_argstack ));
96
+ positional_argstack * v = (positional_argstack * )calloc ( 1 , sizeof (positional_argstack ));
97
97
v -> argv = argv ;
98
98
v -> argnum = 0 ;
99
- v -> prev = NULL ;
100
99
positional_argstack * next ;
101
100
102
101
char c = format [format_idx ];
@@ -321,7 +320,7 @@ int _PyArg_ParseTupleAndKeywords_SizeT(PyObject *argv, PyObject *kwds, const cha
321
320
PyErr_Format (PyExc_TypeError , "expected tuple, got %R" , Py_TYPE (arg ));
322
321
return 0 ;
323
322
}
324
- next = (positional_argstack * )truffle_managed_malloc ( sizeof (positional_argstack ));
323
+ next = (positional_argstack * )calloc ( 1 , sizeof (positional_argstack ));
325
324
next -> argv = arg ;
326
325
next -> argnum = 0 ;
327
326
next -> prev = v ;
@@ -331,7 +330,9 @@ int _PyArg_ParseTupleAndKeywords_SizeT(PyObject *argv, PyObject *kwds, const cha
331
330
if (v -> prev == NULL ) {
332
331
PyErr_SetString (PyExc_SystemError , "')' without '(' in argument parsing" );
333
332
} else {
333
+ next = v ;
334
334
v = v -> prev ;
335
+ free (next );
335
336
}
336
337
break ;
337
338
case '|' :
@@ -353,6 +354,7 @@ int _PyArg_ParseTupleAndKeywords_SizeT(PyObject *argv, PyObject *kwds, const cha
353
354
}
354
355
355
356
end :
357
+ free (v );
356
358
return 1 ;
357
359
}
358
360
@@ -369,10 +371,9 @@ PyObject* _Py_BuildValue_SizeT(const char *format, ...) {
369
371
char argchar [2 ] = {'\0' };
370
372
unsigned int value_idx = 1 ;
371
373
unsigned int format_idx = 0 ;
372
- build_stack * v = (build_stack * )truffle_managed_malloc ( sizeof (build_stack ));
374
+ build_stack * v = (build_stack * )calloc ( 1 , sizeof (build_stack ));
373
375
build_stack * next ;
374
376
v -> list = PyList_New (0 );
375
- v -> prev = NULL ;
376
377
377
378
char c = format [format_idx ];
378
379
while (c != '\0' ) {
@@ -483,7 +484,7 @@ PyObject* _Py_BuildValue_SizeT(const char *format, ...) {
483
484
}
484
485
break ;
485
486
case '(' :
486
- next = (build_stack * )truffle_managed_malloc ( sizeof (build_stack ));
487
+ next = (build_stack * )calloc ( 1 , sizeof (build_stack ));
487
488
next -> list = PyList_New (0 );
488
489
next -> prev = v ;
489
490
v = next ;
@@ -493,11 +494,13 @@ PyObject* _Py_BuildValue_SizeT(const char *format, ...) {
493
494
PyErr_SetString (PyExc_SystemError , "')' without '(' in Py_BuildValue" );
494
495
} else {
495
496
PyList_Append (v -> prev -> list , PyList_AsTuple (v -> list ));
497
+ next = v ;
496
498
v = v -> prev ;
499
+ free (next );
497
500
}
498
501
break ;
499
502
case '[' :
500
- next = (build_stack * )truffle_managed_malloc ( sizeof (build_stack ));
503
+ next = (build_stack * )calloc ( 1 , sizeof (build_stack ));
501
504
next -> list = PyList_New (0 );
502
505
next -> prev = v ;
503
506
v = next ;
@@ -507,11 +510,13 @@ PyObject* _Py_BuildValue_SizeT(const char *format, ...) {
507
510
PyErr_SetString (PyExc_SystemError , "']' without '[' in Py_BuildValue" );
508
511
} else {
509
512
PyList_Append (v -> prev -> list , v -> list );
513
+ next = v ;
510
514
v = v -> prev ;
515
+ free (next );
511
516
}
512
517
break ;
513
518
case '{' :
514
- next = (build_stack * )truffle_managed_malloc ( sizeof (build_stack ));
519
+ next = (build_stack * )calloc ( 1 , sizeof (build_stack ));
515
520
next -> list = PyList_New (0 );
516
521
next -> prev = v ;
517
522
v = next ;
@@ -521,7 +526,9 @@ PyObject* _Py_BuildValue_SizeT(const char *format, ...) {
521
526
PyErr_SetString (PyExc_SystemError , "'}' without '{' in Py_BuildValue" );
522
527
} else {
523
528
PyList_Append (v -> prev -> list , to_sulong (polyglot_invoke (PY_TRUFFLE_CEXT , "dict_from_list" , to_java (v -> list ))));
529
+ next = v ;
524
530
v = v -> prev ;
531
+ free (next );
525
532
}
526
533
break ;
527
534
case ':' :
0 commit comments