On Mon Apr 02 17:16:45 2007, stmpeters wrote:
> Here's some additional cleanups for making Parrot a bit more friendly
> to a wider variety of C compilers.
>
It is always good to actually include the attachment you are sending.
Steve
Index: src/encoding.c
===================================================================
--- src/encoding.c (revision 17946)
+++ src/encoding.c (working copy)
@@ -65,7 +65,7 @@
ENCODING *
Parrot_new_encoding(Interp *interp)
{
- return mem_sys_allocate(sizeof (ENCODING));
+ return mem_allocate_typed(ENCODING);
}
ENCODING *
@@ -175,10 +175,10 @@
* loading of encodings from inside threads
*/
if (!n)
- all_encodings->enc = mem_sys_allocate(sizeof (One_encoding));
+ all_encodings->enc = mem_allocate_typed(One_encoding);
else
- all_encodings->enc = mem_sys_realloc(all_encodings->enc, (n + 1) *
- sizeof (One_encoding));
+ all_encodings->enc = (One_encoding*)mem_sys_realloc(all_encodings->enc,
+ (n + 1) * sizeof (One_encoding));
all_encodings->n_encodings++;
all_encodings->enc[n].encoding = encoding;
all_encodings->enc[n].name = const_string(interp, encodingname);
@@ -191,7 +191,7 @@
ENCODING *encoding)
{
if (!all_encodings) {
- all_encodings = mem_sys_allocate(sizeof (All_encodings));
+ all_encodings = mem_allocate_typed(All_encodings);
all_encodings->n_encodings = 0;
all_encodings->enc = NULL;
}
Index: src/charset.c
===================================================================
--- src/charset.c (revision 17946)
+++ src/charset.c (working copy)
@@ -62,7 +62,7 @@
CHARSET *
Parrot_new_charset(Interp *interp)
{
- return mem_sys_allocate(sizeof (CHARSET));
+ return mem_allocate_typed(CHARSET);
}
void
@@ -184,10 +184,10 @@
* loading of charsets from inside threads
*/
if (!n)
- all_charsets->set = mem_sys_allocate(sizeof (One_charset));
+ all_charsets->set = mem_allocate_typed(One_charset);
else
- all_charsets->set = mem_sys_realloc(all_charsets->set, (n + 1) *
- sizeof (One_charset));
+ all_charsets->set = (One_charset *)mem_sys_realloc(all_charsets->set,
+ (n + 1) * sizeof (One_charset));
all_charsets->n_charsets++;
all_charsets->set[n].charset = charset;
all_charsets->set[n].name = const_string(interp, charsetname);
@@ -219,7 +219,7 @@
CHARSET *charset)
{
if (!all_charsets) {
- all_charsets = mem_sys_allocate(sizeof (All_charsets));
+ all_charsets = mem_allocate_typed(All_charsets);
all_charsets->n_charsets = 0;
all_charsets->set = NULL;
}
Index: src/inter_call.c
===================================================================
--- src/inter_call.c (revision 17946)
+++ src/inter_call.c (working copy)
@@ -348,7 +348,8 @@
PMC *elem;
if (st->key) {
st->src.slurp_i++;
- st->name = parrot_hash_get_idx(interp, PMC_struct_val(st->src.slurp), st->key);
+ st->name = (STRING *)parrot_hash_get_idx(interp,
+ (Hash *)PMC_struct_val(st->src.slurp), st->key);
assert(st->name);
elem = VTABLE_get_pmc_keyed_str(interp, st->src.slurp, st->name);
}
Index: src/exec.c
===================================================================
--- src/exec.c (revision 17946)
+++ src/exec.c (working copy)
@@ -69,7 +69,7 @@
extern PARROT_API int Parrot_exec_rel_count;
Parrot_exec_objfile_t * const obj =
- mem_sys_allocate_zeroed(sizeof (Parrot_exec_objfile_t));
+ mem_allocate_zeroed_typed(Parrot_exec_objfile_t);
exec_init(obj);
Parrot_exec_rel_addr = (char **)mem_sys_allocate_zeroed(4 * sizeof (char *));
obj->bytecode_header_size =
@@ -206,7 +206,7 @@
Parrot_exec_symbol_t *new_symbol;
symbol_number = obj->symbol_count;
- new_symbol = mem_sys_realloc(obj->symbol_table,
+ new_symbol = (Parrot_exec_symbol_t *)mem_sys_realloc(obj->symbol_table,
(size_t)(obj->symbol_count + 1) * sizeof (Parrot_exec_symbol_t));
obj->symbol_table = new_symbol;
Index: src/interpreter.c
===================================================================
--- src/interpreter.c (revision 17946)
+++ src/interpreter.c (working copy)
@@ -208,13 +208,14 @@
size_t nb = interp->code->base.size / 16;
if (nb < 8)
nb = (size_t)8;
- pi->branches = mem_sys_allocate(sizeof (Prederef_branch) * nb);
+ pi->branches = (Prederef_branch *)mem_sys_allocate(
+ sizeof (Prederef_branch) * nb);
pi->n_allocated = nb;
pi->n_branches = 0;
}
else if (pi->n_branches >= pi->n_allocated) {
pi->n_allocated = (size_t) (pi->n_allocated * 1.5);
- pi->branches = mem_sys_realloc(pi->branches,
+ pi->branches = (Prederef_branch *)mem_sys_realloc(pi->branches,
sizeof (Prederef_branch) * pi->n_allocated);
}
pi->branches[pi->n_branches].offs = offset;
@@ -448,7 +449,7 @@
if (!interp->code->prederef.code) {
size_t N = interp->code->base.size;
- void **temp = prederef_arena;
+ void **temp = (void **)prederef_arena;
opcode_t *pc = interp->code->base.data;
interp->code->prederef.code = temp;
@@ -815,7 +816,8 @@
return;
/* function or CG core - prepare func_table */
if (!interp->evc_func_table) {
- interp->evc_func_table = mem_sys_allocate(sizeof (void *) * n);
+ interp->evc_func_table = (op_func_t *)mem_sys_allocate(
+ sizeof (op_func_t) * n);
for (i = 0; i < n; ++i)
interp->evc_func_table[i] = (op_func_t)
D2FPTR(((void**)lib->op_func_table)[CORE_OPS_check_events__]);
@@ -874,10 +876,10 @@
}
if (!interp->all_op_libs)
- interp->all_op_libs = mem_sys_allocate(
+ interp->all_op_libs = (op_lib_t **)mem_sys_allocate(
sizeof (op_lib_t *) * (interp->n_libs + 1));
else
- interp->all_op_libs = mem_sys_realloc(interp->all_op_libs,
+ interp->all_op_libs = (op_lib_t **)mem_sys_realloc(interp->all_op_libs,
sizeof (op_lib_t *) * (interp->n_libs + 1));
init_func = get_op_lib_init(0, 0, lib_pmc);
@@ -905,20 +907,20 @@
core = PARROT_CORE_OPLIB_INIT(1);
assert(interp->op_count == core->op_count);
- new_evc_func_table = mem__sys_realloc(interp->evc_func_table,
- sizeof (void *) * n_tot);
+ new_evc_func_table = (op_func_t *)mem__sys_realloc(interp->evc_func_table,
+ sizeof (op_func_t) * n_tot);
if (core->flags & OP_FUNC_IS_ALLOCATED) {
- new_func_table = mem_sys_realloc(core->op_func_table,
- sizeof (void *) * n_tot);
- new_info_table = mem_sys_realloc(core->op_info_table,
+ new_func_table = (op_func_t *)mem_sys_realloc(core->op_func_table,
+ sizeof (op_func_t) * n_tot);
+ new_info_table = (op_info_t *)mem_sys_realloc(core->op_info_table,
sizeof (op_info_t) * n_tot);
}
else {
/*
* allocate new op_func and info tables
*/
- new_func_table = mem_sys_allocate(sizeof (void *) * n_tot);
- new_info_table = mem_sys_allocate(sizeof (op_info_t) * n_tot);
+ new_func_table = (op_func_t *)mem_sys_allocate(sizeof (op_func_t) * n_tot);
+ new_info_table = (op_info_t *)mem_sys_allocate(sizeof (op_info_t) * n_tot);
/* copy old */
for (i = 0; i < n_old; ++i) {
new_func_table[i] = interp->op_func_table[i];
@@ -975,7 +977,7 @@
size_t n_old, size_t n_new, oplib_init_f init_func)
{
op_lib_t *cg_lib, *new_lib;
- void **ops_addr = NULL;
+ op_func_t *ops_addr = NULL;
size_t i, n_tot;
#if 0
/* related to CG and CGP ops issue below */
@@ -988,14 +990,14 @@
cg_lib = init_func(1);
if (cg_lib->flags & OP_FUNC_IS_ALLOCATED) {
- ops_addr = mem_sys_realloc(cg_lib->op_func_table,
- n_tot * sizeof (void *));
+ ops_addr = (op_func_t *)mem_sys_realloc(cg_lib->op_func_table,
+ n_tot * sizeof (op_func_t));
}
else {
- ops_addr = mem_sys_allocate(n_tot * sizeof (void *));
+ ops_addr = (op_func_t *)mem_sys_allocate(n_tot * sizeof (op_func_t));
cg_lib->flags = OP_FUNC_IS_ALLOCATED;
for (i = 0; i < n_old; ++i)
- ops_addr[i] = ((void **)cg_lib->op_func_table)[i];
+ ops_addr[i] = cg_lib->op_func_table[i];
}
/*
* XXX running CG and CGP ops currently works only via the wrapper
@@ -1031,8 +1033,8 @@
new_init_func = get_op_lib_init(0, 0, lib_variant);
new_lib = new_init_func(1);
for (i = n_old; i < n_tot; ++i)
- ops_addr[i] = ((void **)new_lib->op_func_table)[i - n_old];
- new_lib->op_func_table = (void *) ops_addr;
+ ops_addr[i] = (new_lib->op_func_table)[i - n_old];
+ new_lib->op_func_table = ops_addr;
new_lib->op_count = n_tot;
new_init_func((long) ops_addr);
}
@@ -1040,7 +1042,7 @@
/* if not install wrappers */
/* fill new entries with the wrapper op */
for (i = n_old; i < n_tot; ++i)
- ops_addr[i] = ((void **)cg_lib->op_func_table)[CORE_OPS_wrapper__];
+ ops_addr[i] = (cg_lib->op_func_table)[CORE_OPS_wrapper__];
}
/*
* if we are running this core, update event check ops
@@ -1048,13 +1050,13 @@
if ((int)interp->run_core == cg_lib->core_type) {
for (i = n_old; i < n_tot; ++i)
interp->evc_func_table[i] =
- (op_func_t)D2FPTR(ops_addr[CORE_OPS_check_events__]);
- interp->save_func_table = (void *) ops_addr;
+ (op_func_t)ops_addr[CORE_OPS_check_events__];
+ interp->save_func_table = ops_addr;
}
/*
* tell the cg_core about the new jump table
*/
- cg_lib->op_func_table = (void *) ops_addr;
+ cg_lib->op_func_table = ops_addr;
cg_lib->op_count = n_tot;
init_func((long) ops_addr);
}
@@ -1082,7 +1084,7 @@
/*
=item C<static void
-notify_func_table(Parrot_Interp interp, void* table, int on)>
+notify_func_table(Parrot_Interp interp, op_func_t* table, int on)>
Tell the interpreter's running core about the new function table.
@@ -1091,7 +1093,7 @@
*/
static void
-notify_func_table(Parrot_Interp interp, void* table, int on)
+notify_func_table(Parrot_Interp interp, op_func_t* table, int on)
{
oplib_init_f init_func = get_op_lib_init(1, interp->run_core, NULL);
op_lib_t *lib = init_func(1);
Index: src/exceptions.c
===================================================================
--- src/exceptions.c (revision 17946)
+++ src/exceptions.c (working copy)
@@ -317,7 +317,7 @@
struct Parrot_cont * cc;
PMC * const handler
- = stack_peek(interp, interp->dynamic_env, &type);
+ = (PMC *)stack_peek(interp, interp->dynamic_env, &type);
if (! handler
|| type != STACK_ENTRY_PMC
@@ -378,7 +378,7 @@
/*
-=item C<void *
+=item C<opcode_t *
throw_exception(Interp *interp, PMC *exception, void *dest)>
Throw the exception.
@@ -387,10 +387,10 @@
*/
-void *
+opcode_t *
throw_exception(Interp *interp, PMC *exception, void *dest)
{
- void *address;
+ opcode_t *address;
PMC * const handler = find_exception_handler(interp, exception);
if (!handler)
@@ -409,7 +409,7 @@
/*
-=item C<void *
+=item C<opcode_t *
rethrow_exception(Interp *interp, PMC *exception)>
Rethrow the exception.
@@ -418,11 +418,11 @@
*/
-void *
+opcode_t *
rethrow_exception(Interp *interp, PMC *exception)
{
PMC *handler;
- void *address;
+ opcode_t *address;
if (exception->vtable->base_type != enum_class_Exception)
PANIC("Illegal rethrow");
@@ -585,7 +585,7 @@
interp->exc_free_list = the_exception->prev;
}
else
- the_exception = mem_sys_allocate(sizeof (*the_exception));
+ the_exception = mem_allocate_typed(Parrot_exception);
the_exception->prev = interp->exceptions;
the_exception->resume = NULL;
the_exception->msg = NULL;
@@ -749,7 +749,7 @@
Parrot_init_exceptions(Interp *interp) {
int i;
- interp->exception_list = mem_sys_allocate(
+ interp->exception_list = (PMC **)mem_sys_allocate(
sizeof (PMC*) * (E_LAST_PYTHON_E + 1));
for (i = 0; i <= E_LAST_PYTHON_E; ++i) {
PMC * const ex = pmc_new(interp, enum_class_Exception);
Index: include/parrot/oplib.h
===================================================================
--- include/parrot/oplib.h (revision 17946)
+++ include/parrot/oplib.h (working copy)
@@ -31,7 +31,7 @@
int patch_version;
size_t op_count;
op_info_t * op_info_table;
- void * op_func_table;
+ op_func_t * op_func_table;
int (*op_code)(const char * name, int full);
} op_lib_t;
Index: include/parrot/events.h
===================================================================
--- include/parrot/events.h (revision 17946)
+++ include/parrot/events.h (working copy)
@@ -78,8 +78,8 @@
PARROT_API void Parrot_schedule_interp_event(Parrot_Interp, parrot_event*);
PARROT_API void Parrot_schedule_interp_qentry(Parrot_Interp, struct QUEUE_ENTRY* entry);
-#define CHECK_EVENTS(i, n) Parrot_do_check_events(i, n)
-#define HANDLE_EVENTS(i, n) Parrot_do_handle_events(i, 1, n)
+#define CHECK_EVENTS(i, n) (opcode_t *)Parrot_do_check_events(i, n)
+#define HANDLE_EVENTS(i, n) (opcode_t *)Parrot_do_handle_events(i, 1, n)
PARROT_API void Parrot_init_signals(void);
PARROT_API void Parrot_init_events(Parrot_Interp);
Index: include/parrot/memory.h
===================================================================
--- include/parrot/memory.h (revision 17946)
+++ include/parrot/memory.h (working copy)
@@ -41,6 +41,9 @@
#define mem_sys_memcopy memcpy
#define mem_sys_memmove memmove
+#define mem_allocate_typed(type) (type *)mem_sys_allocate(sizeof(type))
+#define mem_allocate_zeroed_typed(type) (type *)mem_sys_allocate_zeroed(sizeof(type))
+
#endif /* PARROT_MEMORY_H_GUARD */
/*
Index: include/parrot/exceptions.h
===================================================================
--- include/parrot/exceptions.h (revision 17946)
+++ include/parrot/exceptions.h (working copy)
@@ -169,8 +169,8 @@
*/
PARROT_API void push_exception(Parrot_Interp, PMC *);
PARROT_API void pop_exception(Parrot_Interp);
-PARROT_API void * throw_exception(Parrot_Interp, PMC *, void *);
-PARROT_API void * rethrow_exception(Parrot_Interp, PMC *);
+PARROT_API opcode_t * throw_exception(Parrot_Interp, PMC *, void *);
+PARROT_API opcode_t * rethrow_exception(Parrot_Interp, PMC *);
PARROT_API size_t handle_exception(Parrot_Interp);