[svn:parrot] r44404 - branches/boehm_gc_2/compilers/imcc
bacek at svn.parrot.org
bacek at svn.parrot.org
Tue Feb 23 21:02:02 UTC 2010
Author: bacek
Date: Tue Feb 23 21:02:00 2010
New Revision: 44404
URL: https://trac.parrot.org/parrot/changeset/44404
Log:
More GC allocations in IMCC
Modified:
branches/boehm_gc_2/compilers/imcc/cfg.c
branches/boehm_gc_2/compilers/imcc/cfg.h
branches/boehm_gc_2/compilers/imcc/imc.c
branches/boehm_gc_2/compilers/imcc/imc.h
branches/boehm_gc_2/compilers/imcc/imcc.l
branches/boehm_gc_2/compilers/imcc/imcc.y
branches/boehm_gc_2/compilers/imcc/imclexer.c
branches/boehm_gc_2/compilers/imcc/imcparser.c
branches/boehm_gc_2/compilers/imcc/instructions.c
branches/boehm_gc_2/compilers/imcc/instructions.h
branches/boehm_gc_2/compilers/imcc/main.c
branches/boehm_gc_2/compilers/imcc/optimizer.c
branches/boehm_gc_2/compilers/imcc/parser_util.c
branches/boehm_gc_2/compilers/imcc/pbc.c
branches/boehm_gc_2/compilers/imcc/pcc.c
branches/boehm_gc_2/compilers/imcc/reg_alloc.c
branches/boehm_gc_2/compilers/imcc/sets.c
branches/boehm_gc_2/compilers/imcc/sets.h
branches/boehm_gc_2/compilers/imcc/symreg.c
branches/boehm_gc_2/compilers/imcc/symreg.h
Modified: branches/boehm_gc_2/compilers/imcc/cfg.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/cfg.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/cfg.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -83,9 +83,12 @@
__attribute__nonnull__(4)
FUNC_MODIFIES(*unit);
-static void bb_remove_edge(ARGMOD(IMC_Unit *unit), ARGMOD(Edge *edge))
+static void bb_remove_edge(PARROT_INTERP,
+ ARGMOD(IMC_Unit *unit),
+ ARGMOD(Edge *edge))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
+ __attribute__nonnull__(3)
FUNC_MODIFIES(*unit)
FUNC_MODIFIES(*edge);
@@ -97,20 +100,24 @@
__attribute__nonnull__(2)
__attribute__nonnull__(3);
-static void free_dominance_frontiers(ARGMOD(IMC_Unit *unit))
+static void free_dominance_frontiers(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
-static void free_dominators(ARGMOD(IMC_Unit *unit))
+static void free_dominators(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
-static void free_edge(ARGMOD(IMC_Unit *unit))
+static void free_edge(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
-static void free_loops(ARGMOD(IMC_Unit *unit))
+static void free_loops(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
static void init_basic_blocks(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
@@ -173,20 +180,25 @@
, PARROT_ASSERT_ARG(from) \
, PARROT_ASSERT_ARG(label))
#define ASSERT_ARGS_bb_remove_edge __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit) \
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(edge))
#define ASSERT_ARGS_check_invoke_type __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(ins))
#define ASSERT_ARGS_free_dominance_frontiers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_free_dominators __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_free_edge __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_free_loops __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_init_basic_blocks __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit))
@@ -461,7 +473,7 @@
if (!bb->pred_list) {
/* Remove all successor edges of block bb */
while (bb->succ_list) {
- bb_remove_edge(unit, bb->succ_list);
+ bb_remove_edge(interp, unit, bb->succ_list);
IMCC_debug(interp, DEBUG_CFG,
"remove edge from bb: %d\n", bb->index);
changes = 1;
@@ -594,7 +606,7 @@
/*
-=item C<static void bb_remove_edge(IMC_Unit *unit, Edge *edge)>
+=item C<static void bb_remove_edge(PARROT_INTERP, IMC_Unit *unit, Edge *edge)>
Removes the given edge from the graph.
@@ -603,7 +615,7 @@
*/
static void
-bb_remove_edge(ARGMOD(IMC_Unit *unit), ARGMOD(Edge *edge))
+bb_remove_edge(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGMOD(Edge *edge))
{
ASSERT_ARGS(bb_remove_edge)
if (edge->from->succ_list == edge) {
@@ -632,14 +644,14 @@
if (unit->edge_list == edge) {
unit->edge_list = edge->next;
- mem_sys_free(edge);
+ mem_gc_free(interp, edge);
}
else {
Edge *prev;
for (prev = unit->edge_list; prev; prev = prev->next) {
if (prev->next == edge) {
prev->next = edge->next;
- mem_sys_free(edge);
+ mem_gc_free(interp, edge);
break;
}
}
@@ -649,7 +661,7 @@
/*
-=item C<static void free_edge(IMC_Unit *unit)>
+=item C<static void free_edge(PARROT_INTERP, IMC_Unit *unit)>
Frees the memory of an IMC_Unit's edge list.
@@ -658,14 +670,14 @@
*/
static void
-free_edge(ARGMOD(IMC_Unit *unit))
+free_edge(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
{
ASSERT_ARGS(free_edge)
Edge *e;
for (e = unit->edge_list; e;) {
Edge * const next = e->next;
- mem_sys_free(e);
+ mem_gc_free(interp, e);
e = next;
}
@@ -747,7 +759,7 @@
#endif
if (r->life_info)
- free_life_info(unit, r);
+ free_life_info(interp, unit, r);
r->life_info = mem_gc_allocate_n_zeroed_typed(interp, unit->n_basic_blocks,
Life_range *);
@@ -791,7 +803,7 @@
/*
-=item C<void free_life_info(const IMC_Unit *unit, SymReg *r)>
+=item C<void free_life_info(PARROT_INTERP, const IMC_Unit *unit, SymReg *r)>
Frees memory of the life analysis info structures.
@@ -800,7 +812,7 @@
*/
void
-free_life_info(ARGIN(const IMC_Unit *unit), ARGMOD(SymReg *r))
+free_life_info(PARROT_INTERP, ARGIN(const IMC_Unit *unit), ARGMOD(SymReg *r))
{
ASSERT_ARGS(free_life_info)
#if IMC_TRACE_HIGH
@@ -810,10 +822,10 @@
unsigned int i;
for (i = 0; i < unit->n_basic_blocks; i++) {
- mem_sys_free(r->life_info[i]);
+ mem_gc_free(interp, r->life_info[i]);
}
- mem_sys_free(r->life_info);
+ mem_gc_free(interp, r->life_info);
r->life_info = NULL;
}
}
@@ -1005,7 +1017,7 @@
unit->dominators = dominators;
dominators[0] = set_make(interp, n);
- set_add(dominators[0], 0);
+ set_add(interp, dominators[0], 0);
for (i = n - 1; i; --i) {
if (unit->bb_list[i]->pred_list) {
@@ -1013,7 +1025,7 @@
}
else {
dominators[i] = set_make(interp, n);
- set_add(dominators[i], i);
+ set_add(interp, dominators[i], i);
}
}
@@ -1059,15 +1071,15 @@
set_intersec_inplace(s, dominators[pred_index]);
}
- set_add(s, i);
+ set_add(interp, s, i);
if (! set_equal(dominators[i], s)) {
change = 1;
- set_free(dominators[i]);
+ set_free(interp, dominators[i]);
dominators[i] = s;
}
else
- set_free(s);
+ set_free(interp, s);
}
}
#endif
@@ -1103,7 +1115,7 @@
if (IMCC_INFO(interp)->debug & DEBUG_CFG)
dump_dominators(unit);
#if USE_BFS
- mem_sys_free(q);
+ mem_gc_free(interp, q);
set_free(visited);
#endif
}
@@ -1155,7 +1167,7 @@
runner = 0;
else
/* add b to runner's dominance frontier set */
- set_add(unit->dominance_frontiers[runner], b);
+ set_add(interp, unit->dominance_frontiers[runner], b);
/* runner = idoms[runner] */
if (runner == 0)
@@ -1174,7 +1186,7 @@
/*
-=item C<static void free_dominators(IMC_Unit *unit)>
+=item C<static void free_dominators(PARROT_INTERP, IMC_Unit *unit)>
Frees the memory in the given unit related to all dominators.
@@ -1183,26 +1195,26 @@
*/
static void
-free_dominators(ARGMOD(IMC_Unit *unit))
+free_dominators(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
{
ASSERT_ARGS(free_dominators)
if (unit->dominators) {
unsigned int i;
for (i = 0; i < unit->n_basic_blocks; i++) {
- set_free(unit->dominators[i]);
+ set_free(interp, unit->dominators[i]);
}
- mem_sys_free(unit->dominators);
+ mem_gc_free(interp, unit->dominators);
unit->dominators = NULL;
- mem_sys_free(unit->idoms);
+ mem_gc_free(interp, unit->idoms);
}
}
/*
-=item C<static void free_dominance_frontiers(IMC_Unit *unit)>
+=item C<static void free_dominance_frontiers(PARROT_INTERP, IMC_Unit *unit)>
Frees the memory in the given unit related to all dominance frontiers.
@@ -1211,17 +1223,17 @@
*/
static void
-free_dominance_frontiers(ARGMOD(IMC_Unit *unit))
+free_dominance_frontiers(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
{
ASSERT_ARGS(free_dominance_frontiers)
if (unit->dominance_frontiers) {
unsigned int i;
for (i = 0; i < unit->n_basic_blocks; i++) {
- set_free(unit->dominance_frontiers[i]);
+ set_free(interp, unit->dominance_frontiers[i]);
}
- mem_sys_free(unit->dominance_frontiers);
+ mem_gc_free(interp, unit->dominance_frontiers);
unit->dominance_frontiers = NULL;
}
}
@@ -1432,14 +1444,14 @@
}
loop = set_make(interp, unit->n_basic_blocks);
- set_add(loop, footer->index);
- set_add(loop, header->index);
+ set_add(interp, loop, footer->index);
+ set_add(interp, loop, header->index);
footer->loop_depth++;
if (header != footer) {
header->loop_depth++;
- search_predecessors_not_in(footer, loop);
+ search_predecessors_not_in(interp, footer, loop);
}
exits = set_make(interp, unit->n_basic_blocks);
@@ -1451,7 +1463,7 @@
edge = edge->succ_next)
{
if (!set_contains(loop, edge->to->index))
- set_add(exits, i);
+ set_add(interp, exits, i);
}
}
}
@@ -1477,7 +1489,7 @@
/*
-=item C<static void free_loops(IMC_Unit *unit)>
+=item C<static void free_loops(PARROT_INTERP, IMC_Unit *unit)>
Frees the memory associated with the loops in this unit.
@@ -1486,18 +1498,18 @@
*/
static void
-free_loops(ARGMOD(IMC_Unit *unit))
+free_loops(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
{
ASSERT_ARGS(free_loops)
int i;
for (i = 0; i < unit->n_loops; i++) {
- set_free(unit->loop_info[i]->loop);
- set_free(unit->loop_info[i]->exits);
- mem_sys_free(unit->loop_info[i]);
+ set_free(interp, unit->loop_info[i]->loop);
+ set_free(interp, unit->loop_info[i]->exits);
+ mem_gc_free(interp, unit->loop_info[i]);
}
- mem_sys_free(unit->loop_info);
+ mem_gc_free(interp, unit->loop_info);
unit->n_loops = 0;
unit->loop_info = NULL;
@@ -1506,7 +1518,8 @@
/*
-=item C<void search_predecessors_not_in(const Basic_block *node, Set *s)>
+=item C<void search_predecessors_not_in(PARROT_INTERP, const Basic_block *node,
+Set *s)>
Searches for predecessor edges for this node not in the given set (and adds
them).
@@ -1516,7 +1529,7 @@
*/
void
-search_predecessors_not_in(ARGIN(const Basic_block *node), ARGMOD(Set *s))
+search_predecessors_not_in(PARROT_INTERP, ARGIN(const Basic_block *node), ARGMOD(Set *s))
{
ASSERT_ARGS(search_predecessors_not_in)
Edge *edge;
@@ -1525,9 +1538,9 @@
Basic_block * const pred = edge->from;
if (!set_contains(s, pred->index)) {
- set_add(s, pred->index);
+ set_add(interp, s, pred->index);
pred->loop_depth++;
- search_predecessors_not_in(pred, s);
+ search_predecessors_not_in(interp, pred, s);
}
}
}
@@ -1550,7 +1563,7 @@
ASSERT_ARGS(init_basic_blocks)
if (!unit->bb_list)
- clear_basic_blocks(unit);
+ clear_basic_blocks(interp, unit);
unit->n_basic_blocks = 0;
unit->edge_list = NULL;
@@ -1562,7 +1575,7 @@
/*
-=item C<void clear_basic_blocks(IMC_Unit *unit)>
+=item C<void clear_basic_blocks(PARROT_INTERP, IMC_Unit *unit)>
Frees all of the blocks and CFG memory allocated for this unit.
@@ -1571,7 +1584,7 @@
*/
void
-clear_basic_blocks(ARGMOD(IMC_Unit *unit))
+clear_basic_blocks(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
{
ASSERT_ARGS(clear_basic_blocks)
@@ -1579,16 +1592,16 @@
unsigned int i;
for (i = 0; i < unit->n_basic_blocks; i++)
- mem_sys_free(unit->bb_list[i]);
+ mem_gc_free(interp, unit->bb_list[i]);
- mem_sys_free(unit->bb_list);
+ mem_gc_free(interp, unit->bb_list);
unit->bb_list = NULL;
}
- free_edge(unit);
- free_dominators(unit);
- free_dominance_frontiers(unit);
- free_loops(unit);
+ free_edge(interp, unit);
+ free_dominators(interp, unit);
+ free_dominance_frontiers(interp, unit);
+ free_loops(interp, unit);
}
Modified: branches/boehm_gc_2/compilers/imcc/cfg.h
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/cfg.h Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/cfg.h Tue Feb 23 21:02:00 2010 (r44404)
@@ -61,8 +61,9 @@
__attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
-void clear_basic_blocks(ARGMOD(IMC_Unit *unit))
+void clear_basic_blocks(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
void compute_dominance_frontiers(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
@@ -89,9 +90,12 @@
__attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
-void free_life_info(ARGIN(const IMC_Unit *unit), ARGMOD(SymReg *r))
+void free_life_info(PARROT_INTERP,
+ ARGIN(const IMC_Unit *unit),
+ ARGMOD(SymReg *r))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
+ __attribute__nonnull__(3)
FUNC_MODIFIES(*r);
void life_analysis(PARROT_INTERP, ARGIN(const IMC_Unit *unit))
@@ -112,11 +116,12 @@
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-void search_predecessors_not_in(
+void search_predecessors_not_in(PARROT_INTERP,
ARGIN(const Basic_block *node),
ARGMOD(Set *s))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
+ __attribute__nonnull__(3)
FUNC_MODIFIES(*s);
#define ASSERT_ARGS_blocks_are_connected __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -126,7 +131,8 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_clear_basic_blocks __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_compute_dominance_frontiers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit))
@@ -142,7 +148,8 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_free_life_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit) \
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(r))
#define ASSERT_ARGS_life_analysis __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
@@ -154,7 +161,8 @@
PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(loop_info))
#define ASSERT_ARGS_search_predecessors_not_in __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(node) \
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(node) \
, PARROT_ASSERT_ARG(s))
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: compilers/imcc/cfg.c */
Modified: branches/boehm_gc_2/compilers/imcc/imc.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/imc.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/imc.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -89,7 +89,7 @@
for (ins = unit->instructions; ins;) {
Instruction * const ins_next = ins->next;
- free_ins(ins);
+ free_ins(interp, ins);
ins = ins_next;
}
@@ -143,11 +143,11 @@
ASSERT_ARGS(imc_cleanup)
IMCC_pop_parser_state(interp, yyscanner);
clear_globals(interp);
- mem_sys_free(IMCC_INFO(interp)->ghash.data);
+ mem_gc_free(interp, IMCC_INFO(interp)->ghash.data);
IMCC_INFO(interp)->ghash.data = NULL;
if (IMCC_INFO(interp)->state) {
- mem_sys_free(IMCC_INFO(interp)->state->file);
+ mem_gc_free(interp, IMCC_INFO(interp)->state->file);
IMCC_INFO(interp)->state->file = NULL;
}
}
@@ -261,27 +261,27 @@
fprintf(stderr, "imc_free_unit()\n");
#endif
- free_reglist(unit);
+ free_reglist(interp, unit);
/* and cfg ... */
- clear_basic_blocks(unit);
+ clear_basic_blocks(interp, unit);
if (!imc->n_comp_units)
IMCC_fatal(interp, 1, "imc_free_unit: non existent unit\n");
imc->n_comp_units--;
- clear_locals(unit);
+ clear_locals(interp, unit);
if (unit->_namespace && unit->owns_namespace)
- free_sym(unit->_namespace);
+ free_sym(interp, unit->_namespace);
if (unit->vtable_name)
- mem_sys_free(unit->vtable_name);
+ mem_gc_free(interp, unit->vtable_name);
if (unit->instance_of)
- mem_sys_free(unit->instance_of);
+ mem_gc_free(interp, unit->instance_of);
- mem_sys_free(unit->hash.data);
- mem_sys_free(unit);
+ mem_gc_free(interp, unit->hash.data);
+ mem_gc_free(interp, unit);
}
/*
Modified: branches/boehm_gc_2/compilers/imcc/imc.h
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/imc.h Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/imc.h Tue Feb 23 21:02:00 2010 (r44404)
@@ -141,8 +141,9 @@
/* HEADERIZER BEGIN: compilers/imcc/reg_alloc.c */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-void free_reglist(ARGMOD(IMC_Unit *unit))
+void free_reglist(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*unit);
void graph_coloring_reg_alloc(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
@@ -158,7 +159,8 @@
__attribute__nonnull__(1);
#define ASSERT_ARGS_free_reglist __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit))
#define ASSERT_ARGS_graph_coloring_reg_alloc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit))
Modified: branches/boehm_gc_2/compilers/imcc/imcc.l
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/imcc.l Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/imcc.l Tue Feb 23 21:02:00 2010 (r44404)
@@ -76,7 +76,7 @@
static void scan_file(PARROT_INTERP, ARGIN(struct macro_frame_t *frame), ARGMOD(FILE *file),
ARGMOD(void *yyscanner));
-static int destroy_frame(macro_frame_t *frame, ARGMOD(void *yyscanner));
+static int destroy_frame(PARROT_INTERP, macro_frame_t *frame, ARGMOD(void *yyscanner));
static int yylex_skip(YYSTYPE *valp, PARROT_INTERP, ARGIN(const char *skip),
ARGMOD(void *yyscanner));
@@ -100,7 +100,7 @@
#define DUP_AND_RET_FREE(valp, token) \
do { \
if (valp) { \
- mem_sys_free((valp)->s); \
+ mem_gc_free(interp, (valp)->s); \
(valp)->s = Parrot_gc_strdup(interp, yytext); \
return (token); \
} \
@@ -179,9 +179,10 @@
/* Newline in the heredoc. Realloc and cat on. */
IMCC_INFO(interp)->line++;
IMCC_INFO(interp)->heredoc_content =
- (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
- strlen(IMCC_INFO(interp)->heredoc_content) +
- strlen(yytext) + 2);
+ (char*)Parrot_gc_reallocate_memory_chunk(interp,
+ IMCC_INFO(interp)->heredoc_content,
+ strlen(IMCC_INFO(interp)->heredoc_content) +
+ strlen(yytext) + 2);
strcpy(IMCC_INFO(interp)->heredoc_content +
strlen(IMCC_INFO(interp)->heredoc_content), yytext);
}
@@ -199,7 +200,7 @@
IMCC_INFO(interp)->heredoc_content[len + 1] = 0;
- mem_sys_free(IMCC_INFO(interp)->heredoc_end);
+ mem_gc_free(interp, IMCC_INFO(interp)->heredoc_end);
IMCC_INFO(interp)->heredoc_end = NULL;
IMCC_INFO(interp)->frames->buffer = YY_CURRENT_BUFFER;
@@ -216,9 +217,10 @@
else {
/* Part of the heredoc. Realloc and cat the line on. */
IMCC_INFO(interp)->heredoc_content =
- (char *)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
- strlen(IMCC_INFO(interp)->heredoc_content) +
- strlen(yytext) + 2);
+ (char *)Parrot_gc_reallocate_memory_chunk(interp,
+ IMCC_INFO(interp)->heredoc_content,
+ strlen(IMCC_INFO(interp)->heredoc_content) +
+ strlen(yytext) + 2);
strcpy(IMCC_INFO(interp)->heredoc_content +
strlen(IMCC_INFO(interp)->heredoc_content), yytext);
}
@@ -434,11 +436,11 @@
macro_exists = 1;
define_macro(interp, macro_name, NULL, valp->s, start_line);
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
/* don't leak these */
if (macro_exists)
- mem_sys_free(macro_name);
+ mem_gc_free(interp, macro_name);
IMCC_INFO(interp)->cur_macro_name = NULL;
@@ -474,7 +476,7 @@
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "missing space?");
len = yyleng + 10;
- label = (char *)mem_sys_allocate(len);
+ label = mem_gc_allocate_n_typed(interp, len, char);
snprintf(label, len, "%s%d", yytext, IMCC_INFO(interp)->frames->label);
/* XXX: free valp->s if it exists? */
@@ -495,7 +497,7 @@
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "missing space?");
len = yyleng + 10;
- label = (char *)mem_sys_allocate(len);
+ label = mem_gc_allocate_n_typed(interp, len, char);
snprintf(label, len, "%s%d", yytext, IMCC_INFO(interp)->frames->label);
/* XXX: free valp->s if it exists? */
@@ -520,7 +522,7 @@
<emit,INITIAL>{DOT}{LETTER}{LETTERDIGIT}* {
char * const macro_name = Parrot_gc_strdup(interp, yytext + 1);
int failed = expand_macro(interp, macro_name, yyscanner);
- mem_sys_free(macro_name);
+ mem_gc_free(interp, macro_name);
if (!failed) {
yyless(1);
return DOT;
@@ -569,7 +571,7 @@
IMCC_INFO(interp)->frames = frame;
/* Start slurping up the heredoc. */
- IMCC_INFO(interp)->heredoc_content = (char *)mem_sys_allocate(2);
+ IMCC_INFO(interp)->heredoc_content = mem_gc_allocate_n_typed(interp, 2, char);
/* preserve delim */
IMCC_INFO(interp)->heredoc_content[0] = yytext[2];
@@ -704,13 +706,13 @@
YYCHOP();
len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 15;
- label = (char *)mem_sys_allocate(len);
+ label = mem_gc_allocate_n_typed(interp, len, char);
snprintf(label, len, "local__%s__%s__$:",
IMCC_INFO(interp)->cur_macro_name, yytext+1);
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = label;
}
@@ -721,7 +723,7 @@
if (valp) {
if (!IMCC_INFO(interp)->cur_macro_name) {
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Invalid LABEL outside of macro");
}
@@ -730,14 +732,14 @@
const size_t fmtlen = strlen(fmt) - (2 * strlen("%s"));
const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name)
+ yyleng + fmtlen;
- char * const label = (char *)mem_sys_allocate(len);
+ char * const label = mem_gc_allocate_n_typed(interp, len, char);
/* skip over ".$" prefix with the +2 */
snprintf(label, len, fmt,
IMCC_INFO(interp)->cur_macro_name, yytext + 2);
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = label;
}
}
@@ -818,25 +820,25 @@
}
static int
-destroy_frame(struct macro_frame_t *frame, void *yyscanner)
+destroy_frame(PARROT_INTERP, struct macro_frame_t *frame, void *yyscanner)
{
YY_BUFFER_STATE buffer = frame->buffer;
int ret = 0;
int i;
for (i = 0; i < frame->expansion.num_param; i++) {
- mem_sys_free(frame->expansion.name[i]);
+ mem_gc_free(interp, frame->expansion.name[i]);
frame->expansion.name[i] = NULL;
}
if (frame->heredoc_rest) {
- mem_sys_free(frame->heredoc_rest);
+ mem_gc_free(interp, frame->heredoc_rest);
frame->heredoc_rest = NULL;
} else
ret = frame->s.line;
- mem_sys_free(frame->s.file);
- mem_sys_free(frame);
+ mem_gc_free(interp, frame->s.file);
+ mem_gc_free(interp, frame);
if (buffer != NULL)
yy_switch_to_buffer(buffer, yyscanner);
@@ -895,21 +897,21 @@
macro_name);
len += strlen(val.s);
- current = (char *)mem_sys_realloc(current, len + 1);
+ current = mem_gc_realloc_n_typed(interp, current, len + 1, char);
strcat(current,val.s);
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
val.s = NULL;
c = yylex(&val, yyscanner, interp);
}
if (valp) {
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
*valp = val;
}
else
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
return current;
}
@@ -946,7 +948,7 @@
len = 0;
if (val.s)
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
c = yylex_skip(&val, interp, " \n", yyscanner);
}
else if (need_id && (*current || c != IDENTIFIER) && c != ' ') {
@@ -956,18 +958,18 @@
}
else if (c == '{') {
current = read_braced(&val, interp, macro_name, current, yyscanner);
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
c = yylex_skip(&val, interp, " \n", yyscanner);
len = strlen(current);
}
else {
if (!need_id || c != ' ') {
len += strlen(val.s);
- current = (char *)mem_sys_realloc(current, len + 1);
+ current = mem_gc_realloc_n_typed(interp, current, len + 1, char);
strcat(current, val.s);
}
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
val.s = NULL;
c = yylex(&val, yyscanner, interp);
}
@@ -978,7 +980,7 @@
if (valp)
*valp = val;
else
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
return c;
}
@@ -1009,7 +1011,7 @@
c = yylex_skip(valp, interp, " ", yyscanner);
if (c == '(') {
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = NULL;
c = read_params(NULL, interp, ¶ms,
@@ -1023,7 +1025,7 @@
int elem_len;
if (c <= 0) {
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"File ended before macro '%s' was complete",
IMCC_INFO(interp)->cur_macro_name);
@@ -1038,27 +1040,27 @@
buffer_size <<= 1;
IMCC_INFO(interp)->macro_buffer =
- (char *)mem_sys_realloc(IMCC_INFO(interp)->macro_buffer,
- buffer_size);
+ mem_gc_realloc_n_typed(interp, IMCC_INFO(interp)->macro_buffer,
+ buffer_size, char);
}
}
else {
buffer_size = (elem_len << 1) > 1024 ? elem_len << 1 : 1024;
IMCC_INFO(interp)->macro_buffer =
- (char *)mem_sys_allocate_zeroed(buffer_size);
+ mem_gc_allocate_n_zeroed_typed(interp, buffer_size, char);
}
strcat(IMCC_INFO(interp)->macro_buffer, valp->s);
buffer_used += elem_len;
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = NULL;
}
c = yylex(valp, yyscanner, interp);
}
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = NULL;
BEGIN(start_cond);
@@ -1066,7 +1068,7 @@
define_macro(interp, IMCC_INFO(interp)->cur_macro_name,
¶ms, IMCC_INFO(interp)->macro_buffer, start_line);
- mem_sys_free(IMCC_INFO(interp)->macro_buffer);
+ mem_gc_free(interp, IMCC_INFO(interp)->macro_buffer);
IMCC_INFO(interp)->macro_buffer = NULL;
IMCC_INFO(interp)->cur_macro_name = NULL;
@@ -1103,7 +1105,7 @@
macro_t *m = find_macro(interp, name);
if (m) {
- mem_sys_free(m->expansion);
+ mem_gc_free(interp, m->expansion);
m->expansion = NULL;
}
else {
@@ -1162,7 +1164,7 @@
/* remember macro name for error reporting
* first free any filename allocated in new_frame() */
if (frame->s.file)
- mem_sys_free(frame->s.file);
+ mem_gc_free(interp, frame->s.file);
frame->s.file = Parrot_gc_strdup(interp, name);
@@ -1213,7 +1215,7 @@
if (s) {
frame->expansion.name[i] = Parrot_gc_strdup(interp, s);
- mem_sys_free(current);
+ mem_gc_free(interp, current);
}
}
@@ -1221,14 +1223,14 @@
const size_t len = strlen(current);
if (len && (current[len - 1] == '$')) { /* local label */
const size_t slen = len + 10;
- char * const s = (char *)mem_sys_allocate(slen);
+ char * const s = mem_gc_allocate_n_typed(interp, slen, char);
current[len - 1] = '\0';
snprintf(s, slen, "%s%d", current, IMCC_INFO(interp)->frames->label);
frame->expansion.name[i] = s;
- mem_sys_free(current);
+ mem_gc_free(interp, current);
}
}
}
@@ -1255,13 +1257,13 @@
if (!s || !(file = fopen(s, "r"))) {
if (frame->s.file)
- mem_sys_free(frame->s.file);
+ mem_gc_free(interp, frame->s.file);
IMCC_fataly(interp, EXCEPTION_EXTERNAL_ERROR, strerror(errno));
}
if (frame->s.file)
- mem_sys_free(frame->s.file);
- mem_sys_free(s);
+ mem_gc_free(interp, frame->s.file);
+ mem_gc_free(interp, s);
frame->s.file = Parrot_gc_strdup(interp, file_name);
frame->s.handle = file;
ext = strrchr(file_name, '.');
@@ -1318,7 +1320,7 @@
IMCC_INFO(interp)->frames =
(macro_frame_t *)IMCC_INFO(interp)->frames->s.next;
- l = destroy_frame(tmp, yyscanner);
+ l = destroy_frame(interp, tmp, yyscanner);
if (l)
IMCC_INFO(interp)->line = l;
Modified: branches/boehm_gc_2/compilers/imcc/imcc.y
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/imcc.y Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/imcc.y Tue Feb 23 21:02:00 2010 (r44404)
@@ -479,7 +479,7 @@
r[1] = rhs;
rhs->pmc_type = type_enum;
- mem_sys_free(name);
+ mem_gc_free(interp, name);
return INS(interp, unit, "set_p_pc", "", r, 2, 0, 1);
}
@@ -545,8 +545,8 @@
rhs->pmc_type = Parrot_pmc_get_type_str(interp,
Parrot_str_new(interp, unquoted_name, name_length));
- mem_sys_free(unquoted_name);
- mem_sys_free(const_name);
+ mem_gc_free(interp, unquoted_name);
+ mem_gc_free(interp, const_name);
return INS(interp, unit, "set_p_pc", "", r, 2, 0, 1);
}
@@ -795,7 +795,7 @@
}
r = mk_sub_address(interp, name_copy + 1);
- mem_sys_free(name_copy);
+ mem_gc_free(interp, name_copy);
return r;
}
@@ -1202,7 +1202,7 @@
{
$$ = 0;
do_loadlib(interp, $2);
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
}
;
@@ -1227,7 +1227,7 @@
* store annotation like it's an instruction. */
SymReg * const key = mk_const(interp, $2, 'S');
$$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, ".annotate", 2, key, $4);
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
}
;
@@ -1240,7 +1240,7 @@
Parrot_register_HLL(interp, hll_name));
IMCC_INFO(interp)->cur_namespace = NULL;
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
$$ = 0;
}
;
@@ -1249,7 +1249,7 @@
CONST { IMCC_INFO(interp)->is_def = 1; } type IDENTIFIER '=' const
{
mk_const_ident(interp, $4, $3, $6, 1);
- mem_sys_free($4);
+ mem_gc_free(interp, $4);
IMCC_INFO(interp)->is_def = 0;
}
;
@@ -1258,15 +1258,15 @@
CONST { IMCC_INFO(interp)->is_def = 1; } INTC var_or_i '=' any_string
{
$$ = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
- mem_sys_free($6);
+ mem_gc_free(interp, $6);
IMCC_INFO(interp)->is_def = 0;
}
| CONST { IMCC_INFO(interp)->is_def = 1; } STRINGC var_or_i '=' any_string
{
$$ = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
- mem_sys_free($3);
- mem_sys_free($6);
+ mem_gc_free(interp, $3);
+ mem_gc_free(interp, $6);
IMCC_INFO(interp)->is_def = 0;
}
;
@@ -1296,7 +1296,7 @@
$$ = INS(interp, IMCC_INFO(interp)->cur_unit,
$2, 0, IMCC_INFO(interp)->regs,
IMCC_INFO(interp)->nargs, IMCC_INFO(interp) -> keyvec, 1);
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
}
| PCC_SUB
{
@@ -1309,7 +1309,7 @@
IMCC_INFO(interp)->cur_unit,
mk_sub_label(interp, $4));
IMCC_INFO(interp)->cur_call->pcc_sub->pragma = $3;
- mem_sys_free($4);
+ mem_gc_free(interp, $4);
}
| PNULL var
{
@@ -1324,9 +1324,9 @@
n = mk_const(interp, name, 'S');
set_lexical(interp, r, n);
$$ = 0;
- mem_sys_free(name);
- mem_sys_free($2);
- mem_sys_free($4);
+ mem_gc_free(interp, name);
+ mem_gc_free(interp, $2);
+ mem_gc_free(interp, $4);
}
| /* none */ { $$ = 0;}
;
@@ -1436,7 +1436,7 @@
else
$$ = mk_ident(interp, $2, $1);
$$->type |= $3;
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
}
;
@@ -1451,13 +1451,13 @@
{
$$ = 0;
IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, $3);
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
| OUTER '(' IDENTIFIER ')'
{
$$ = 0;
IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, $3, 'S');
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
;
@@ -1525,7 +1525,7 @@
$$ = 0;
IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, $3, 'S');
IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes($3);
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
;
@@ -1559,7 +1559,7 @@
else {
r = mk_const(interp, "PMC", 'S');
}
- mem_sys_free($1);
+ mem_gc_free(interp, $1);
$$ = r;
}
| STRINGC
@@ -1570,7 +1570,7 @@
else {
r = mk_const(interp, "PMC", 'S');
}
- mem_sys_free($1);
+ mem_gc_free(interp, $1);
$$ = r;
}
| '[' keylist ']' { $$ = $2; }
@@ -1732,8 +1732,8 @@
| ADV_OPTIONAL { $$ = VT_OPTIONAL; }
| ADV_OPT_FLAG { $$ = VT_OPT_FLAG; }
| ADV_NAMED { $$ = VT_NAMED; }
- | ADV_NAMED '(' STRINGC ')' { adv_named_set(interp, $3); $$ = 0; mem_sys_free($3); }
- | ADV_NAMED '(' USTRINGC ')' { adv_named_set_u(interp, $3); $$ = 0; mem_sys_free($3); }
+ | ADV_NAMED '(' STRINGC ')' { adv_named_set(interp, $3); $$ = 0; mem_gc_free(interp, $3); }
+ | ADV_NAMED '(' USTRINGC ')' { adv_named_set_u(interp, $3); $$ = 0; mem_gc_free(interp, $3); }
| UNIQUE_REG { $$ = VT_UNIQUE_REG; }
| ADV_CALL_SIG { $$ = VT_CALL_SIG; }
;
@@ -1886,7 +1886,7 @@
LABEL
{
Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, $1));
- mem_sys_free($1);
+ mem_gc_free(interp, $1);
$$ = i;
}
;
@@ -1951,15 +1951,15 @@
mk_ident(interp, l->id, $3);
l1 = l;
l = l->next;
- mem_sys_free(l1->id);
- mem_sys_free(l1);
+ mem_gc_free(interp, l1->id);
+ mem_gc_free(interp, l1);
}
IMCC_INFO(interp)->is_def = 0; $$ = 0;
}
| LEXICAL STRINGC COMMA target
{
if ($4->set != 'P') {
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Cannot use %c register with .lex", $4->set);
}
@@ -1969,28 +1969,28 @@
name[strlen(name) - 1] = 0;
n = mk_const(interp, name, 'S');
set_lexical(interp, $4, n); $$ = 0;
- mem_sys_free($2);
- mem_sys_free(name);
+ mem_gc_free(interp, $2);
+ mem_gc_free(interp, name);
}
}
| LEXICAL USTRINGC COMMA target
{
if ($4->set != 'P') {
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Cannot use %c register with .lex", $4->set);
}
else {
SymReg *n = mk_const(interp, $2, 'U');
set_lexical(interp, $4, n); $$ = 0;
- mem_sys_free($2);
+ mem_gc_free(interp, $2);
}
}
| CONST { IMCC_INFO(interp)->is_def = 1; } type IDENTIFIER '=' const
{
mk_const_ident(interp, $4, $3, $6, 0);
IMCC_INFO(interp)->is_def = 0;
- mem_sys_free($4);
+ mem_gc_free(interp, $4);
}
| pmc_const
@@ -1998,7 +1998,7 @@
{
mk_const_ident(interp, $4, $3, $6, 1);
IMCC_INFO(interp)->is_def = 0;
- mem_sys_free($4);
+ mem_gc_free(interp, $4);
}
| TAILCALL sub_call
{
@@ -2020,7 +2020,7 @@
IMCC_INFO(interp)->nargs,
IMCC_INFO(interp)->keyvec,
1);
- mem_sys_free($1);
+ mem_gc_free(interp, $1);
}
| PNULL var { $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, $2); }
| sub_call { $$ = 0; IMCC_INFO(interp)->cur_call = NULL; }
@@ -2166,14 +2166,14 @@
IMCC_INFO(interp) -> regs,
IMCC_INFO(interp) -> nargs,
IMCC_INFO(interp) -> keyvec, 1);
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
;
the_sub:
- IDENTIFIER { $$ = mk_sub_address(interp, $1); mem_sys_free($1); }
- | STRINGC { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
- | USTRINGC { $$ = mk_sub_address_u(interp, $1); mem_sys_free($1); }
+ IDENTIFIER { $$ = mk_sub_address(interp, $1); mem_gc_free(interp, $1); }
+ | STRINGC { $$ = mk_sub_address_fromc(interp, $1); mem_gc_free(interp, $1); }
+ | USTRINGC { $$ = mk_sub_address_u(interp, $1); mem_gc_free(interp, $1); }
| target
{
$$ = $1;
@@ -2198,13 +2198,13 @@
{
IMCC_INFO(interp)->cur_obj = $1;
$$ = mk_const(interp, $3, 'U');
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
| target DOT STRINGC
{
IMCC_INFO(interp)->cur_obj = $1;
$$ = mk_const(interp, $3, 'S');
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
| target DOT target { IMCC_INFO(interp)->cur_obj = $1; $$ = $3; }
;
@@ -2246,7 +2246,7 @@
$$ = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, $3, 'S'), $5);
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
| var ADV_ARROW var
{
@@ -2258,7 +2258,7 @@
$$ = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, $1, 'S'), $3);
- mem_sys_free($1);
+ mem_gc_free(interp, $1);
}
;
@@ -2300,7 +2300,7 @@
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, $3, 'S'), $5);
- mem_sys_free($3);
+ mem_gc_free(interp, $3);
}
| result
{
@@ -2315,7 +2315,7 @@
| STRINGC ADV_ARROW target
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, $1, 'S'), $3);
- mem_sys_free($1);
+ mem_gc_free(interp, $1);
}
| /* empty */ { $$ = 0; }
;
@@ -2401,18 +2401,18 @@
;
sub_label_op_c:
sub_label_op
- | STRINGC { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
- | USTRINGC { $$ = mk_sub_address_u(interp, $1); mem_sys_free($1); }
+ | STRINGC { $$ = mk_sub_address_fromc(interp, $1); mem_gc_free(interp, $1); }
+ | USTRINGC { $$ = mk_sub_address_u(interp, $1); mem_gc_free(interp, $1); }
;
sub_label_op:
- IDENTIFIER { $$ = mk_sub_address(interp, $1); mem_sys_free($1); }
- | PARROT_OP { $$ = mk_sub_address(interp, $1); mem_sys_free($1); }
+ IDENTIFIER { $$ = mk_sub_address(interp, $1); mem_gc_free(interp, $1); }
+ | PARROT_OP { $$ = mk_sub_address(interp, $1); mem_gc_free(interp, $1); }
;
label_op:
- IDENTIFIER { $$ = mk_label_address(interp, $1); mem_sys_free($1); }
- | PARROT_OP { $$ = mk_label_address(interp, $1); mem_sys_free($1); }
+ IDENTIFIER { $$ = mk_label_address(interp, $1); mem_gc_free(interp, $1); }
+ | PARROT_OP { $$ = mk_label_address(interp, $1); mem_gc_free(interp, $1); }
;
var_or_i:
@@ -2470,14 +2470,14 @@
| NREG { $$ = mk_symreg(interp, $1, 'N'); }
| SREG { $$ = mk_symreg(interp, $1, 'S'); }
| PREG { $$ = mk_symreg(interp, $1, 'P'); }
- | REG { $$ = mk_pasm_reg(interp, $1); mem_sys_free($1); }
+ | REG { $$ = mk_pasm_reg(interp, $1); mem_gc_free(interp, $1); }
;
const:
- INTC { $$ = mk_const(interp, $1, 'I'); mem_sys_free($1); }
- | FLOATC { $$ = mk_const(interp, $1, 'N'); mem_sys_free($1); }
- | STRINGC { $$ = mk_const(interp, $1, 'S'); mem_sys_free($1); }
- | USTRINGC { $$ = mk_const(interp, $1, 'U'); mem_sys_free($1); }
+ INTC { $$ = mk_const(interp, $1, 'I'); mem_gc_free(interp, $1); }
+ | FLOATC { $$ = mk_const(interp, $1, 'N'); mem_gc_free(interp, $1); }
+ | STRINGC { $$ = mk_const(interp, $1, 'S'); mem_gc_free(interp, $1); }
+ | USTRINGC { $$ = mk_const(interp, $1, 'U'); mem_gc_free(interp, $1); }
;
Modified: branches/boehm_gc_2/compilers/imcc/imclexer.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/imclexer.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/imclexer.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -2449,7 +2449,7 @@
static void scan_file(PARROT_INTERP, ARGIN(struct macro_frame_t *frame), ARGMOD(FILE *file),
ARGMOD(void *yyscanner));
-static int destroy_frame(macro_frame_t *frame, ARGMOD(void *yyscanner));
+static int destroy_frame(PARROT_INTERP, macro_frame_t *frame, ARGMOD(void *yyscanner));
static int yylex_skip(YYSTYPE *valp, PARROT_INTERP, ARGIN(const char *skip),
ARGMOD(void *yyscanner));
@@ -2473,7 +2473,7 @@
#define DUP_AND_RET_FREE(valp, token) \
do { \
if (valp) { \
- mem_sys_free((valp)->s); \
+ mem_gc_free(interp, (valp)->s); \
(valp)->s = Parrot_gc_strdup(interp, yytext); \
return (token); \
} \
@@ -2853,16 +2853,17 @@
/* Newline in the heredoc. Realloc and cat on. */
IMCC_INFO(interp)->line++;
IMCC_INFO(interp)->heredoc_content =
- (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
- strlen(IMCC_INFO(interp)->heredoc_content) +
- strlen(yytext) + 2);
+ (char*)Parrot_gc_reallocate_memory_chunk(interp,
+ IMCC_INFO(interp)->heredoc_content,
+ strlen(IMCC_INFO(interp)->heredoc_content) +
+ strlen(yytext) + 2);
strcpy(IMCC_INFO(interp)->heredoc_content +
strlen(IMCC_INFO(interp)->heredoc_content), yytext);
}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 189 "compilers/imcc/imcc.l"
+#line 190 "compilers/imcc/imcc.l"
{
/* Are we at the end of the heredoc? */
if (STREQ(IMCC_INFO(interp)->heredoc_end, yytext)) {
@@ -2876,7 +2877,7 @@
IMCC_INFO(interp)->heredoc_content[len + 1] = 0;
- mem_sys_free(IMCC_INFO(interp)->heredoc_end);
+ mem_gc_free(interp, IMCC_INFO(interp)->heredoc_end);
IMCC_INFO(interp)->heredoc_end = NULL;
IMCC_INFO(interp)->frames->buffer = YY_CURRENT_BUFFER;
@@ -2893,9 +2894,10 @@
else {
/* Part of the heredoc. Realloc and cat the line on. */
IMCC_INFO(interp)->heredoc_content =
- (char *)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
- strlen(IMCC_INFO(interp)->heredoc_content) +
- strlen(yytext) + 2);
+ (char *)Parrot_gc_reallocate_memory_chunk(interp,
+ IMCC_INFO(interp)->heredoc_content,
+ strlen(IMCC_INFO(interp)->heredoc_content) +
+ strlen(yytext) + 2);
strcpy(IMCC_INFO(interp)->heredoc_content +
strlen(IMCC_INFO(interp)->heredoc_content), yytext);
}
@@ -2904,7 +2906,7 @@
case 4:
/* rule 4 can match eol */
YY_RULE_SETUP
-#line 227 "compilers/imcc/imcc.l"
+#line 229 "compilers/imcc/imcc.l"
{
yy_pop_state(yyscanner);
yy_push_state(cmt3, yyscanner);
@@ -2917,7 +2919,7 @@
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 237 "compilers/imcc/imcc.l"
+#line 239 "compilers/imcc/imcc.l"
{
yy_pop_state(yyscanner);
yy_push_state(cmt4, yyscanner);
@@ -2925,17 +2927,17 @@
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 242 "compilers/imcc/imcc.l"
+#line 244 "compilers/imcc/imcc.l"
{ yy_push_state(cmt2, yyscanner); }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 244 "compilers/imcc/imcc.l"
+#line 246 "compilers/imcc/imcc.l"
{ yy_push_state(cmt1, yyscanner); }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 246 "compilers/imcc/imcc.l"
+#line 248 "compilers/imcc/imcc.l"
{
IMCC_INFO(interp)->line = atoi(yytext);
yy_pop_state(yyscanner);
@@ -2946,7 +2948,7 @@
case 9:
/* rule 9 can match eol */
YY_RULE_SETUP
-#line 253 "compilers/imcc/imcc.l"
+#line 255 "compilers/imcc/imcc.l"
{
yy_pop_state(yyscanner);
IMCC_INFO(interp)->line++;
@@ -2955,7 +2957,7 @@
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
-#line 258 "compilers/imcc/imcc.l"
+#line 260 "compilers/imcc/imcc.l"
{
if (IMCC_INFO(interp)->expect_pasm == 2)
BEGIN(INITIAL);
@@ -2968,7 +2970,7 @@
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 268 "compilers/imcc/imcc.l"
+#line 270 "compilers/imcc/imcc.l"
{
yy_push_state(cmt5, yyscanner);
}
@@ -2976,7 +2978,7 @@
case 12:
/* rule 12 can match eol */
YY_RULE_SETUP
-#line 272 "compilers/imcc/imcc.l"
+#line 274 "compilers/imcc/imcc.l"
{
if (IMCC_INFO(interp)->expect_pasm == 2)
BEGIN(INITIAL);
@@ -2992,7 +2994,7 @@
case 13:
/* rule 13 can match eol */
YY_RULE_SETUP
-#line 285 "compilers/imcc/imcc.l"
+#line 287 "compilers/imcc/imcc.l"
{
/* this is a stand-alone =cut, but we're not in POD mode, so ignore. */
IMCC_INFO(interp)->line++;
@@ -3000,7 +3002,7 @@
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 290 "compilers/imcc/imcc.l"
+#line 292 "compilers/imcc/imcc.l"
{
IMCC_INFO(interp)->in_pod = 1;
yy_push_state(pod, yyscanner);
@@ -3009,7 +3011,7 @@
case 15:
/* rule 15 can match eol */
YY_RULE_SETUP
-#line 295 "compilers/imcc/imcc.l"
+#line 297 "compilers/imcc/imcc.l"
{
IMCC_INFO(interp)->in_pod = 0;
yy_pop_state(yyscanner);
@@ -3018,478 +3020,478 @@
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 301 "compilers/imcc/imcc.l"
+#line 303 "compilers/imcc/imcc.l"
{ /*ignore*/ }
YY_BREAK
case 17:
/* rule 17 can match eol */
YY_RULE_SETUP
-#line 303 "compilers/imcc/imcc.l"
+#line 305 "compilers/imcc/imcc.l"
{ IMCC_INFO(interp)->line++; }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 305 "compilers/imcc/imcc.l"
+#line 307 "compilers/imcc/imcc.l"
return TK_LINE;
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 306 "compilers/imcc/imcc.l"
+#line 308 "compilers/imcc/imcc.l"
return TK_FILE;
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 307 "compilers/imcc/imcc.l"
+#line 309 "compilers/imcc/imcc.l"
return ANNOTATE;
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 308 "compilers/imcc/imcc.l"
+#line 310 "compilers/imcc/imcc.l"
return LEXICAL;
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 309 "compilers/imcc/imcc.l"
+#line 311 "compilers/imcc/imcc.l"
return ARG;
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 310 "compilers/imcc/imcc.l"
+#line 312 "compilers/imcc/imcc.l"
return SUB;
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 311 "compilers/imcc/imcc.l"
+#line 313 "compilers/imcc/imcc.l"
return ESUB;
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 312 "compilers/imcc/imcc.l"
+#line 314 "compilers/imcc/imcc.l"
return PCC_BEGIN;
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 313 "compilers/imcc/imcc.l"
+#line 315 "compilers/imcc/imcc.l"
return PCC_END;
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 314 "compilers/imcc/imcc.l"
+#line 316 "compilers/imcc/imcc.l"
return PCC_CALL;
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 315 "compilers/imcc/imcc.l"
+#line 317 "compilers/imcc/imcc.l"
return NCI_CALL;
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 316 "compilers/imcc/imcc.l"
+#line 318 "compilers/imcc/imcc.l"
return METH_CALL;
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 317 "compilers/imcc/imcc.l"
+#line 319 "compilers/imcc/imcc.l"
return INVOCANT;
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 318 "compilers/imcc/imcc.l"
+#line 320 "compilers/imcc/imcc.l"
return PCC_SUB;
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 319 "compilers/imcc/imcc.l"
+#line 321 "compilers/imcc/imcc.l"
return PCC_BEGIN_RETURN;
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 320 "compilers/imcc/imcc.l"
+#line 322 "compilers/imcc/imcc.l"
return PCC_END_RETURN;
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 321 "compilers/imcc/imcc.l"
+#line 323 "compilers/imcc/imcc.l"
return PCC_BEGIN_YIELD;
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 322 "compilers/imcc/imcc.l"
+#line 324 "compilers/imcc/imcc.l"
return PCC_END_YIELD;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 324 "compilers/imcc/imcc.l"
+#line 326 "compilers/imcc/imcc.l"
return METHOD;
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 325 "compilers/imcc/imcc.l"
+#line 327 "compilers/imcc/imcc.l"
return MULTI;
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 326 "compilers/imcc/imcc.l"
+#line 328 "compilers/imcc/imcc.l"
return MAIN;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 327 "compilers/imcc/imcc.l"
+#line 329 "compilers/imcc/imcc.l"
return LOAD;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 328 "compilers/imcc/imcc.l"
+#line 330 "compilers/imcc/imcc.l"
return INIT;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 329 "compilers/imcc/imcc.l"
+#line 331 "compilers/imcc/imcc.l"
return IMMEDIATE;
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 330 "compilers/imcc/imcc.l"
+#line 332 "compilers/imcc/imcc.l"
return POSTCOMP;
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 331 "compilers/imcc/imcc.l"
+#line 333 "compilers/imcc/imcc.l"
return ANON;
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 332 "compilers/imcc/imcc.l"
+#line 334 "compilers/imcc/imcc.l"
return OUTER;
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 333 "compilers/imcc/imcc.l"
+#line 335 "compilers/imcc/imcc.l"
return NEED_LEX;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 334 "compilers/imcc/imcc.l"
+#line 336 "compilers/imcc/imcc.l"
return VTABLE_METHOD;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 335 "compilers/imcc/imcc.l"
+#line 337 "compilers/imcc/imcc.l"
return NS_ENTRY;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 336 "compilers/imcc/imcc.l"
+#line 338 "compilers/imcc/imcc.l"
return UNIQUE_REG;
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 337 "compilers/imcc/imcc.l"
+#line 339 "compilers/imcc/imcc.l"
return SUB_INSTANCE_OF;
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 338 "compilers/imcc/imcc.l"
+#line 340 "compilers/imcc/imcc.l"
return SUBID;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 340 "compilers/imcc/imcc.l"
+#line 342 "compilers/imcc/imcc.l"
return RESULT;
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 341 "compilers/imcc/imcc.l"
+#line 343 "compilers/imcc/imcc.l"
return GET_RESULTS;
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 342 "compilers/imcc/imcc.l"
+#line 344 "compilers/imcc/imcc.l"
return YIELDT;
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 343 "compilers/imcc/imcc.l"
+#line 345 "compilers/imcc/imcc.l"
return SET_YIELD;
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 344 "compilers/imcc/imcc.l"
+#line 346 "compilers/imcc/imcc.l"
return RETURN;
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 345 "compilers/imcc/imcc.l"
+#line 347 "compilers/imcc/imcc.l"
return SET_RETURN;
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 346 "compilers/imcc/imcc.l"
+#line 348 "compilers/imcc/imcc.l"
return TAILCALL;
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 347 "compilers/imcc/imcc.l"
+#line 349 "compilers/imcc/imcc.l"
return LOADLIB;
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 349 "compilers/imcc/imcc.l"
+#line 351 "compilers/imcc/imcc.l"
return ADV_FLAT;
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 350 "compilers/imcc/imcc.l"
+#line 352 "compilers/imcc/imcc.l"
return ADV_SLURPY;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 351 "compilers/imcc/imcc.l"
+#line 353 "compilers/imcc/imcc.l"
return ADV_OPTIONAL;
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 352 "compilers/imcc/imcc.l"
+#line 354 "compilers/imcc/imcc.l"
return ADV_OPT_FLAG;
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 353 "compilers/imcc/imcc.l"
+#line 355 "compilers/imcc/imcc.l"
return ADV_NAMED;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 354 "compilers/imcc/imcc.l"
+#line 356 "compilers/imcc/imcc.l"
return ADV_ARROW;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 355 "compilers/imcc/imcc.l"
+#line 357 "compilers/imcc/imcc.l"
return ADV_INVOCANT;
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 356 "compilers/imcc/imcc.l"
+#line 358 "compilers/imcc/imcc.l"
return ADV_CALL_SIG;
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 358 "compilers/imcc/imcc.l"
+#line 360 "compilers/imcc/imcc.l"
return NAMESPACE;
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 359 "compilers/imcc/imcc.l"
+#line 361 "compilers/imcc/imcc.l"
return HLL;
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 361 "compilers/imcc/imcc.l"
+#line 363 "compilers/imcc/imcc.l"
return LOCAL;
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 362 "compilers/imcc/imcc.l"
+#line 364 "compilers/imcc/imcc.l"
return CONST;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 363 "compilers/imcc/imcc.l"
+#line 365 "compilers/imcc/imcc.l"
return GLOBAL_CONST;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 364 "compilers/imcc/imcc.l"
+#line 366 "compilers/imcc/imcc.l"
return PARAM;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 365 "compilers/imcc/imcc.l"
+#line 367 "compilers/imcc/imcc.l"
return GOTO;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 366 "compilers/imcc/imcc.l"
+#line 368 "compilers/imcc/imcc.l"
return IF;
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 367 "compilers/imcc/imcc.l"
+#line 369 "compilers/imcc/imcc.l"
return UNLESS;
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 368 "compilers/imcc/imcc.l"
+#line 370 "compilers/imcc/imcc.l"
return PNULL;
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 369 "compilers/imcc/imcc.l"
+#line 371 "compilers/imcc/imcc.l"
return INTV;
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 370 "compilers/imcc/imcc.l"
+#line 372 "compilers/imcc/imcc.l"
return FLOATV;
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 372 "compilers/imcc/imcc.l"
+#line 374 "compilers/imcc/imcc.l"
return PMCV;
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 373 "compilers/imcc/imcc.l"
+#line 375 "compilers/imcc/imcc.l"
return STRINGV;
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 374 "compilers/imcc/imcc.l"
+#line 376 "compilers/imcc/imcc.l"
return SHIFT_LEFT;
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 375 "compilers/imcc/imcc.l"
+#line 377 "compilers/imcc/imcc.l"
return SHIFT_RIGHT;
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 376 "compilers/imcc/imcc.l"
+#line 378 "compilers/imcc/imcc.l"
return SHIFT_RIGHT_U;
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 377 "compilers/imcc/imcc.l"
+#line 379 "compilers/imcc/imcc.l"
return LOG_AND;
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 378 "compilers/imcc/imcc.l"
+#line 380 "compilers/imcc/imcc.l"
return LOG_OR;
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 379 "compilers/imcc/imcc.l"
+#line 381 "compilers/imcc/imcc.l"
return LOG_XOR;
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 380 "compilers/imcc/imcc.l"
+#line 382 "compilers/imcc/imcc.l"
return RELOP_LT;
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 381 "compilers/imcc/imcc.l"
+#line 383 "compilers/imcc/imcc.l"
return RELOP_LTE;
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 382 "compilers/imcc/imcc.l"
+#line 384 "compilers/imcc/imcc.l"
return RELOP_GT;
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 383 "compilers/imcc/imcc.l"
+#line 385 "compilers/imcc/imcc.l"
return RELOP_GTE;
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 384 "compilers/imcc/imcc.l"
+#line 386 "compilers/imcc/imcc.l"
return RELOP_EQ;
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 385 "compilers/imcc/imcc.l"
+#line 387 "compilers/imcc/imcc.l"
return RELOP_NE;
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 386 "compilers/imcc/imcc.l"
+#line 388 "compilers/imcc/imcc.l"
return POW;
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 388 "compilers/imcc/imcc.l"
+#line 390 "compilers/imcc/imcc.l"
return CONCAT;
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 389 "compilers/imcc/imcc.l"
+#line 391 "compilers/imcc/imcc.l"
return DOT;
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 391 "compilers/imcc/imcc.l"
+#line 393 "compilers/imcc/imcc.l"
return PLUS_ASSIGN;
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 392 "compilers/imcc/imcc.l"
+#line 394 "compilers/imcc/imcc.l"
return MINUS_ASSIGN;
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 393 "compilers/imcc/imcc.l"
+#line 395 "compilers/imcc/imcc.l"
return MUL_ASSIGN;
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 394 "compilers/imcc/imcc.l"
+#line 396 "compilers/imcc/imcc.l"
return DIV_ASSIGN;
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 395 "compilers/imcc/imcc.l"
+#line 397 "compilers/imcc/imcc.l"
return MOD_ASSIGN;
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 396 "compilers/imcc/imcc.l"
+#line 398 "compilers/imcc/imcc.l"
return FDIV;
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 397 "compilers/imcc/imcc.l"
+#line 399 "compilers/imcc/imcc.l"
return FDIV_ASSIGN;
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 398 "compilers/imcc/imcc.l"
+#line 400 "compilers/imcc/imcc.l"
return BAND_ASSIGN;
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 399 "compilers/imcc/imcc.l"
+#line 401 "compilers/imcc/imcc.l"
return BOR_ASSIGN;
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 400 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
return BXOR_ASSIGN;
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 401 "compilers/imcc/imcc.l"
+#line 403 "compilers/imcc/imcc.l"
return SHR_ASSIGN;
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 402 "compilers/imcc/imcc.l"
+#line 404 "compilers/imcc/imcc.l"
return SHL_ASSIGN;
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 405 "compilers/imcc/imcc.l"
return SHR_U_ASSIGN;
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 404 "compilers/imcc/imcc.l"
+#line 406 "compilers/imcc/imcc.l"
return CONCAT_ASSIGN;
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 406 "compilers/imcc/imcc.l"
+#line 408 "compilers/imcc/imcc.l"
{
char *macro_name = NULL;
int start_cond = YY_START;
@@ -3521,11 +3523,11 @@
macro_exists = 1;
define_macro(interp, macro_name, NULL, valp->s, start_line);
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
/* don't leak these */
if (macro_exists)
- mem_sys_free(macro_name);
+ mem_gc_free(interp, macro_name);
IMCC_INFO(interp)->cur_macro_name = NULL;
@@ -3535,14 +3537,14 @@
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 449 "compilers/imcc/imcc.l"
+#line 451 "compilers/imcc/imcc.l"
{
return read_macro(valp, interp, yyscanner);
}
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 453 "compilers/imcc/imcc.l"
+#line 455 "compilers/imcc/imcc.l"
{
const int c = yylex(valp,yyscanner,interp);
@@ -3557,7 +3559,7 @@
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 465 "compilers/imcc/imcc.l"
+#line 467 "compilers/imcc/imcc.l"
{
if (valp) {
char *label;
@@ -3570,7 +3572,7 @@
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "missing space?");
len = yyleng + 10;
- label = (char *)mem_sys_allocate(len);
+ label = mem_gc_allocate_n_typed(interp, len, char);
snprintf(label, len, "%s%d", yytext, IMCC_INFO(interp)->frames->label);
/* XXX: free valp->s if it exists? */
@@ -3582,7 +3584,7 @@
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 487 "compilers/imcc/imcc.l"
+#line 489 "compilers/imcc/imcc.l"
{
if (valp) {
@@ -3594,7 +3596,7 @@
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "missing space?");
len = yyleng + 10;
- label = (char *)mem_sys_allocate(len);
+ label = mem_gc_allocate_n_typed(interp, len, char);
snprintf(label, len, "%s%d", yytext, IMCC_INFO(interp)->frames->label);
/* XXX: free valp->s if it exists? */
@@ -3606,12 +3608,12 @@
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 508 "compilers/imcc/imcc.l"
+#line 510 "compilers/imcc/imcc.l"
return COMMA;
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 510 "compilers/imcc/imcc.l"
+#line 512 "compilers/imcc/imcc.l"
{
/* trim last ':' */
YYCHOP();
@@ -3624,11 +3626,11 @@
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 520 "compilers/imcc/imcc.l"
+#line 522 "compilers/imcc/imcc.l"
{
char * const macro_name = Parrot_gc_strdup(interp, yytext + 1);
int failed = expand_macro(interp, macro_name, yyscanner);
- mem_sys_free(macro_name);
+ mem_gc_free(interp, macro_name);
if (!failed) {
yyless(1);
return DOT;
@@ -3637,32 +3639,32 @@
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 532 "compilers/imcc/imcc.l"
+#line 534 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, FLOATC);
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 533 "compilers/imcc/imcc.l"
+#line 535 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 534 "compilers/imcc/imcc.l"
+#line 536 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 535 "compilers/imcc/imcc.l"
+#line 537 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 538 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 538 "compilers/imcc/imcc.l"
+#line 540 "compilers/imcc/imcc.l"
{
valp->s = Parrot_gc_strdup(interp, yytext);
@@ -3675,7 +3677,7 @@
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 548 "compilers/imcc/imcc.l"
+#line 550 "compilers/imcc/imcc.l"
{
valp->s = Parrot_gc_strdup(interp, yytext);
@@ -3684,7 +3686,7 @@
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 554 "compilers/imcc/imcc.l"
+#line 556 "compilers/imcc/imcc.l"
{
macro_frame_t *frame;
@@ -3703,7 +3705,7 @@
IMCC_INFO(interp)->frames = frame;
/* Start slurping up the heredoc. */
- IMCC_INFO(interp)->heredoc_content = (char *)mem_sys_allocate(2);
+ IMCC_INFO(interp)->heredoc_content = mem_gc_allocate_n_typed(interp, 2, char);
/* preserve delim */
IMCC_INFO(interp)->heredoc_content[0] = yytext[2];
@@ -3715,7 +3717,7 @@
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 582 "compilers/imcc/imcc.l"
+#line 584 "compilers/imcc/imcc.l"
{
/* charset:"..." */
valp->s = Parrot_gc_strdup(interp, yytext);
@@ -3726,7 +3728,7 @@
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 590 "compilers/imcc/imcc.l"
+#line 592 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3737,7 +3739,7 @@
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 598 "compilers/imcc/imcc.l"
+#line 600 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3748,7 +3750,7 @@
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 606 "compilers/imcc/imcc.l"
+#line 608 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3759,7 +3761,7 @@
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 614 "compilers/imcc/imcc.l"
+#line 616 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3770,7 +3772,7 @@
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 622 "compilers/imcc/imcc.l"
+#line 624 "compilers/imcc/imcc.l"
{
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"'%s' is not a valid register name", yytext);
@@ -3778,7 +3780,7 @@
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 627 "compilers/imcc/imcc.l"
+#line 629 "compilers/imcc/imcc.l"
{
if (IMCC_INFO(interp)->state->pasm_file == 0)
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3792,7 +3794,7 @@
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 638 "compilers/imcc/imcc.l"
+#line 640 "compilers/imcc/imcc.l"
{
if (!IMCC_INFO(interp)->is_def) {
SymReg *r = find_sym(interp, yytext);
@@ -3823,19 +3825,19 @@
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 667 "compilers/imcc/imcc.l"
+#line 669 "compilers/imcc/imcc.l"
/* skip */;
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 669 "compilers/imcc/imcc.l"
+#line 671 "compilers/imcc/imcc.l"
{
/* catch all except for state macro */
return yytext[0];
}
YY_BREAK
case YY_STATE_EOF(emit):
-#line 674 "compilers/imcc/imcc.l"
+#line 676 "compilers/imcc/imcc.l"
{
BEGIN(INITIAL);
@@ -3848,18 +3850,18 @@
}
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 685 "compilers/imcc/imcc.l"
+#line 687 "compilers/imcc/imcc.l"
yyterminate();
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 687 "compilers/imcc/imcc.l"
+#line 689 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ENDM);
YY_BREAK
case 137:
/* rule 137 can match eol */
YY_RULE_SETUP
-#line 689 "compilers/imcc/imcc.l"
+#line 691 "compilers/imcc/imcc.l"
{
IMCC_INFO(interp)->line++;
DUP_AND_RET(valp, '\n');
@@ -3867,12 +3869,12 @@
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 694 "compilers/imcc/imcc.l"
+#line 696 "compilers/imcc/imcc.l"
return LABEL;
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 696 "compilers/imcc/imcc.l"
+#line 698 "compilers/imcc/imcc.l"
{
if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3884,13 +3886,13 @@
YYCHOP();
len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 15;
- label = (char *)mem_sys_allocate(len);
+ label = mem_gc_allocate_n_typed(interp, len, char);
snprintf(label, len, "local__%s__%s__$:",
IMCC_INFO(interp)->cur_macro_name, yytext+1);
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = label;
}
@@ -3899,12 +3901,12 @@
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 720 "compilers/imcc/imcc.l"
+#line 722 "compilers/imcc/imcc.l"
{
if (valp) {
if (!IMCC_INFO(interp)->cur_macro_name) {
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Invalid LABEL outside of macro");
}
@@ -3913,14 +3915,14 @@
const size_t fmtlen = strlen(fmt) - (2 * strlen("%s"));
const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name)
+ yyleng + fmtlen;
- char * const label = (char *)mem_sys_allocate(len);
+ char * const label = mem_gc_allocate_n_typed(interp, len, char);
/* skip over ".$" prefix with the +2 */
snprintf(label, len, fmt,
IMCC_INFO(interp)->cur_macro_name, yytext + 2);
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = label;
}
}
@@ -3930,49 +3932,49 @@
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 748 "compilers/imcc/imcc.l"
+#line 750 "compilers/imcc/imcc.l"
/* skip leading ws */;
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 749 "compilers/imcc/imcc.l"
+#line 751 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ' ');
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 750 "compilers/imcc/imcc.l"
+#line 752 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, REG);
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 751 "compilers/imcc/imcc.l"
+#line 753 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, REG);
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 752 "compilers/imcc/imcc.l"
+#line 754 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, IDENTIFIER);
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 753 "compilers/imcc/imcc.l"
+#line 755 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, MACRO);
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 754 "compilers/imcc/imcc.l"
+#line 756 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, yytext[0]);
YY_BREAK
case YY_STATE_EOF(macro):
-#line 755 "compilers/imcc/imcc.l"
+#line 757 "compilers/imcc/imcc.l"
yyterminate();
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 757 "compilers/imcc/imcc.l"
+#line 759 "compilers/imcc/imcc.l"
ECHO;
YY_BREAK
-#line 3976 "compilers/imcc/imclexer.c"
+#line 3978 "compilers/imcc/imclexer.c"
case YY_STATE_EOF(pod):
case YY_STATE_EOF(cmt1):
case YY_STATE_EOF(cmt2):
@@ -5174,7 +5176,7 @@
#define YYTABLES_NAME "yytables"
-#line 757 "compilers/imcc/imcc.l"
+#line 759 "compilers/imcc/imcc.l"
@@ -5240,25 +5242,25 @@
}
static int
-destroy_frame(struct macro_frame_t *frame, void *yyscanner)
+destroy_frame(PARROT_INTERP, struct macro_frame_t *frame, void *yyscanner)
{
YY_BUFFER_STATE buffer = frame->buffer;
int ret = 0;
int i;
for (i = 0; i < frame->expansion.num_param; i++) {
- mem_sys_free(frame->expansion.name[i]);
+ mem_gc_free(interp, frame->expansion.name[i]);
frame->expansion.name[i] = NULL;
}
if (frame->heredoc_rest) {
- mem_sys_free(frame->heredoc_rest);
+ mem_gc_free(interp, frame->heredoc_rest);
frame->heredoc_rest = NULL;
} else
ret = frame->s.line;
- mem_sys_free(frame->s.file);
- mem_sys_free(frame);
+ mem_gc_free(interp, frame->s.file);
+ mem_gc_free(interp, frame);
if (buffer != NULL)
yy_switch_to_buffer(buffer,yyscanner);
@@ -5317,21 +5319,21 @@
macro_name);
len += strlen(val.s);
- current = (char *)mem_sys_realloc(current, len + 1);
+ current = mem_gc_realloc_n_typed(interp, current, len + 1, char);
strcat(current,val.s);
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
val.s = NULL;
c = yylex(&val,yyscanner,interp);
}
if (valp) {
if (valp->s)
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
*valp = val;
}
else
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
return current;
}
@@ -5368,7 +5370,7 @@
len = 0;
if (val.s)
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
c = yylex_skip(&val, interp, " \n", yyscanner);
}
else if (need_id && (*current || c != IDENTIFIER) && c != ' ') {
@@ -5378,18 +5380,18 @@
}
else if (c == '{') {
current = read_braced(&val, interp, macro_name, current, yyscanner);
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
c = yylex_skip(&val, interp, " \n", yyscanner);
len = strlen(current);
}
else {
if (!need_id || c != ' ') {
len += strlen(val.s);
- current = (char *)mem_sys_realloc(current, len + 1);
+ current = mem_gc_realloc_n_typed(interp, current, len + 1, char);
strcat(current, val.s);
}
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
val.s = NULL;
c = yylex(&val,yyscanner,interp);
}
@@ -5400,7 +5402,7 @@
if (valp)
*valp = val;
else
- mem_sys_free(val.s);
+ mem_gc_free(interp, val.s);
return c;
}
@@ -5431,7 +5433,7 @@
c = yylex_skip(valp, interp, " ", yyscanner);
if (c == '(') {
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = NULL;
c = read_params(NULL, interp, ¶ms,
@@ -5445,7 +5447,7 @@
int elem_len;
if (c <= 0) {
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"File ended before macro '%s' was complete",
IMCC_INFO(interp)->cur_macro_name);
@@ -5460,27 +5462,27 @@
buffer_size <<= 1;
IMCC_INFO(interp)->macro_buffer =
- (char *)mem_sys_realloc(IMCC_INFO(interp)->macro_buffer,
- buffer_size);
+ mem_gc_realloc_n_typed(interp, IMCC_INFO(interp)->macro_buffer,
+ buffer_size, char);
}
}
else {
buffer_size = (elem_len << 1) > 1024 ? elem_len << 1 : 1024;
IMCC_INFO(interp)->macro_buffer =
- (char *)mem_sys_allocate_zeroed(buffer_size);
+ mem_gc_allocate_n_zeroed_typed(interp, buffer_size, char);
}
strcat(IMCC_INFO(interp)->macro_buffer, valp->s);
buffer_used += elem_len;
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = NULL;
}
c = yylex(valp,yyscanner,interp);
}
- mem_sys_free(valp->s);
+ mem_gc_free(interp, valp->s);
valp->s = NULL;
BEGIN(start_cond);
@@ -5488,7 +5490,7 @@
define_macro(interp, IMCC_INFO(interp)->cur_macro_name,
¶ms, IMCC_INFO(interp)->macro_buffer, start_line);
- mem_sys_free(IMCC_INFO(interp)->macro_buffer);
+ mem_gc_free(interp, IMCC_INFO(interp)->macro_buffer);
IMCC_INFO(interp)->macro_buffer = NULL;
IMCC_INFO(interp)->cur_macro_name = NULL;
@@ -5525,7 +5527,7 @@
macro_t *m = find_macro(interp, name);
if (m) {
- mem_sys_free(m->expansion);
+ mem_gc_free(interp, m->expansion);
m->expansion = NULL;
}
else {
@@ -5584,7 +5586,7 @@
/* remember macro name for error reporting
* first free any filename allocated in new_frame() */
if (frame->s.file)
- mem_sys_free(frame->s.file);
+ mem_gc_free(interp, frame->s.file);
frame->s.file = Parrot_gc_strdup(interp, name);
@@ -5635,7 +5637,7 @@
if (s) {
frame->expansion.name[i] = Parrot_gc_strdup(interp, s);
- mem_sys_free(current);
+ mem_gc_free(interp, current);
}
}
@@ -5643,14 +5645,14 @@
const size_t len = strlen(current);
if (len && (current[len - 1] == '$')) { /* local label */
const size_t slen = len + 10;
- char * const s = (char *)mem_sys_allocate(slen);
+ char * const s = mem_gc_allocate_n_typed(interp, slen, char);
current[len - 1] = '\0';
snprintf(s, slen, "%s%d", current, IMCC_INFO(interp)->frames->label);
frame->expansion.name[i] = s;
- mem_sys_free(current);
+ mem_gc_free(interp, current);
}
}
}
@@ -5677,13 +5679,13 @@
if (!s || !(file = fopen(s, "r"))) {
if (frame->s.file)
- mem_sys_free(frame->s.file);
+ mem_gc_free(interp, frame->s.file);
IMCC_fataly(interp, EXCEPTION_EXTERNAL_ERROR, strerror(errno));
}
if (frame->s.file)
- mem_sys_free(frame->s.file);
- mem_sys_free(s);
+ mem_gc_free(interp, frame->s.file);
+ mem_gc_free(interp, s);
frame->s.file = Parrot_gc_strdup(interp, file_name);
frame->s.handle = file;
ext = strrchr(file_name, '.');
@@ -5739,7 +5741,7 @@
IMCC_INFO(interp)->frames =
(macro_frame_t *)IMCC_INFO(interp)->frames->s.next;
- l = destroy_frame(tmp, yyscanner);
+ l = destroy_frame(interp, tmp, yyscanner);
if (l)
IMCC_INFO(interp)->line = l;
Modified: branches/boehm_gc_2/compilers/imcc/imcparser.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/imcparser.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/imcparser.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -805,7 +805,7 @@
r[1] = rhs;
rhs->pmc_type = type_enum;
- mem_sys_free(name);
+ mem_gc_free(interp, name);
return INS(interp, unit, "set_p_pc", "", r, 2, 0, 1);
}
@@ -871,8 +871,8 @@
rhs->pmc_type = Parrot_pmc_get_type_str(interp,
Parrot_str_new(interp, unquoted_name, name_length));
- mem_sys_free(unquoted_name);
- mem_sys_free(const_name);
+ mem_gc_free(interp, unquoted_name);
+ mem_gc_free(interp, const_name);
return INS(interp, unit, "set_p_pc", "", r, 2, 0, 1);
}
@@ -1121,7 +1121,7 @@
}
r = mk_sub_address(interp, name_copy + 1);
- mem_sys_free(name_copy);
+ mem_gc_free(interp, name_copy);
return r;
}
@@ -3304,7 +3304,7 @@
{
(yyval.i) = 0;
do_loadlib(interp, (yyvsp[(2) - (3)].s));
- mem_sys_free((yyvsp[(2) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (3)].s));
}
break;
@@ -3332,7 +3332,7 @@
* store annotation like it's an instruction. */
SymReg * const key = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, ".annotate", 2, key, (yyvsp[(4) - (4)].sr));
- mem_sys_free((yyvsp[(2) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (4)].s));
}
break;
@@ -3344,7 +3344,7 @@
Parrot_register_HLL(interp, hll_name));
IMCC_INFO(interp)->cur_namespace = NULL;
- mem_sys_free((yyvsp[(2) - (2)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (2)].s));
(yyval.t) = 0;
}
break;
@@ -3358,7 +3358,7 @@
#line 1250 "compilers/imcc/imcc.y"
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
- mem_sys_free((yyvsp[(4) - (6)].s));
+ mem_gc_free(interp, (yyvsp[(4) - (6)].s));
IMCC_INFO(interp)->is_def = 0;
}
break;
@@ -3372,7 +3372,7 @@
#line 1259 "compilers/imcc/imcc.y"
{
(yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
- mem_sys_free((yyvsp[(6) - (6)].s));
+ mem_gc_free(interp, (yyvsp[(6) - (6)].s));
IMCC_INFO(interp)->is_def = 0;
}
break;
@@ -3386,8 +3386,8 @@
#line 1266 "compilers/imcc/imcc.y"
{
(yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
- mem_sys_free((yyvsp[(3) - (6)].s));
- mem_sys_free((yyvsp[(6) - (6)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (6)].s));
+ mem_gc_free(interp, (yyvsp[(6) - (6)].s));
IMCC_INFO(interp)->is_def = 0;
}
break;
@@ -3428,7 +3428,7 @@
(yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
(yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
IMCC_INFO(interp)->nargs, IMCC_INFO(interp) -> keyvec, 1);
- mem_sys_free((yyvsp[(2) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (3)].s));
}
break;
@@ -3447,7 +3447,7 @@
IMCC_INFO(interp)->cur_unit,
mk_sub_label(interp, (yyvsp[(4) - (4)].s)));
IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(3) - (4)].t);
- mem_sys_free((yyvsp[(4) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(4) - (4)].s));
}
break;
@@ -3468,9 +3468,9 @@
n = mk_const(interp, name, 'S');
set_lexical(interp, r, n);
(yyval.i) = 0;
- mem_sys_free(name);
- mem_sys_free((yyvsp[(2) - (4)].s));
- mem_sys_free((yyvsp[(4) - (4)].s));
+ mem_gc_free(interp, name);
+ mem_gc_free(interp, (yyvsp[(2) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(4) - (4)].s));
}
break;
@@ -3605,7 +3605,7 @@
else
(yyval.sr) = mk_ident(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
(yyval.sr)->type |= (yyvsp[(3) - (3)].t);
- mem_sys_free((yyvsp[(2) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (3)].s));
}
break;
@@ -3619,7 +3619,7 @@
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
- mem_sys_free((yyvsp[(3) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (4)].s));
}
break;
@@ -3628,7 +3628,7 @@
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
- mem_sys_free((yyvsp[(3) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (4)].s));
}
break;
@@ -3708,7 +3708,7 @@
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes((yyvsp[(3) - (4)].s));
- mem_sys_free((yyvsp[(3) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (4)].s));
}
break;
@@ -3764,7 +3764,7 @@
else {
r = mk_const(interp, "PMC", 'S');
}
- mem_sys_free((yyvsp[(1) - (1)].s));
+ mem_gc_free(interp, (yyvsp[(1) - (1)].s));
(yyval.sr) = r;
}
break;
@@ -3778,7 +3778,7 @@
else {
r = mk_const(interp, "PMC", 'S');
}
- mem_sys_free((yyvsp[(1) - (1)].s));
+ mem_gc_free(interp, (yyvsp[(1) - (1)].s));
(yyval.sr) = r;
}
break;
@@ -4028,12 +4028,12 @@
case 130:
#line 1735 "compilers/imcc/imcc.y"
- { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); }
+ { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_gc_free(interp, (yyvsp[(3) - (4)].s)); }
break;
case 131:
#line 1736 "compilers/imcc/imcc.y"
- { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); }
+ { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_gc_free(interp, (yyvsp[(3) - (4)].s)); }
break;
case 132:
@@ -4243,7 +4243,7 @@
#line 1887 "compilers/imcc/imcc.y"
{
Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
- mem_sys_free((yyvsp[(1) - (1)].s));
+ mem_gc_free(interp, (yyvsp[(1) - (1)].s));
(yyval.i) = i;
}
break;
@@ -4319,8 +4319,8 @@
mk_ident(interp, l->id, (yyvsp[(3) - (4)].t));
l1 = l;
l = l->next;
- mem_sys_free(l1->id);
- mem_sys_free(l1);
+ mem_gc_free(interp, l1->id);
+ mem_gc_free(interp, l1);
}
IMCC_INFO(interp)->is_def = 0; (yyval.i) = 0;
}
@@ -4330,7 +4330,7 @@
#line 1960 "compilers/imcc/imcc.y"
{
if ((yyvsp[(4) - (4)].sr)->set != 'P') {
- mem_sys_free((yyvsp[(2) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (4)].s));
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Cannot use %c register with .lex", (yyvsp[(4) - (4)].sr)->set);
}
@@ -4340,8 +4340,8 @@
name[strlen(name) - 1] = 0;
n = mk_const(interp, name, 'S');
set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
- mem_sys_free((yyvsp[(2) - (4)].s));
- mem_sys_free(name);
+ mem_gc_free(interp, (yyvsp[(2) - (4)].s));
+ mem_gc_free(interp, name);
}
}
break;
@@ -4350,14 +4350,14 @@
#line 1977 "compilers/imcc/imcc.y"
{
if ((yyvsp[(4) - (4)].sr)->set != 'P') {
- mem_sys_free((yyvsp[(2) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (4)].s));
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Cannot use %c register with .lex", (yyvsp[(4) - (4)].sr)->set);
}
else {
SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'U');
set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
- mem_sys_free((yyvsp[(2) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(2) - (4)].s));
}
}
break;
@@ -4372,7 +4372,7 @@
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
IMCC_INFO(interp)->is_def = 0;
- mem_sys_free((yyvsp[(4) - (6)].s));
+ mem_gc_free(interp, (yyvsp[(4) - (6)].s));
}
break;
@@ -4386,7 +4386,7 @@
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
IMCC_INFO(interp)->is_def = 0;
- mem_sys_free((yyvsp[(4) - (6)].s));
+ mem_gc_free(interp, (yyvsp[(4) - (6)].s));
}
break;
@@ -4417,7 +4417,7 @@
IMCC_INFO(interp)->nargs,
IMCC_INFO(interp)->keyvec,
1);
- mem_sys_free((yyvsp[(1) - (2)].s));
+ mem_gc_free(interp, (yyvsp[(1) - (2)].s));
}
break;
@@ -4756,23 +4756,23 @@
IMCC_INFO(interp) -> regs,
IMCC_INFO(interp) -> nargs,
IMCC_INFO(interp) -> keyvec, 1);
- mem_sys_free((yyvsp[(3) - (4)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (4)].s));
}
break;
case 258:
#line 2174 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 259:
#line 2175 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 260:
#line 2176 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 261:
@@ -4806,7 +4806,7 @@
{
IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
(yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
- mem_sys_free((yyvsp[(3) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (3)].s));
}
break;
@@ -4815,7 +4815,7 @@
{
IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
(yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
- mem_sys_free((yyvsp[(3) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (3)].s));
}
break;
@@ -4874,7 +4874,7 @@
(yyval.sr) = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
- mem_sys_free((yyvsp[(3) - (5)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (5)].s));
}
break;
@@ -4892,7 +4892,7 @@
(yyval.sr) = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
- mem_sys_free((yyvsp[(1) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(1) - (3)].s));
}
break;
@@ -4959,7 +4959,7 @@
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
- mem_sys_free((yyvsp[(3) - (5)].s));
+ mem_gc_free(interp, (yyvsp[(3) - (5)].s));
}
break;
@@ -4980,7 +4980,7 @@
#line 2316 "compilers/imcc/imcc.y"
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
- mem_sys_free((yyvsp[(1) - (3)].s));
+ mem_gc_free(interp, (yyvsp[(1) - (3)].s));
}
break;
@@ -5121,32 +5121,32 @@
case 314:
#line 2404 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 315:
#line 2405 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 316:
#line 2409 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 317:
#line 2410 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 318:
#line 2414 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 319:
#line 2415 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 324:
@@ -5223,27 +5223,27 @@
case 335:
#line 2473 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 336:
#line 2477 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 337:
#line 2478 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 338:
#line 2479 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
case 339:
#line 2480 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+ { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_gc_free(interp, (yyvsp[(1) - (1)].s)); }
break;
Modified: branches/boehm_gc_2/compilers/imcc/instructions.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/instructions.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/instructions.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -102,7 +102,7 @@
ASSERT_ARGS(_mk_instruction)
const size_t reg_space = (n > 1) ? (sizeof (SymReg *) * (n - 1)) : 0;
Instruction * const ins =
- (Instruction*)mem_sys_allocate_zeroed(sizeof (Instruction) + reg_space);
+ (Instruction*)Parrot_gc_allocate_memory_chunk_with_interior_pointers(interp, sizeof (Instruction) + reg_space);
int i;
ins->opname = Parrot_gc_strdup(interp, op);
@@ -431,7 +431,8 @@
/*
-=item C<Instruction * delete_ins(IMC_Unit *unit, Instruction *ins)>
+=item C<Instruction * delete_ins(PARROT_INTERP, IMC_Unit *unit, Instruction
+*ins)>
Delete instruction ins, and then free it.
@@ -444,13 +445,13 @@
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
Instruction *
-delete_ins(ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins))
+delete_ins(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins))
{
ASSERT_ARGS(delete_ins)
Instruction * next = _delete_ins(unit, ins);
- free_ins(ins);
+ free_ins(interp, ins);
return next;
}
@@ -543,8 +544,8 @@
/*
-=item C<void subst_ins(IMC_Unit *unit, Instruction *ins, Instruction *tmp, int
-needs_freeing)>
+=item C<void subst_ins(PARROT_INTERP, IMC_Unit *unit, Instruction *ins,
+Instruction *tmp, int needs_freeing)>
Substitute Instruction C<tmp> for Instruction C<ins>.
Free C<ins> if C<needs_freeing> is true.
@@ -554,7 +555,7 @@
*/
void
-subst_ins(ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins),
+subst_ins(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins),
ARGMOD(Instruction *tmp), int needs_freeing)
{
ASSERT_ARGS(subst_ins)
@@ -578,7 +579,7 @@
tmp->line = ins->line;
if (needs_freeing)
- free_ins(ins);
+ free_ins(interp, ins);
}
/*
@@ -639,7 +640,7 @@
/*
-=item C<void free_ins(Instruction *ins)>
+=item C<void free_ins(PARROT_INTERP, Instruction *ins)>
Free the Instruction structure ins.
@@ -648,12 +649,12 @@
*/
void
-free_ins(ARGMOD(Instruction *ins))
+free_ins(PARROT_INTERP, ARGMOD(Instruction *ins))
{
ASSERT_ARGS(free_ins)
- mem_sys_free(ins->format);
- mem_sys_free(ins->opname);
- mem_sys_free(ins);
+ mem_gc_free(interp, ins->format);
+ mem_gc_free(interp, ins->opname);
+ mem_gc_free(interp, ins);
}
/*
Modified: branches/boehm_gc_2/compilers/imcc/instructions.h
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/instructions.h Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/instructions.h Tue Feb 23 21:02:00 2010 (r44404)
@@ -128,9 +128,12 @@
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
-Instruction * delete_ins(ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins))
+Instruction * delete_ins(PARROT_INTERP,
+ ARGMOD(IMC_Unit *unit),
+ ARGMOD(Instruction *ins))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
+ __attribute__nonnull__(3)
FUNC_MODIFIES(*unit)
FUNC_MODIFIES(*ins);
@@ -141,8 +144,9 @@
__attribute__nonnull__(1)
FUNC_MODIFIES(*unit);
-void free_ins(ARGMOD(Instruction *ins))
+void free_ins(PARROT_INTERP, ARGMOD(Instruction *ins))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*ins);
PARROT_WARN_UNUSED_RESULT
@@ -210,7 +214,7 @@
FUNC_MODIFIES(*ins)
FUNC_MODIFIES(*tmp);
-void subst_ins(
+void subst_ins(PARROT_INTERP,
ARGMOD(IMC_Unit *unit),
ARGMOD(Instruction *ins),
ARGMOD(Instruction *tmp),
@@ -218,6 +222,7 @@
__attribute__nonnull__(1)
__attribute__nonnull__(2)
__attribute__nonnull__(3)
+ __attribute__nonnull__(4)
FUNC_MODIFIES(*unit)
FUNC_MODIFIES(*ins)
FUNC_MODIFIES(*tmp);
@@ -238,12 +243,14 @@
, PARROT_ASSERT_ARG(fmt) \
, PARROT_ASSERT_ARG(r))
#define ASSERT_ARGS_delete_ins __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit) \
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(ins))
#define ASSERT_ARGS_emitb __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_free_ins __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(ins))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(ins))
#define ASSERT_ARGS_get_branch_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(ins))
#define ASSERT_ARGS_get_branch_regno __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -273,7 +280,8 @@
PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(tmp))
#define ASSERT_ARGS_subst_ins __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(unit) \
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(ins) \
, PARROT_ASSERT_ARG(tmp))
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
Modified: branches/boehm_gc_2/compilers/imcc/main.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/main.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/main.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -521,7 +521,7 @@
size = PackFile_pack_size(interp, interp->code->base.pf) *
sizeof (opcode_t);
IMCC_info(interp, 1, "packed code %d bytes\n", size);
- packed = (opcode_t*) mem_sys_allocate(size);
+ packed = (opcode_t*) Parrot_gc_allocate_memory_chunk(interp, size);
PackFile_pack(interp, interp->code->base.pf, packed);
if (STREQ(output_file, "-"))
fp = stdout;
@@ -534,7 +534,7 @@
"Couldn't write %s\n", output_file);
fclose(fp);
IMCC_info(interp, 1, "%s written.\n", output_file);
- mem_sys_free(packed);
+ mem_gc_free(interp, packed);
}
/*
Modified: branches/boehm_gc_2/compilers/imcc/optimizer.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/optimizer.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/optimizer.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -366,13 +366,13 @@
last->symregs, args, 0, 0);
last->opnum = tmp->opnum;
last->opsize = tmp->opsize;
- mem_sys_free(last->opname);
+ mem_gc_free(interp, last->opname);
last->opname = Parrot_gc_strdup(interp, tmp->opname);
- free_ins(tmp);
+ free_ins(interp, tmp);
/* delete branch */
unit->ostat.deleted_ins++;
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
unit->ostat.if_branch++;
changed = 1;
}
@@ -463,7 +463,7 @@
}
tmp = INS(interp, unit, ins->opname, "", ins->symregs, 2, 0, 0);
IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
- subst_ins(unit, ins, tmp, 1);
+ subst_ins(interp, unit, ins, tmp, 1);
ins = tmp;
changes = 1;
}
@@ -494,7 +494,7 @@
ins->opnum == PARROT_OP_fdiv_n_nc) &&
atof(ins->symregs[1]->name) == 1.0)) {
IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
if (ins)
ins = ins->prev ? ins->prev : unit->instructions;
else
@@ -522,7 +522,7 @@
tmp = INS(interp, unit, "inc", "", ins->symregs, 1, 0, 0);
else
tmp = INS(interp, unit, "dec", "", ins->symregs, 1, 0, 0);
- subst_ins(unit, ins, tmp, 1);
+ subst_ins(interp, unit, ins, tmp, 1);
IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
ins = tmp;
changes = 1;
@@ -576,7 +576,7 @@
}
tmp = INS(interp, unit, "set", "", ins->symregs, 2, 0, 0);
IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
- subst_ins(unit, ins, tmp, 1);
+ subst_ins(interp, unit, ins, tmp, 1);
ins = tmp;
changes = 1;
continue;
@@ -604,7 +604,7 @@
ins->symregs[1] = r;
tmp = INS(interp, unit, "set", "", ins->symregs, 2, 0, 0);
IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
- subst_ins(unit, ins, tmp, 1);
+ subst_ins(interp, unit, ins, tmp, 1);
ins = tmp;
changes = 1;
}
@@ -620,7 +620,7 @@
IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
--ins->symregs[1]->use_count;
tmp = INS(interp, unit, "null", "", ins->symregs, 1, 0, 0);
- subst_ins(unit, ins, tmp, 1);
+ subst_ins(interp, unit, ins, tmp, 1);
IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
ins = tmp;
changes = 1;
@@ -701,7 +701,7 @@
if (found) {
const Instruction * const prev = ins2->prev;
if (prev) {
- subst_ins(unit, ins2, tmp, 1);
+ subst_ins(interp, unit, ins2, tmp, 1);
any = 1;
IMCC_debug(interp, DEBUG_OPT2,
" reduced to %I\n", tmp);
@@ -1209,7 +1209,7 @@
/* unconditional jump can be eliminated */
unit->ostat.deleted_ins++;
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
return 1;
}
}
@@ -1240,7 +1240,7 @@
const char * const neg_op = get_neg_op(cond->opname, &args);
if (neg_op) {
const size_t size = strlen(branch->symregs[0]->name) + 10; /* + '_post999' */
- char * const label = (char *)mem_sys_allocate(size);
+ char * const label = mem_gc_allocate_n_typed(interp, size, char);
int count;
int found = 0;
@@ -1288,12 +1288,12 @@
"loop %s -> %s converted to post-test, added label %s\n",
branch->symregs[0]->name, get_branch_reg(cond)->name, label);
- subst_ins(unit, branch, tmp, 1);
+ subst_ins(interp, unit, branch, tmp, 1);
unit->ostat.branch_cond_loop++;
changed = 1;
}
- mem_sys_free(label);
+ mem_gc_free(interp, label);
}
return changed;
@@ -1448,7 +1448,7 @@
IMCC_debug(interp, DEBUG_OPT1,
"block %d label %s deleted\n", i, lab->name);
unit->ostat.deleted_ins++;
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
changed = 1;
}
@@ -1494,7 +1494,7 @@
for (ins = bb->start; ins && ins->bbindex == bbi;) {
IMCC_debug(interp, DEBUG_OPT1,
"\tins deleted (dead block) %I\n", ins);
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
unit->ostat.deleted_ins++;
changed++;
}
@@ -1512,7 +1512,7 @@
STREQ(last->opname, "branch")) {
IMCC_debug(interp, DEBUG_OPT1,
"unreachable ins deleted (after branch) %I\n", ins);
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
unit->ostat.deleted_ins++;
changed++;
}
@@ -1525,7 +1525,7 @@
STREQ(last->opname, "branch") &&
STREQ(last->symregs[0]->name, ins->symregs[0]->name)) {
IMCC_debug(interp, DEBUG_OPT1, "dead branch deleted %I\n", ins);
- ins = delete_ins(unit, last);
+ ins = delete_ins(interp, unit, last);
unit->ostat.deleted_ins++;
changed++;
}
@@ -1557,7 +1557,7 @@
SymReg * const r = ins->symregs[0];
if (r && (r->use_count == 1 && r->lhs_use_count == 1)) {
IMCC_debug(interp, DEBUG_OPT2, "used once '%I' deleted\n", ins);
- ins = delete_ins(unit, ins);
+ ins = delete_ins(interp, unit, ins);
/* find previous instruction or first instruction of this CU
* ... but only the latter if it wasn't deleted */
Modified: branches/boehm_gc_2/compilers/imcc/parser_util.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/parser_util.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/parser_util.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -67,8 +67,9 @@
__attribute__nonnull__(3)
FUNC_MODIFIES(*error_message);
-static void imcc_destroy_macro_values(ARGMOD(void *value))
+static void imcc_destroy_macro_values(PARROT_INTERP, ARGMOD(void *value))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*value);
PARROT_WARN_UNUSED_RESULT
@@ -103,7 +104,8 @@
, PARROT_ASSERT_ARG(fullname) \
, PARROT_ASSERT_ARG(error_message))
#define ASSERT_ARGS_imcc_destroy_macro_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(value))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(value))
#define ASSERT_ARGS_try_rev_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(name) \
, PARROT_ASSERT_ARG(r))
@@ -719,12 +721,12 @@
if (imc_info) {
SymReg *ns = IMCC_INFO(interp)->cur_namespace;
IMCC_INFO(interp) = imc_info->prev;
- mem_sys_free(imc_info);
+ mem_gc_free(interp, imc_info);
imc_info = IMCC_INFO(interp);
IMCC_INFO(interp)->cur_unit = imc_info->last_unit;
if (ns && ns != imc_info->cur_namespace)
- free_sym(ns);
+ free_sym(interp, ns);
IMCC_INFO(interp)->cur_namespace = imc_info->cur_namespace;
}
@@ -985,9 +987,9 @@
if (imc_info) {
IMCC_INFO(interp) = imc_info->prev;
if (imc_info->globals)
- mem_sys_free(imc_info->globals);
+ mem_gc_free(interp, imc_info->globals);
- mem_sys_free(imc_info);
+ mem_gc_free(interp, imc_info);
}
return cs;
@@ -1289,7 +1291,7 @@
/*
-=item C<static void imcc_destroy_macro_values(void *value)>
+=item C<static void imcc_destroy_macro_values(PARROT_INTERP, void *value)>
A callback for parrot_chash_destroy_values() to free all macro-allocated memory.
@@ -1298,7 +1300,7 @@
*/
static void
-imcc_destroy_macro_values(ARGMOD(void *value))
+imcc_destroy_macro_values(PARROT_INTERP, ARGMOD(void *value))
{
ASSERT_ARGS(imcc_destroy_macro_values)
macro_t * const m = (macro_t *)value;
@@ -1309,11 +1311,11 @@
for (i = 0; i < params->num_param; ++i) {
char * const name = params->name[i];
if (name)
- mem_sys_free(name);
+ mem_gc_free(interp, name);
}
- mem_sys_free(m->expansion);
- mem_sys_free(m);
+ mem_gc_free(interp, m->expansion);
+ mem_gc_free(interp, m);
}
@@ -1336,9 +1338,9 @@
parrot_chash_destroy_values(interp, macros, imcc_destroy_macro_values);
if (IMCC_INFO(interp)->globals)
- mem_sys_free(IMCC_INFO(interp)->globals);
+ mem_gc_free(interp, IMCC_INFO(interp)->globals);
- mem_sys_free(IMCC_INFO(interp));
+ mem_gc_free(interp, IMCC_INFO(interp));
IMCC_INFO(interp) = NULL;
if (eval_nr != 0)
Modified: branches/boehm_gc_2/compilers/imcc/pbc.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/pbc.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/pbc.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -319,13 +319,13 @@
while (s) {
subs_t * const prev_s = s->prev;
- clear_sym_hash(&s->fixup);
- mem_sys_free(s);
+ clear_sym_hash(interp, &s->fixup);
+ mem_gc_free(interp, s);
s = prev_s;
}
- clear_sym_hash(&cs->key_consts);
- mem_sys_free(cs);
+ clear_sym_hash(interp, &cs->key_consts);
+ mem_gc_free(interp, cs);
cs = prev_cs;
}
IMCC_INFO(interp)->globals->cs = NULL;
@@ -438,7 +438,7 @@
IMCC_INFO(interp)->globals = mem_gc_allocate_zeroed_typed(interp, imcc_globals);
if (IMCC_INFO(interp)->globals->cs)
- clear_sym_hash(&IMCC_INFO(interp)->globals->cs->key_consts);
+ clear_sym_hash(interp, &IMCC_INFO(interp)->globals->cs->key_consts);
else {
/* register cleanup code */
Parrot_on_exit(interp, imcc_globals_destroy, NULL);
@@ -1236,7 +1236,7 @@
#define UNIT_FREE_CHAR(x) \
do { \
- mem_sys_free((x)); \
+ mem_gc_free(interp, (x)); \
(x) = NULL; \
} while (0);
@@ -1276,7 +1276,7 @@
if (real_name) {
char * const p = Parrot_gc_strdup(interp, real_name + 1);
- mem_sys_free(r->name);
+ mem_gc_free(interp, r->name);
r->name = p;
}
}
@@ -1483,7 +1483,7 @@
interp->code->const_table, pfc, key);
if (!rc) {
- mem_sys_free(pfc);
+ mem_gc_free(interp, pfc);
IMCC_fatal(interp, 1,
"add_const_key: PackFile_Constant error\n");
}
@@ -1498,7 +1498,7 @@
IMCC_debug(interp, DEBUG_PBC_CONST, "\t %x /%x %x/ /%x %x/\n",
key[0], key[1], key[2], key[3], key[4]);
- mem_sys_free(pfc);
+ mem_gc_free(interp, pfc);
return k;
}
@@ -2147,7 +2147,7 @@
/* allocate code */
interp->code->base.data = (opcode_t *)
- mem_sys_realloc(interp->code->base.data, bytes);
+ Parrot_gc_reallocate_memory_chunk(interp, interp->code->base.data, bytes);
/* reallocating this removes its mmaped-ness; needs encapsulation */
interp->code->base.pf->is_mmap_ped = 0;
Modified: branches/boehm_gc_2/compilers/imcc/pcc.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/pcc.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/pcc.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -357,8 +357,8 @@
ins = insINS(interp, unit, ins, op_name, regs, n + 1);
if (n >= PCC_GET_ARGS_LIMIT) {
- mem_sys_free(regs);
- mem_sys_free(buf);
+ mem_gc_free(interp, regs);
+ mem_gc_free(interp, buf);
}
return ins;
#undef PCC_GET_ARGS_LIMIT
@@ -614,7 +614,7 @@
if (!n)
return ins;
- move_list = (unsigned char *)mem_sys_allocate(2 * n);
+ move_list = mem_gc_allocate_n_typed(interp, 2 * n, unsigned char);
move_info.unit = unit;
move_info.ins = ins;
move_info.n = n;
@@ -644,7 +644,7 @@
Parrot_register_move(interp, n, move_list, move_list + n, 255,
pcc_reg_mov, NULL, &move_info);
- mem_sys_free(move_list);
+ mem_gc_free(interp, move_list);
return move_info.ins;
}
Modified: branches/boehm_gc_2/compilers/imcc/reg_alloc.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/reg_alloc.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/reg_alloc.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -85,7 +85,8 @@
PARROT_WARN_UNUSED_RESULT
PARROT_MALLOC
PARROT_CANNOT_RETURN_NULL
-static unsigned int* ig_allocate(int N);
+static unsigned int* ig_allocate(PARROT_INTERP, int N)
+ __attribute__nonnull__(1);
PARROT_WARN_UNUSED_RESULT
static int ig_find_color(
@@ -192,7 +193,8 @@
#define ASSERT_ARGS_first_avail __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_ig_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_ig_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+ PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_ig_find_color __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(unit) \
, PARROT_ASSERT_ARG(avail))
@@ -291,7 +293,7 @@
/*
-=item C<static unsigned int* ig_allocate(int N)>
+=item C<static unsigned int* ig_allocate(PARROT_INTERP, int N)>
=cut
@@ -301,7 +303,7 @@
PARROT_MALLOC
PARROT_CANNOT_RETURN_NULL
static unsigned int*
-ig_allocate(int N)
+ig_allocate(PARROT_INTERP, int N)
{
ASSERT_ARGS(ig_allocate)
/* size is N*N bits, but we want don't want to allocate a partial
@@ -309,7 +311,7 @@
*/
const int need_bits = N * N;
const int num_words = (need_bits + sizeof (int) - 1) / sizeof (int);
- return (unsigned int *)mem_sys_allocate_zeroed(num_words * sizeof (int));
+ return mem_gc_allocate_n_zeroed_typed(interp, num_words, unsigned int);
}
/*
@@ -421,21 +423,21 @@
/*
-=item C<void free_reglist(IMC_Unit *unit)>
+=item C<void free_reglist(PARROT_INTERP, IMC_Unit *unit)>
=cut
*/
void
-free_reglist(ARGMOD(IMC_Unit *unit))
+free_reglist(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
{
ASSERT_ARGS(free_reglist)
#if IMC_TRACE
fprintf(stderr, "reg_alloc.c: free_reglist\n");
#endif
if (unit->interference_graph) {
- mem_sys_free(unit->interference_graph);
+ mem_gc_free(interp, unit->interference_graph);
unit->interference_graph = NULL;
}
@@ -443,9 +445,9 @@
unsigned int i;
for (i = 0; i < unit->n_symbols; i++)
- free_life_info(unit, unit->reglist[i]);
+ free_life_info(interp, unit, unit->reglist[i]);
- mem_sys_free(unit->reglist);
+ mem_gc_free(interp, unit->reglist);
unit->reglist = NULL;
unit->n_symbols = 0;
}
@@ -670,7 +672,7 @@
/* count symbols */
if (unit->reglist)
- free_reglist(unit);
+ free_reglist(interp, unit);
count = unit->hash.entries;
if (count == 0)
@@ -788,7 +790,7 @@
/* Construct a graph N x N where N = number of symbolics.
* This piece can be rewritten without the N x N array */
- interference_graph = ig_allocate(n_symbols);
+ interference_graph = ig_allocate(interp, n_symbols);
unit->interference_graph = interference_graph;
/* Calculate interferences between each chain and populate the the Y-axis */
@@ -1078,7 +1080,7 @@
color = ig_find_color(unit, avail);
if (color == -1) {
- mem_sys_free(avail);
+ mem_gc_free(interp, avail);
IMCC_fatal(interp, DEBUG_IMC,
"# no more colors - this should not happen\n");
}
@@ -1090,7 +1092,7 @@
r->name, color);
}
- mem_sys_free(avail);
+ mem_gc_free(interp, avail);
/* we are totally finished */
}
@@ -1160,7 +1162,7 @@
if (r->set == reg_set)
if (REG_NEEDS_ALLOC(r))
if (r->color >= (int)0)
- set_add(allocated, (unsigned int)r->color);
+ set_add(interp, allocated, (unsigned int)r->color);
}
}
@@ -1169,7 +1171,7 @@
if (avail)
*avail = allocated;
else
- set_free(allocated);
+ set_free(interp, allocated);
return first;
}
@@ -1214,7 +1216,7 @@
unsigned int first_reg = avail
? set_first_zero(avail)
: first_avail(interp, unit, (int)r->set, &avail);
- set_add(avail, first_reg);
+ set_add(interp, avail, first_reg);
r->color = first_reg++;
IMCC_debug(interp, DEBUG_IMC,
@@ -1233,7 +1235,7 @@
for (i = 0; i < 4; ++i) {
if (sets[i])
- set_free(sets[i]);
+ set_free(interp, sets[i]);
}
/*
@@ -1286,13 +1288,13 @@
if (set_contains(avail, first_reg))
first_reg = first_avail(interp, unit, reg_set, NULL);
- set_add(avail, first_reg);
+ set_add(interp, avail, first_reg);
r->color = first_reg++;
}
}
}
- set_free(avail);
+ set_free(interp, avail);
unit->first_avail[j] = first_reg;
}
}
Modified: branches/boehm_gc_2/compilers/imcc/sets.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/sets.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/sets.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -89,7 +89,7 @@
/*
-=item C<void set_free(Set *s)>
+=item C<void set_free(PARROT_INTERP, Set *s)>
Frees the given Set and its allocated memory.
@@ -98,13 +98,13 @@
*/
void
-set_free(ARGMOD(Set *s))
+set_free(PARROT_INTERP, ARGMOD(Set *s))
{
ASSERT_ARGS(set_free)
if (s->bmp)
- mem_sys_free(s->bmp);
+ mem_gc_free(interp, s->bmp);
- mem_sys_free(s);
+ mem_gc_free(interp, s);
}
@@ -190,7 +190,7 @@
/*
-=item C<void set_add(Set *s, unsigned int element)>
+=item C<void set_add(PARROT_INTERP, Set *s, unsigned int element)>
Adds to set C<s> the element C<element>.
@@ -199,14 +199,15 @@
*/
void
-set_add(ARGMOD(Set *s), unsigned int element)
+set_add(PARROT_INTERP, ARGMOD(Set *s), unsigned int element)
{
ASSERT_ARGS(set_add)
const int elem_byte_in_set = BYTE_IN_SET(element);
const int bytes_in_set = BYTE_IN_SET(s->length);
if (bytes_in_set < elem_byte_in_set) {
- s->bmp = (unsigned char *)mem_sys_realloc_zeroed(s->bmp,
+ s->bmp = (unsigned char *)Parrot_gc_reallocate_memory_chunk_with_interior_pointers(
+ interp, s->bmp,
NUM_BYTES(element), NUM_BYTES(s->length));
s->length += 8;
}
Modified: branches/boehm_gc_2/compilers/imcc/sets.h
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/sets.h Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/sets.h Tue Feb 23 21:02:00 2010 (r44404)
@@ -14,8 +14,9 @@
/* HEADERIZER BEGIN: compilers/imcc/sets.c */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-void set_add(ARGMOD(Set *s), unsigned int element)
+void set_add(PARROT_INTERP, ARGMOD(Set *s), unsigned int element)
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*s);
void set_clear(ARGMOD(Set *s))
@@ -42,8 +43,9 @@
unsigned int set_first_zero(ARGIN(const Set *s))
__attribute__nonnull__(1);
-void set_free(ARGMOD(Set *s))
+void set_free(PARROT_INTERP, ARGMOD(Set *s))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*s);
PARROT_MALLOC
@@ -78,7 +80,8 @@
__attribute__nonnull__(3);
#define ASSERT_ARGS_set_add __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(s))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(s))
#define ASSERT_ARGS_set_clear __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(s))
#define ASSERT_ARGS_set_contains __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -92,7 +95,8 @@
#define ASSERT_ARGS_set_first_zero __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(s))
#define ASSERT_ARGS_set_free __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(s))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(s))
#define ASSERT_ARGS_set_intersec __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(s1) \
Modified: branches/boehm_gc_2/compilers/imcc/symreg.c
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/symreg.c Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/symreg.c Tue Feb 23 21:02:00 2010 (r44404)
@@ -180,11 +180,11 @@
while (ns->idents) {
Identifier * const ident = ns->idents;
ns->idents = ident->next;
- mem_sys_free(ident);
+ mem_gc_free(interp, ident);
}
IMCC_INFO(interp)->namespace_stack = ns->parent;
- mem_sys_free(ns);
+ mem_gc_free(interp, ns);
}
@@ -309,7 +309,7 @@
/*
-=item C<char * symreg_to_str(const SymReg *s)>
+=item C<char * symreg_to_str(PARROT_INTERP, const SymReg *s)>
Dumps a SymReg to a printable format.
@@ -321,12 +321,12 @@
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
char *
-symreg_to_str(ARGIN(const SymReg *s))
+symreg_to_str(PARROT_INTERP, ARGIN(const SymReg *s))
{
ASSERT_ARGS(symreg_to_str)
/* NOTE: the below magic number encompasses all the quoted strings which
* may be included in the sprintf output (for now) */
- char * const buf = (char *)mem_sys_allocate(250 + strlen(s->name));
+ char * const buf = mem_gc_allocate_n_typed(interp, 250 + strlen(s->name), char);
const int t = s->type;
sprintf(buf, "symbol [%s] set [%c] color [" INTVAL_FMT "] type [",
@@ -663,7 +663,7 @@
IMCC_INFO(interp)->namespace_stack->idents = ident;
}
else
- mem_sys_free(fullname);
+ mem_gc_free(interp, fullname);
if (t == 'P') {
r->pmc_type = IMCC_INFO(interp)->cur_pmc_type;
@@ -731,7 +731,7 @@
len = strlen(name);
name[len - 1] = '\0';
- mem_sys_free(rhs->name);
+ mem_gc_free(interp, rhs->name);
rhs->name = name;
rhs->set = 'P';
@@ -943,7 +943,7 @@
/* TODO keyed syntax */
len = strlen(name) + l + 4;
- ns_name = (char*)mem_sys_allocate(len);
+ ns_name = mem_gc_allocate_n_typed(interp, len, char);
strcpy(ns_name, IMCC_INFO(interp)->cur_namespace->name);
*ns_name = '_';
@@ -1014,7 +1014,7 @@
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Label '%s' already defined\n", sub_name);
else if (uniq == U_add_uniq_sub) {
- mem_sys_free(aux_name);
+ mem_gc_free(interp, aux_name);
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"Subroutine '%s' already defined\n", name);
}
@@ -1026,7 +1026,7 @@
if (uniq) {
r->lhs_use_count++;
if (uniq == U_add_uniq_sub)
- mem_sys_free(aux_name);
+ mem_gc_free(interp, aux_name);
}
}
@@ -1228,7 +1228,7 @@
len += 1 + strlen(keys[i]->name);
}
- key_str = (char *)mem_sys_allocate(len);
+ key_str = mem_gc_allocate_n_typed(interp, len, char);
*key_str = '\0';
/* first look, if we already have this exact key chain */
@@ -1240,7 +1240,7 @@
}
if ((keychain = _get_sym(h, key_str)) != NULL) {
- mem_sys_free(key_str);
+ mem_gc_free(interp, key_str);
return keychain;
}
@@ -1279,7 +1279,7 @@
/*
-=item C<void free_sym(SymReg *r)>
+=item C<void free_sym(PARROT_INTERP, SymReg *r)>
Frees all memory of the specified SymReg. If it has a pcc_sub_t entry, frees
all memory of that structure as well.
@@ -1289,32 +1289,32 @@
*/
void
-free_sym(ARGMOD(SymReg *r))
+free_sym(PARROT_INTERP, ARGMOD(SymReg *r))
{
ASSERT_ARGS(free_sym)
pcc_sub_t * const sub = r->pcc_sub;
if (sub) {
- mem_sys_free(sub->multi);
- mem_sys_free(sub->args);
- mem_sys_free(sub->arg_flags);
- mem_sys_free(sub->ret);
- mem_sys_free(sub->ret_flags);
- mem_sys_free(sub);
+ mem_gc_free(interp, sub->multi);
+ mem_gc_free(interp, sub->args);
+ mem_gc_free(interp, sub->arg_flags);
+ mem_gc_free(interp, sub->ret);
+ mem_gc_free(interp, sub->ret_flags);
+ mem_gc_free(interp, sub);
}
if (r->set == 'K') {
SymReg *key = r->nextkey;
while (key) {
SymReg *nextkey = key->nextkey;
- free_sym(key);
+ free_sym(interp, key);
key = nextkey;
}
}
- mem_sys_free(r->subid);
- mem_sys_free(r->name);
- mem_sys_free(r);
+ mem_gc_free(interp, r->subid);
+ mem_gc_free(interp, r->name);
+ mem_gc_free(interp, r);
}
/*
@@ -1394,8 +1394,8 @@
}
/* free memory of old hash table */
- mem_sys_free(hsh->data);
- mem_sys_free(next_r);
+ mem_gc_free(interp, hsh->data);
+ mem_gc_free(interp, next_r);
/* let the hashtable's data pointers point to the new data */
hsh->data = nh.data;
@@ -1524,7 +1524,7 @@
char * const fullname = _mk_fullname(interp, ns, name);
p = _get_sym(hsh, fullname);
- mem_sys_free(fullname);
+ mem_gc_free(interp, fullname);
if (p)
return p;
@@ -1571,7 +1571,7 @@
/*
-=item C<void clear_sym_hash(SymHash *hsh)>
+=item C<void clear_sym_hash(PARROT_INTERP, SymHash *hsh)>
Frees all memory of the symbols in the specified hash table.
@@ -1580,7 +1580,7 @@
*/
void
-clear_sym_hash(ARGMOD(SymHash *hsh))
+clear_sym_hash(PARROT_INTERP, ARGMOD(SymHash *hsh))
{
ASSERT_ARGS(clear_sym_hash)
unsigned int i;
@@ -1592,14 +1592,14 @@
SymReg *p;
for (p = hsh->data[i]; p;) {
SymReg * const next = p->next;
- free_sym(p);
+ free_sym(interp, p);
p = next;
}
hsh->data[i] = NULL;
}
- mem_sys_free(hsh->data);
+ mem_gc_free(interp, hsh->data);
hsh->data = NULL;
hsh->entries = 0;
@@ -1635,7 +1635,7 @@
/*
-=item C<void clear_locals(IMC_Unit *unit)>
+=item C<void clear_locals(PARROT_INTERP, IMC_Unit *unit)>
Deletes all local symbols and clears life info from the given IMC_Unit.
@@ -1644,7 +1644,7 @@
*/
void
-clear_locals(ARGIN_NULLOK(IMC_Unit *unit))
+clear_locals(PARROT_INTERP, ARGIN_NULLOK(IMC_Unit *unit))
{
ASSERT_ARGS(clear_locals)
SymHash * const hsh = &unit->hash;
@@ -1657,9 +1657,9 @@
SymReg * const next = p->next;
if (unit && p->life_info)
- free_life_info(unit, p);
+ free_life_info(interp, unit, p);
- free_sym(p);
+ free_sym(interp, p);
p = next;
}
@@ -1687,7 +1687,7 @@
SymHash * const hsh = &IMCC_INFO(interp)->ghash;
if (hsh->data)
- clear_sym_hash(hsh);
+ clear_sym_hash(interp, hsh);
}
Modified: branches/boehm_gc_2/compilers/imcc/symreg.h
==============================================================================
--- branches/boehm_gc_2/compilers/imcc/symreg.h Tue Feb 23 20:58:26 2010 (r44403)
+++ branches/boehm_gc_2/compilers/imcc/symreg.h Tue Feb 23 21:02:00 2010 (r44404)
@@ -193,9 +193,12 @@
void clear_globals(PARROT_INTERP)
__attribute__nonnull__(1);
-void clear_locals(ARGIN_NULLOK(IMC_Unit *unit));
-void clear_sym_hash(ARGMOD(SymHash *hsh))
+void clear_locals(PARROT_INTERP, ARGIN_NULLOK(IMC_Unit *unit))
+ __attribute__nonnull__(1);
+
+void clear_sym_hash(PARROT_INTERP, ARGMOD(SymHash *hsh))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*hsh);
void create_symhash(PARROT_INTERP, ARGOUT(SymHash *hash))
@@ -218,8 +221,9 @@
__attribute__nonnull__(1)
__attribute__nonnull__(2);
-void free_sym(ARGMOD(SymReg *r))
+void free_sym(PARROT_INTERP, ARGMOD(SymReg *r))
__attribute__nonnull__(1)
+ __attribute__nonnull__(2)
FUNC_MODIFIES(*r);
PARROT_CAN_RETURN_NULL
@@ -335,8 +339,9 @@
PARROT_MALLOC
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
-char * symreg_to_str(ARGIN(const SymReg *s))
- __attribute__nonnull__(1);
+char * symreg_to_str(PARROT_INTERP, ARGIN(const SymReg *s))
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
#define ASSERT_ARGS__find_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
@@ -379,9 +384,11 @@
, PARROT_ASSERT_ARG(arg))
#define ASSERT_ARGS_clear_globals __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_clear_locals __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_clear_locals __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+ PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_clear_sym_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(hsh))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(hsh))
#define ASSERT_ARGS_create_symhash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(hash))
@@ -394,7 +401,8 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(name))
#define ASSERT_ARGS_free_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(r))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(r))
#define ASSERT_ARGS_get_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(name))
@@ -449,7 +457,8 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(r))
#define ASSERT_ARGS_symreg_to_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(s))
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(s))
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: compilers/imcc/symreg.c */
More information about the parrot-commits
mailing list