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