mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
gh-114569: Use PyMem_* APIs for non-PyObjects in compiler (#114587)
This commit is contained in:
parent
3996cbdd33
commit
8612230c1c
2 changed files with 15 additions and 16 deletions
|
@ -160,7 +160,7 @@ _PyCompile_EnsureArrayLargeEnough(int idx, void **array, int *alloc,
|
||||||
if (idx >= new_alloc) {
|
if (idx >= new_alloc) {
|
||||||
new_alloc = idx + default_alloc;
|
new_alloc = idx + default_alloc;
|
||||||
}
|
}
|
||||||
arr = PyObject_Calloc(new_alloc, item_size);
|
arr = PyMem_Calloc(new_alloc, item_size);
|
||||||
if (arr == NULL) {
|
if (arr == NULL) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
return ERROR;
|
return ERROR;
|
||||||
|
@ -181,7 +181,7 @@ _PyCompile_EnsureArrayLargeEnough(int idx, void **array, int *alloc,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(newsize > 0);
|
assert(newsize > 0);
|
||||||
void *tmp = PyObject_Realloc(arr, newsize);
|
void *tmp = PyMem_Realloc(arr, newsize);
|
||||||
if (tmp == NULL) {
|
if (tmp == NULL) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
return ERROR;
|
return ERROR;
|
||||||
|
@ -282,10 +282,10 @@ instr_sequence_insert_instruction(instr_sequence *seq, int pos,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
instr_sequence_fini(instr_sequence *seq) {
|
instr_sequence_fini(instr_sequence *seq) {
|
||||||
PyObject_Free(seq->s_labelmap);
|
PyMem_Free(seq->s_labelmap);
|
||||||
seq->s_labelmap = NULL;
|
seq->s_labelmap = NULL;
|
||||||
|
|
||||||
PyObject_Free(seq->s_instrs);
|
PyMem_Free(seq->s_instrs);
|
||||||
seq->s_instrs = NULL;
|
seq->s_instrs = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -690,7 +690,7 @@ compiler_unit_free(struct compiler_unit *u)
|
||||||
Py_CLEAR(u->u_metadata.u_cellvars);
|
Py_CLEAR(u->u_metadata.u_cellvars);
|
||||||
Py_CLEAR(u->u_metadata.u_fasthidden);
|
Py_CLEAR(u->u_metadata.u_fasthidden);
|
||||||
Py_CLEAR(u->u_private);
|
Py_CLEAR(u->u_private);
|
||||||
PyObject_Free(u);
|
PyMem_Free(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1262,8 +1262,7 @@ compiler_enter_scope(struct compiler *c, identifier name,
|
||||||
|
|
||||||
struct compiler_unit *u;
|
struct compiler_unit *u;
|
||||||
|
|
||||||
u = (struct compiler_unit *)PyObject_Calloc(1, sizeof(
|
u = (struct compiler_unit *)PyMem_Calloc(1, sizeof(struct compiler_unit));
|
||||||
struct compiler_unit));
|
|
||||||
if (!u) {
|
if (!u) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
return ERROR;
|
return ERROR;
|
||||||
|
@ -6657,7 +6656,7 @@ ensure_fail_pop(struct compiler *c, pattern_context *pc, Py_ssize_t n)
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
Py_ssize_t needed = sizeof(jump_target_label) * size;
|
Py_ssize_t needed = sizeof(jump_target_label) * size;
|
||||||
jump_target_label *resized = PyObject_Realloc(pc->fail_pop, needed);
|
jump_target_label *resized = PyMem_Realloc(pc->fail_pop, needed);
|
||||||
if (resized == NULL) {
|
if (resized == NULL) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
return ERROR;
|
return ERROR;
|
||||||
|
@ -6696,13 +6695,13 @@ emit_and_reset_fail_pop(struct compiler *c, location loc,
|
||||||
USE_LABEL(c, pc->fail_pop[pc->fail_pop_size]);
|
USE_LABEL(c, pc->fail_pop[pc->fail_pop_size]);
|
||||||
if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, loc) < 0) {
|
if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, loc) < 0) {
|
||||||
pc->fail_pop_size = 0;
|
pc->fail_pop_size = 0;
|
||||||
PyObject_Free(pc->fail_pop);
|
PyMem_Free(pc->fail_pop);
|
||||||
pc->fail_pop = NULL;
|
pc->fail_pop = NULL;
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
USE_LABEL(c, pc->fail_pop[0]);
|
USE_LABEL(c, pc->fail_pop[0]);
|
||||||
PyObject_Free(pc->fail_pop);
|
PyMem_Free(pc->fail_pop);
|
||||||
pc->fail_pop = NULL;
|
pc->fail_pop = NULL;
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -7206,7 +7205,7 @@ compiler_pattern_or(struct compiler *c, pattern_ty p, pattern_context *pc)
|
||||||
Py_DECREF(pc->stores);
|
Py_DECREF(pc->stores);
|
||||||
*pc = old_pc;
|
*pc = old_pc;
|
||||||
Py_INCREF(pc->stores);
|
Py_INCREF(pc->stores);
|
||||||
// Need to NULL this for the PyObject_Free call in the error block.
|
// Need to NULL this for the PyMem_Free call in the error block.
|
||||||
old_pc.fail_pop = NULL;
|
old_pc.fail_pop = NULL;
|
||||||
// No match. Pop the remaining copy of the subject and fail:
|
// No match. Pop the remaining copy of the subject and fail:
|
||||||
if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, LOC(p)) < 0 ||
|
if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, LOC(p)) < 0 ||
|
||||||
|
@ -7252,7 +7251,7 @@ compiler_pattern_or(struct compiler *c, pattern_ty p, pattern_context *pc)
|
||||||
diff:
|
diff:
|
||||||
compiler_error(c, LOC(p), "alternative patterns bind different names");
|
compiler_error(c, LOC(p), "alternative patterns bind different names");
|
||||||
error:
|
error:
|
||||||
PyObject_Free(old_pc.fail_pop);
|
PyMem_Free(old_pc.fail_pop);
|
||||||
Py_DECREF(old_pc.stores);
|
Py_DECREF(old_pc.stores);
|
||||||
Py_XDECREF(control);
|
Py_XDECREF(control);
|
||||||
return ERROR;
|
return ERROR;
|
||||||
|
@ -7453,7 +7452,7 @@ compiler_match(struct compiler *c, stmt_ty s)
|
||||||
pattern_context pc;
|
pattern_context pc;
|
||||||
pc.fail_pop = NULL;
|
pc.fail_pop = NULL;
|
||||||
int result = compiler_match_inner(c, s, &pc);
|
int result = compiler_match_inner(c, s, &pc);
|
||||||
PyObject_Free(pc.fail_pop);
|
PyMem_Free(pc.fail_pop);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@ basicblock_last_instr(const basicblock *b) {
|
||||||
static basicblock *
|
static basicblock *
|
||||||
cfg_builder_new_block(cfg_builder *g)
|
cfg_builder_new_block(cfg_builder *g)
|
||||||
{
|
{
|
||||||
basicblock *b = (basicblock *)PyObject_Calloc(1, sizeof(basicblock));
|
basicblock *b = (basicblock *)PyMem_Calloc(1, sizeof(basicblock));
|
||||||
if (b == NULL) {
|
if (b == NULL) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -437,10 +437,10 @@ _PyCfgBuilder_Free(cfg_builder *g)
|
||||||
basicblock *b = g->g_block_list;
|
basicblock *b = g->g_block_list;
|
||||||
while (b != NULL) {
|
while (b != NULL) {
|
||||||
if (b->b_instr) {
|
if (b->b_instr) {
|
||||||
PyObject_Free((void *)b->b_instr);
|
PyMem_Free((void *)b->b_instr);
|
||||||
}
|
}
|
||||||
basicblock *next = b->b_list;
|
basicblock *next = b->b_list;
|
||||||
PyObject_Free((void *)b);
|
PyMem_Free((void *)b);
|
||||||
b = next;
|
b = next;
|
||||||
}
|
}
|
||||||
PyMem_Free(g);
|
PyMem_Free(g);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue