# New Ticket Created by  Steve Peters 
# Please include the string:  [perl #43108]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=43108 >


The attached patch gets Parrot partially compiles with C++ (g++ actually).
This work gets the compile going through the start of the imcc compiler.

Expect part two to get it the rest of the way tomorrow.

Steve Peters
[EMAIL PROTECTED]
Index: src/stm/waitlist.c
===================================================================
--- src/stm/waitlist.c  (revision 18722)
+++ src/stm/waitlist.c  (working copy)
@@ -11,7 +11,7 @@
     txlog = Parrot_STM_tx_log_get(interp);
     if (!txlog->waitlist_data) {
         txlog->waitlist_data =
-            mem_sys_allocate_zeroed(sizeof (*txlog->waitlist_data));
+            mem_allocate_zeroed_typed(waitlist_thread_data);
         MUTEX_INIT(txlog->waitlist_data->signal_mutex);
         txlog->waitlist_data->signal_cond = &interp->thread_data->interp_cond;
 #if WAITLIST_DEBUG
@@ -36,13 +36,13 @@
     thr = get_thread(interp);
 
     if (!thr->entries) {
-        thr->entries = mem_sys_allocate_zeroed(sizeof (*thr->entries) * 4);
+        thr->entries = mem_allocate_zeroed_typed(waitlist_entry*);
         thr->entry_count = 4;
     }
 
     if (thr->used_entries >= thr->entry_count) {
         size_t i;
-        thr->entries = mem_sys_realloc(thr->entries,
+        thr->entries = (waitlist_entry**)mem_sys_realloc(thr->entries,
             sizeof (*thr->entries) * thr->entry_count * 2);
         for (i = thr->entry_count; i < thr->entry_count * 2; ++i) {
             thr->entries[i] = NULL;
@@ -52,7 +52,7 @@
 
     i = thr->used_entries++;
     if (!thr->entries[i])
-        thr->entries[i] = mem_sys_allocate_zeroed(sizeof (**thr->entries));
+        thr->entries[i] = mem_allocate_zeroed_typed(waitlist_entry);
 
     assert(thr->entries[i]->head == NULL);
     assert(thr->entries[i]->next == NULL);
@@ -67,7 +67,7 @@
     int successp = -1;
     assert(entry->next == NULL);
     do {
-        PARROT_ATOMIC_PTR_GET(entry->next, waitlist->first);
+        entry->next = (waitlist_entry *)waitlist->first.val;
         assert(successp != -1 || entry->next != entry);
         assert(entry->next != entry);
         PARROT_ATOMIC_PTR_CAS(successp, waitlist->first, entry->next, entry);
@@ -100,7 +100,7 @@
         return;
 
     LOCK(waitlist->remove_mutex);
-    PARROT_ATOMIC_PTR_GET(cur, waitlist->first);
+    cur = (waitlist_entry *)waitlist->first.val;
 
     /* if we became the first entry while we were acquiring the mutex */
     while (cur == what) {
@@ -110,7 +110,7 @@
             what->next = NULL;
             return;
         }
-        PARROT_ATOMIC_PTR_GET(cur, waitlist->first);
+        cur = (waitlist_entry *)waitlist->first.val;
     }
 
     if (!cur) {
@@ -178,7 +178,7 @@
     /* make sure we are not interrupted by a concurrent removal */
     LOCK(list->remove_mutex);
     do {
-        PARROT_ATOMIC_PTR_GET(cur, list->first);
+        cur = (waitlist_entry *)list->first.val;
         PARROT_ATOMIC_PTR_CAS(successp, list->first, cur, NULL);
     } while (!successp);
 
Index: src/stm/backend.c
===================================================================
--- src/stm/backend.c   (revision 18722)
+++ src/stm/backend.c   (working copy)
@@ -47,7 +47,7 @@
 static STM_tx_log *Parrot_STM_tx_log_alloc(Interp *interp, size_t size) {
     int i;
     STM_tx_log *log;
-    log = mem_sys_allocate_zeroed(size);
+    log = (STM_tx_log *)mem_sys_allocate_zeroed(size);
 
     interp->thread_data->stm_log = (void *) log;
 
@@ -62,9 +62,9 @@
     log->inner[0].first_read = log->inner[0].first_write = 0;
 
     log->writes =
-        mem_sys_allocate(sizeof (STM_write_record) * STM_START_RECORDS);
+        (STM_write_record*)mem_sys_allocate(sizeof (STM_write_record) * 
STM_START_RECORDS);
     log->writes_alloced = STM_START_RECORDS;
-    log->reads = mem_sys_allocate(sizeof (STM_read_record) * 
STM_START_RECORDS);
+    log->reads = (STM_read_record*)mem_sys_allocate(sizeof (STM_read_record) * 
STM_START_RECORDS);
     log->reads_alloced = STM_START_RECORDS;
 
     log->last_read = log->last_write = -1;
@@ -89,7 +89,7 @@
     if (!interp->thread_data || !interp->thread_data->stm_log)
         return;
 
-    log = interp->thread_data->stm_log;
+    log = (STM_tx_log *)interp->thread_data->stm_log;
     mem_sys_free(log->writes);
     mem_sys_free(log->reads);
     Parrot_STM_waitlist_destroy_thread(interp);
@@ -99,7 +99,7 @@
 
 
 STM_tx_log *Parrot_STM_tx_log_get(Interp *interp) {
-    STM_tx_log *log = interp->thread_data->stm_log; /* FIXME */
+    STM_tx_log *log = (STM_tx_log *)interp->thread_data->stm_log; /* FIXME */
     if (!log)
         log = Parrot_STM_tx_log_alloc(interp, sizeof (STM_tx_log));
 
@@ -122,7 +122,7 @@
     STM_TRACE("Parrot_STM_alloc");
 
     make_bufferlike_pool(interp, sizeof (handle_data));
-    handle = new_bufferlike_header(interp, sizeof (handle_data));
+    handle = (handle_data *)new_bufferlike_header(interp, sizeof 
(handle_data));
     PObj_external_SET(&handle->buf);
     PObj_is_shared_SET(&handle->buf);
     PARROT_ATOMIC_PTR_INIT(handle->owner_or_version);
@@ -174,7 +174,7 @@
     int i = ++log->last_write;
     if (i >= log->writes_alloced) {
         log->writes_alloced *= 2;
-        log->writes = mem_sys_realloc(log->writes,
+        log->writes = (STM_write_record *)mem_sys_realloc(log->writes,
             sizeof (*log->writes) * log->writes_alloced);
     }
     write = get_write(interp, log, i);
@@ -187,7 +187,7 @@
     int i = ++log->last_read;
     if (i >= log->reads_alloced) {
         log->reads_alloced *= 2;
-        log->reads = mem_sys_realloc(log->reads,
+        log->reads = (STM_read_record *)mem_sys_realloc(log->reads,
             sizeof (*log->reads) * log->reads_alloced);
     }
     read = get_read(interp, log, i);
@@ -878,7 +878,7 @@
          * FIXME XXX race if other log goes away
          */
         assert(n_interpreters > 1);
-        other = version;
+        other = (STM_tx_log_sub*)version;
         assert(other < &log->inner[0] || other > 
&log->inner[STM_MAX_TX_DEPTH]);
         curlog = get_sublog(log, log->depth);
         PARROT_ATOMIC_INT_GET(other_wait_len, other->wait_length);
@@ -1242,11 +1242,11 @@
 
     cursub = get_sublog(log, log->depth);
 
-    saved = mem_sys_allocate(sizeof (*saved));
+    saved = (STM_saved_tx_log *)mem_sys_allocate(sizeof (*saved));
     saved->num_reads = log->last_read - cursub->first_read + 1;
     saved->num_writes = log->last_write - cursub->first_write + 1;
-    saved->reads = mem_sys_allocate(sizeof (*saved->reads) * saved->num_reads);
-    saved->writes =
+    saved->reads = (STM_read_record*)mem_sys_allocate(sizeof (*saved->reads) * 
saved->num_reads);
+    saved->writes = (STM_write_record*)
         mem_sys_allocate(sizeof (*saved->writes) * saved->num_writes);
     memcpy(saved->reads, &log->reads[cursub->first_read],
         sizeof (*saved->reads) * saved->num_reads);
@@ -1279,7 +1279,7 @@
     if (saved_log_data == NULL)
         return;
 
-    saved = saved_log_data;
+    saved = (STM_saved_tx_log *)saved_log_data;
 
     log = Parrot_STM_tx_log_get(interp);
 
@@ -1320,7 +1320,7 @@
     if (saved_log_data == NULL)
         return;
 
-    saved = saved_log_data;
+    saved = (STM_saved_tx_log *)saved_log_data;
 
     for (i = 0; i < saved->num_reads; ++i)
         mark_read_record(interp, &saved->reads[i]);
@@ -1343,7 +1343,7 @@
     if (saved_log_data == NULL)
         return;
 
-    saved = saved_log_data;
+    saved = (STM_saved_tx_log *)saved_log_data;
     mem_sys_free(saved->reads);
     mem_sys_free(saved->writes);
     mem_sys_free(saved);
Index: src/pic.c
===================================================================
--- src/pic.c   (revision 18722)
+++ src/pic.c   (working copy)
@@ -632,7 +632,7 @@
 
 void
 parrot_pic_find_infix_v_pp(Interp *interp, PMC *left, PMC *right,
-                Parrot_MIC *mic, void **cur_opcode)
+                Parrot_MIC *mic, opcode_t *cur_opcode)
 {
     funcptr_t func;
     int is_pmc;
@@ -660,10 +660,10 @@
     func = get_mmd_dispatch_type(interp,
             mic->m.func_nr, left_type, right_type, &is_pmc);
     if (is_pmc) {
-        const size_t offs = cur_opcode - interp->code->prederef.code;
-        opcode_t* const real_op = interp->code->base.data + offs + 1;
-
-        /* set prederef code address to orig slot for now */
+        const size_t offs = cur_opcode - (opcode_t 
*)interp->code->prederef.code;
+        opcode_t* real_op = interp->code->base.data + offs + 1;
+        /* set prederef code address to orig slot for now
+         */
         ((void**)cur_opcode)[0] =
             parrot_pic_opcode(interp, PARROT_OP_infix_ic_p_p);
         /* restore 1st operand i.e. .MMD_func_nr */
Index: src/pmc.c
===================================================================
--- src/pmc.c   (revision 18722)
+++ src/pmc.c   (working copy)
@@ -399,10 +399,10 @@
 */
 
 INTVAL
-pmc_type(Interp* interp, const STRING *name)
+pmc_type(Interp* interp, STRING *name)
 {
     PMC * const classname_hash = interp->class_hash;
-    const PMC * const item = (PMC *)VTABLE_get_pointer_keyed_str(interp, 
classname_hash, name);
+    PMC * item = (PMC *)VTABLE_get_pointer_keyed_str(interp, classname_hash, 
name);
 
     /* nested namespace with same name */
     if (item->vtable->base_type == enum_class_NameSpace)
@@ -413,7 +413,7 @@
 }
 
 INTVAL
-pmc_type_p(Interp* interp, const PMC *name)
+pmc_type_p(Interp* interp, PMC *name)
 {
     PMC * const classname_hash = interp->class_hash;
     PMC *item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
Index: src/encodings/utf8.c
===================================================================
--- src/encodings/utf8.c        (revision 18722)
+++ src/encodings/utf8.c        (working copy)
@@ -60,7 +60,7 @@
 */
 
 static UINTVAL
-utf8_characters(const void *ptr, UINTVAL byte_len)
+utf8_characters(const utf8_t *ptr, UINTVAL byte_len)
 {
     const utf8_t *u8ptr = ptr;
     const utf8_t *u8end = u8ptr + byte_len;
@@ -90,7 +90,7 @@
 */
 
 static UINTVAL
-utf8_decode(const void *ptr)
+utf8_decode(const utf8_t *ptr)
 {
     const utf8_t *u8ptr = ptr;
     UINTVAL c = *u8ptr;
@@ -265,7 +265,7 @@
     unsigned char *new_pos, *pos;
 
     pos = (unsigned char *)s->strstart + i->bytepos;
-    new_pos = utf8_encode(pos, c);
+    new_pos = (unsigned char *)utf8_encode(pos, c);
     i->bytepos += (new_pos - pos);
     /* XXX possible buffer overrun exception? */
     assert(i->bytepos <= PObj_buflen(s));
@@ -327,7 +327,7 @@
 
     if (in_place) {
         /* need intermediate memory */
-        p = mem_sys_allocate(src_len);
+        p = (unsigned char *)mem_sys_allocate(src_len);
     }
     else {
         Parrot_reallocate_string(interp, dest, src_len);
@@ -350,7 +350,7 @@
                     need = 16;
                 dest_len += need;
                 if (in_place)
-                    p = mem_sys_realloc(p, dest_len);
+                    p = (unsigned char *)mem_sys_realloc(p, dest_len);
                 else {
                     result->bufused = dest_pos;
                     Parrot_reallocate_string(interp, dest, dest_len);
@@ -359,7 +359,7 @@
             }
 
             pos = p + dest_pos;
-            new_pos = utf8_encode(pos, c);
+            new_pos = (unsigned char *)utf8_encode(pos, c);
             dest_pos += (new_pos - pos);
         }
         result->bufused = dest_pos;
@@ -375,7 +375,7 @@
 static UINTVAL
 get_codepoint(Interp *interp, const STRING *src, UINTVAL offset)
 {
-    const void * const start = utf8_skip_forward(src->strstart, offset);
+    const utf8_t * const start = (utf8_t *)utf8_skip_forward(src->strstart, 
offset);
     return utf8_decode(start);
 }
 
Index: src/pmc/lexinfo.pmc
===================================================================
--- src/pmc/lexinfo.pmc (revision 18722)
+++ src/pmc/lexinfo.pmc (working copy)
@@ -74,7 +74,7 @@
         assert(PObj_constant_TEST(SELF));
         PMC_pmc_val(SELF) = sub;
         parrot_new_pmc_hash_x(INTERP, SELF,
-            enum_hash_int,
+            (PARROT_DATA_TYPES)enum_hash_int,
             Hash_key_type_STRING,
             (hash_comp_fn)string_equal,     /* STRING compare */
             key_hash_STRING);    /*        hash */
Index: src/pmc/class.pmc
===================================================================
--- src/pmc/class.pmc   (revision 18722)
+++ src/pmc/class.pmc   (working copy)
@@ -929,7 +929,7 @@
 =cut
 
 */
-    PCCMETHOD void pmc_namespace(PMC *namespace :optional, int got_name 
:opt_flag) {
+    PCCMETHOD void pmc_namespace(PMC *_namespace :optional, int got_name 
:opt_flag) {
         Parrot_Class *_class = PARROT_CLASS(SELF);
         PMC *ret_namespace = _class->_namespace;
         PCCRETURN(PMC *ret_namespace);
Index: src/pmc/parrotobject.pmc
===================================================================
--- src/pmc/parrotobject.pmc    (revision 18722)
+++ src/pmc/parrotobject.pmc    (working copy)
@@ -521,7 +521,7 @@
 
     PMC* share_ro() {
         PMC *ret;
-        PMC *true;
+        PMC *_true;
         PMC **data;
         INTVAL i, n;
 
@@ -529,10 +529,10 @@
             return SELF;
 
         ret  = pt_shared_fixup(INTERP, SELF);
-        true = pmc_new(INTERP, enum_class_Integer);
+        _true = pmc_new(INTERP, enum_class_Integer);
 
-        VTABLE_set_integer_native(INTERP, true, 1);
-        VTABLE_setprop(INTERP, ret, CONST_STRING(interp, "_ro"), true);
+        VTABLE_set_integer_native(INTERP, _true, 1);
+        VTABLE_setprop(INTERP, ret, CONST_STRING(interp, "_ro"), _true);
         PObj_is_PMC_shared_SET(SELF);
 
         n    = PMC_int_val(ret);
Index: src/pmc/namespace.pmc
===================================================================
--- src/pmc/namespace.pmc       (revision 18722)
+++ src/pmc/namespace.pmc       (working copy)
@@ -53,7 +53,7 @@
  * hang off the PMC_data slot. */
 typedef struct Parrot_NSInfo {
     STRING *name; /* Name of this namespace part. */
-    PMC *class;   /* The class or role attached to this namespace. */
+    PMC *_class;   /* The class or role attached to this namespace. */
 } Parrot_NSInfo;
 
 /* Macro for easy access to the namespcae info. */
@@ -95,8 +95,8 @@
             pobject_lives(INTERP, (PObj*)PMC_pmc_val(SELF));
         if (nsinfo->name)
             pobject_lives(INTERP, (PObj*)nsinfo->name);
-        if (nsinfo->class)
-            pobject_lives(INTERP, (PObj*)nsinfo->class);
+        if (nsinfo->_class)
+            pobject_lives(INTERP, (PObj*)nsinfo->_class);
     }
 
 /*
@@ -740,7 +740,7 @@
     PCCMETHOD void get_class()
     {
         Parrot_NSInfo *nsinfo = PARROT_NSINFO(SELF);
-        PMC *ret_class = nsinfo->class;
+        PMC *ret_class = nsinfo->_class;
         PCCRETURN(PMC *ret_class);
     }
 
@@ -757,7 +757,7 @@
     PCCMETHOD void set_class(PMC *class_or_role)
     {
         Parrot_NSInfo *nsinfo = PARROT_NSINFO(SELF);
-        nsinfo->class = class_or_role;
+        nsinfo->_class = class_or_role;
     }
 
 }
Index: src/interpreter.c
===================================================================
--- src/interpreter.c   (revision 18722)
+++ src/interpreter.c   (working copy)
@@ -636,10 +636,10 @@
 {
 #ifdef HAVE_COMPUTED_GOTO
     opcode_t *code_start = (opcode_t *)interp->code->base.data;
-    void **pc_prederef;
+    opcode_t *pc_prederef;
     init_prederef(interp, PARROT_CGP_CORE);
-    pc_prederef = interp->code->prederef.code + (pc - code_start);
-    pc = (opcode_t*) cgp_core(pc_prederef, interp);
+    pc_prederef = (opcode_t*)interp->code->prederef.code + (pc - code_start);
+    pc = cgp_core(pc_prederef, interp);
     return pc;
 #else
     PIO_eprintf(interp,
@@ -664,10 +664,10 @@
 runops_switch(Interp *interp, opcode_t *pc)
 {
     opcode_t * const code_start = (opcode_t *)interp->code->base.data;
-    void **pc_prederef;
+    opcode_t *pc_prederef;
     init_prederef(interp, PARROT_SWITCH_CORE);
-    pc_prederef = interp->code->prederef.code + (pc - code_start);
-    pc = (opcode_t*) switch_core(pc_prederef, interp);
+    pc_prederef = (opcode_t*)interp->code->prederef.code + (pc - code_start);
+    pc = switch_core(pc_prederef, interp);
     return pc;
 }
 
Index: src/jit/i386/jit_emit.h
===================================================================
--- src/jit/i386/jit_emit.h     (revision 18722)
+++ src/jit/i386/jit_emit.h     (working copy)
@@ -2798,7 +2798,7 @@
     else
 #  endif
     {
-        call_func(jit_info, (void (*)(void))pmc_new_noinit);
+        call_func(jit_info, (void*)pmc_new_noinit);
     }
     /* result = eax push pmc */
     emitm_pushl_r(jit_info->native_ptr, emit_EAX);
Index: src/mmd.c
===================================================================
--- src/mmd.c   (revision 18722)
+++ src/mmd.c   (working copy)
@@ -632,7 +632,7 @@
     new_size = sizeof (funcptr_t) * table->x * new_y;
 
     if (table->mmd_funcs)
-        table->mmd_funcs = mem_sys_realloc(table->mmd_funcs, new_size);
+        table->mmd_funcs = (funcptr_t *)mem_sys_realloc(table->mmd_funcs, 
new_size);
     else
         table->mmd_funcs = (funcptr_t *)mem_sys_allocate(new_size);
 
Index: src/io/io_mmap.c
===================================================================
--- src/io/io_mmap.c    (revision 18722)
+++ src/io/io_mmap.c    (working copy)
@@ -25,9 +25,50 @@
 #include "parrot/parrot.h"
 #include "io_private.h"
 
-/* Defined at bottom */
-static const ParrotIOLayerAPI pio_mmap_layer_api;
+static ParrotIO *
+PIO_mmap_open(Interp *interp, ParrotIOLayer *layer,
+               const char *path, INTVAL flags);
+static size_t
+PIO_mmap_read(Interp *interp, ParrotIOLayer *layer, ParrotIO *io,
+              STRING **buf);
+static INTVAL
+PIO_mmap_close(Interp *interp, ParrotIOLayer *layer, ParrotIO *io);
 
+static const ParrotIOLayerAPI pio_mmap_layer_api = {
+    PIO_null_init,
+    PIO_base_new_layer,
+    PIO_base_delete_layer,
+    PIO_null_push_layer,
+    PIO_null_pop_layer,
+    PIO_mmap_open,
+    PIO_null_open2,
+    PIO_null_open3,
+    PIO_null_open_async,
+    PIO_null_fdopen,
+    PIO_mmap_close,
+    PIO_null_write,
+    PIO_null_write_async,
+    PIO_mmap_read,
+    PIO_null_read_async,
+    PIO_null_flush,
+    PIO_null_peek,
+    PIO_null_seek,
+    PIO_null_tell,
+    PIO_null_setbuf,
+    PIO_null_setlinebuf,
+    PIO_null_getcount,
+    PIO_null_fill,
+    PIO_null_eof,
+    0, /* no poll */
+    0, /* no socket */
+    0, /* no connect */
+    0, /* no send */
+    0, /* no recv */
+    0, /* no bind */
+    0, /* no listen */
+    0  /* no accept */
+};
+
 ParrotIOLayer pio_mmap_layer = {
     NULL,
     "mmap",
@@ -152,41 +193,6 @@
     return ret;
 }
 
-static const ParrotIOLayerAPI pio_mmap_layer_api = {
-    PIO_null_init,
-    PIO_base_new_layer,
-    PIO_base_delete_layer,
-    PIO_null_push_layer,
-    PIO_null_pop_layer,
-    PIO_mmap_open,
-    PIO_null_open2,
-    PIO_null_open3,
-    PIO_null_open_async,
-    PIO_null_fdopen,
-    PIO_mmap_close,
-    PIO_null_write,
-    PIO_null_write_async,
-    PIO_mmap_read,
-    PIO_null_read_async,
-    PIO_null_flush,
-    PIO_null_peek,
-    PIO_null_seek,
-    PIO_null_tell,
-    PIO_null_setbuf,
-    PIO_null_setlinebuf,
-    PIO_null_getcount,
-    PIO_null_fill,
-    PIO_null_eof,
-    0, /* no poll */
-    0, /* no socket */
-    0, /* no connect */
-    0, /* no send */
-    0, /* no recv */
-    0, /* no bind */
-    0, /* no listen */
-    0  /* no accept */
-};
-
 /*
 
 =back
Index: src/io/io_buf.c
===================================================================
--- src/io/io_buf.c     (revision 18722)
+++ src/io/io_buf.c     (working copy)
@@ -483,6 +483,7 @@
     ParrotIOLayer *l = layer;
     ParrotIOBuf *b;
     size_t len = 1;
+    size_t avail = 0;
 
     STRING * const s = PIO_make_io_string(interp, buf, 1);
 
@@ -495,7 +496,7 @@
 
     /* read Data from buffer */
     if (b->flags & PIO_BF_READBUF) {
-        const size_t avail = b->endb - b->next;
+        avail = b->endb - b->next;
 
         /* if we have data available, copy out the next byte */
         if (avail) {
Index: src/io/io_string.c
===================================================================
--- src/io/io_string.c  (revision 18722)
+++ src/io/io_string.c  (working copy)
@@ -25,9 +25,46 @@
 #include "parrot/parrot.h"
 #include "io_private.h"
 
-/* Defined at bottom */
-static const ParrotIOLayerAPI pio_string_layer_api;
+static size_t
+PIO_string_read(Interp *interp, ParrotIOLayer *l, ParrotIO *io, STRING **buf);
+static size_t
+PIO_string_write(Interp *interp, ParrotIOLayer *l, ParrotIO *io, STRING *s);
 
+static const ParrotIOLayerAPI pio_string_layer_api = {
+    PIO_null_init,
+    PIO_base_new_layer,
+    PIO_base_delete_layer,
+    PIO_null_push_layer,
+    PIO_null_pop_layer,
+    PIO_null_open,
+    PIO_null_open2,
+    PIO_null_open3,
+    PIO_null_open_async,
+    PIO_null_fdopen,
+    PIO_null_close,
+    PIO_string_write,
+    PIO_null_write_async,
+    PIO_string_read,
+    PIO_null_read_async,
+    PIO_null_flush,
+    PIO_null_peek,
+    PIO_null_seek,
+    PIO_null_tell,
+    PIO_null_setbuf,
+    PIO_null_setlinebuf,
+    PIO_null_getcount,
+    PIO_null_fill,
+    PIO_null_eof,
+    0, /* no poll */
+    0, /* no socket */
+    0, /* no connect */
+    0, /* no send */
+    0, /* no recv */
+    0, /* no bind */
+    0, /* no listen */
+    0  /* no accept */
+};
+
 ParrotIOLayer pio_string_layer = {
     NULL,
     "string",
@@ -72,41 +109,6 @@
     return string_length(interp, (STRING *)l->self);
 }
 
-static const ParrotIOLayerAPI pio_string_layer_api = {
-    PIO_null_init,
-    PIO_base_new_layer,
-    PIO_base_delete_layer,
-    PIO_null_push_layer,
-    PIO_null_pop_layer,
-    PIO_null_open,
-    PIO_null_open2,
-    PIO_null_open3,
-    PIO_null_open_async,
-    PIO_null_fdopen,
-    PIO_null_close,
-    PIO_string_write,
-    PIO_null_write_async,
-    PIO_string_read,
-    PIO_null_read_async,
-    PIO_null_flush,
-    PIO_null_peek,
-    PIO_null_seek,
-    PIO_null_tell,
-    PIO_null_setbuf,
-    PIO_null_setlinebuf,
-    PIO_null_getcount,
-    PIO_null_fill,
-    PIO_null_eof,
-    0, /* no poll */
-    0, /* no socket */
-    0, /* no connect */
-    0, /* no send */
-    0, /* no recv */
-    0, /* no bind */
-    0, /* no listen */
-    0  /* no accept */
-};
-
 /*
 
 =back
Index: src/io/io_utf8.c
===================================================================
--- src/io/io_utf8.c    (revision 18722)
+++ src/io/io_utf8.c    (working copy)
@@ -27,9 +27,48 @@
 #include "io_private.h"
 #include "../unicode.h"
 
-/* Defined at bottom */
-static const ParrotIOLayerAPI pio_utf8_layer_api;
+static size_t
+PIO_utf8_write(Interp *interp, ParrotIOLayer *l, ParrotIO *io, STRING *s);
 
+static size_t
+PIO_utf8_read(Interp *interp, ParrotIOLayer *layer, ParrotIO *io,
+              STRING **buf);
+
+static const ParrotIOLayerAPI pio_utf8_layer_api = {
+    PIO_null_init,
+    PIO_base_new_layer,
+    PIO_base_delete_layer,
+    PIO_null_push_layer,
+    PIO_null_pop_layer,
+    PIO_null_open,
+    PIO_null_open2,
+    PIO_null_open3,
+    PIO_null_open_async,
+    PIO_null_fdopen,
+    PIO_null_close,
+    PIO_utf8_write,
+    PIO_null_write_async,
+    PIO_utf8_read,
+    PIO_null_read_async,
+    PIO_null_flush,
+    PIO_null_peek,
+    PIO_null_seek,
+    PIO_null_tell,
+    PIO_null_setbuf,
+    PIO_null_setlinebuf,
+    PIO_null_getcount,
+    PIO_null_fill,
+    PIO_null_eof,
+    0, /* no poll */
+    0, /* no socket */
+    0, /* no connect */
+    0, /* no send */
+    0, /* no recv */
+    0, /* no bind */
+    0, /* no listen */
+    0  /* no accept */
+};
+
 ParrotIOLayer pio_utf8_layer = {
     NULL,
     "utf8",
@@ -101,41 +140,6 @@
     return PIO_write_down(interp, l->down, io, dest);
 }
 
-static const ParrotIOLayerAPI pio_utf8_layer_api = {
-    PIO_null_init,
-    PIO_base_new_layer,
-    PIO_base_delete_layer,
-    PIO_null_push_layer,
-    PIO_null_pop_layer,
-    PIO_null_open,
-    PIO_null_open2,
-    PIO_null_open3,
-    PIO_null_open_async,
-    PIO_null_fdopen,
-    PIO_null_close,
-    PIO_utf8_write,
-    PIO_null_write_async,
-    PIO_utf8_read,
-    PIO_null_read_async,
-    PIO_null_flush,
-    PIO_null_peek,
-    PIO_null_seek,
-    PIO_null_tell,
-    PIO_null_setbuf,
-    PIO_null_setlinebuf,
-    PIO_null_getcount,
-    PIO_null_fill,
-    PIO_null_eof,
-    0, /* no poll */
-    0, /* no socket */
-    0, /* no connect */
-    0, /* no send */
-    0, /* no recv */
-    0, /* no bind */
-    0, /* no listen */
-    0  /* no accept */
-};
-
 /*
 
 =back
Index: lib/Parrot/OpTrans/CSwitch.pm
===================================================================
--- lib/Parrot/OpTrans/CSwitch.pm       (revision 18722)
+++ lib/Parrot/OpTrans/CSwitch.pm       (working copy)
@@ -76,7 +76,7 @@
     return $pred_def . <<END;
 /* defines - $0 -> $type */
 #  define opcode_to_prederef(i, op)   (op ? \\
-     (void**) (op   - CONTEXT(i->ctx)->pred_offset) : NULL)
+     (opcode_t*) (op   - CONTEXT(i->ctx)->pred_offset) : (opcode_t*)NULL)
 /*
  * if we are using CHECK_EVENTS elsewhere this macro should (again)
  * be in includes/parrot/event.h
@@ -87,7 +87,7 @@
 #undef  CHECK_EVENTS
 #define CHECK_EVENTS(i, n)   \\
         interp->task_queue->head ?  \\
-                Parrot_do_check_events(i, n) : n
+                (opcode_t*)Parrot_do_check_events(i, n) : n
 END
 }
 
@@ -153,10 +153,15 @@
     return <<END_C;
 /* run_core_func_start - $0 -> $type */
 #if defined(__GNUC__) && defined(I386) && defined(PARROT_SWITCH_REGS)
+<<<<<<< .mine
+    register opcode_t *   cur_opcode __asm__ ("esi") = cur_op;
+    register char *   _reg_base   __asm__ ("edi");
+=======
     register void **   cur_opcode __asm__ ("esi") = cur_op;
     register char *   _reg_base   __asm__ ("edi");
+>>>>>>> .r18714
 #else
-    void ** cur_opcode = cur_op;
+    opcode_t * cur_opcode = cur_op;
     char * _reg_base;
 #endif
 
@@ -164,7 +169,7 @@
     _reg_base = (char*)interp->ctx.bp.regs_i;
     do {
 SWITCH_AGAIN:
-    cur_opcode = CHECK_EVENTS(interp, *cur_opcode);
+    cur_opcode = CHECK_EVENTS(interp, cur_opcode);
     if (!cur_opcode)
         break;
     switch (*(opcode_t*)cur_opcode) {
Index: lib/Parrot/OpTrans/CGP.pm
===================================================================
--- lib/Parrot/OpTrans/CGP.pm   (revision 18722)
+++ lib/Parrot/OpTrans/CGP.pm   (working copy)
@@ -68,7 +68,7 @@
     return $pred_def . <<END;
 /* defines - $0 -> $type */
 #  define opcode_to_prederef(i, op)   \\
-     (void**) (op   - CONTEXT(i->ctx)->pred_offset)
+     (opcode_t*) (op   - (opcode_t*)CONTEXT(i->ctx)->pred_offset)
 END
 }
 
@@ -132,10 +132,10 @@
      * (gdb) disas l_ops_addr[1191] l_ops_addr[1192]
      */
 #if defined(__GNUC__) && defined(I386) && defined(PARROT_CGP_REGS)
-    register void **   cur_opcode __asm__ ("esi") = cur_op;
+    register opcode_t *   cur_opcode __asm__ ("esi") = cur_op;
     register char *   _reg_base   __asm__ ("edi");
 #else
-    void **cur_opcode = cur_op;
+    opcode_t *cur_opcode = cur_op;
     char * _reg_base;
 #endif
 
Index: lib/Parrot/OpTrans/CGoto.pm
===================================================================
--- lib/Parrot/OpTrans/CGoto.pm (revision 18722)
+++ lib/Parrot/OpTrans/CGoto.pm (working copy)
@@ -64,7 +64,7 @@
 sub defines {
     return <<END;
 #undef CONST
-#define REL_PC     ((size_t)(cur_opcode - interp->code->base.data))
+#define REL_PC     ((size_t)(cur_opcode - (opcode_t*)interp->code->base.data))
 #define CUR_OPCODE cur_opcode
 #define IREG(i) REG_INT(cur_opcode[i])
 #define NREG(i) REG_NUM(cur_opcode[i])
Index: lib/Parrot/OpTrans/CPrederef.pm
===================================================================
--- lib/Parrot/OpTrans/CPrederef.pm     (revision 18722)
+++ lib/Parrot/OpTrans/CPrederef.pm     (working copy)
@@ -36,7 +36,7 @@
     my $type = __PACKAGE__;
     return <<END;
 /* defines - $0 -> $type */
-#define REL_PC ((size_t)(cur_opcode - interp->code->prederef.code))
+#define REL_PC ((size_t)(cur_opcode - (opcode_t*)interp->code->prederef.code))
 #define CUR_OPCODE \\
     ((opcode_t*)cur_opcode + CONTEXT(interp->ctx)->pred_offset)
 #define OP_AS_OFFS(o) (_reg_base + ((opcode_t*)cur_opcode)[o])
@@ -76,7 +76,7 @@
     my $prefix = $self->core_prefix;
     return <<END;
 /* run_core_func_decl - $0 -> $type */
-void ** $prefix$core(void **cur_op, Parrot_Interp interp)
+opcode_t * $prefix$core(opcode_t *cur_op, Parrot_Interp interp)
 END
 }
 
Index: lib/Parrot/OpTrans/C.pm
===================================================================
--- lib/Parrot/OpTrans/C.pm     (revision 18722)
+++ lib/Parrot/OpTrans/C.pm     (working copy)
@@ -52,7 +52,7 @@
 sub defines {
     return <<END;
 #undef CONST
-#define REL_PC     ((size_t)(cur_opcode - interp->code->base.data))
+#define REL_PC     ((size_t)(cur_opcode - (opcode_t *)interp->code->base.data))
 #define CUR_OPCODE cur_opcode
 #define IREG(i) REG_INT(cur_opcode[i])
 #define NREG(i) REG_NUM(cur_opcode[i])
Index: lib/Parrot/Ops2c/Utils.pm
===================================================================
--- lib/Parrot/Ops2c/Utils.pm   (revision 18722)
+++ lib/Parrot/Ops2c/Utils.pm   (working copy)
@@ -302,6 +302,10 @@
 
     $self->_print_run_core_func_decl_header($HEADER);
 
+    $self->_op_func_table($HEADER);
+
+    $self->_print_op_lib_descriptor($HEADER);
+
     $self->_print_guard_suffix($HEADER);
 
     _print_coda($HEADER);
@@ -460,7 +464,6 @@
 #include "$self->{include}"
 
 $self->{defines}
-static op_lib_t $self->{bs}op_lib;
 
 END_C
 
@@ -583,7 +586,7 @@
         print $fh <<END_C;
 #ifdef __GNUC__
 # ifdef I386
-    else if (cur_opcode == (void **) 1)
+    else if (cur_opcode == (opcode_t*) 1)
     __asm__ ("jmp *4(%ebp)");  /* jump to ret addr, used by JIT */
 # endif
 #endif
@@ -663,15 +666,11 @@
 
     $SOURCE = $self->_reset_line_number($SOURCE);
 
-    $self->_op_func_table($SOURCE);
-
     $self->{names} = {};
     $self->_op_info_table($SOURCE);
 
     $self->_op_lookup($SOURCE);
 
-    $self->_print_op_lib_descriptor($SOURCE);
-
     $self->_generate_init_func($SOURCE);
 
     $self->_print_dynamic_lib_load($SOURCE);
Index: include/parrot/pic.h
===================================================================
--- include/parrot/pic.h        (revision 18722)
+++ include/parrot/pic.h        (working copy)
@@ -74,7 +74,7 @@
 Parrot_PIC* parrot_PIC_alloc_pic(Interp*);
 
 void parrot_pic_find_infix_v_pp(Interp *, PMC *left, PMC *right,
-                Parrot_MIC *mic, void **cur_opcode);
+                Parrot_MIC *mic, opcode_t *cur_opcode);
 void * parrot_pic_opcode(Interp *, INTVAL op);
 
 typedef int (*arg_pass_f)(Interp *, PMC *sig,
Index: compilers/imcc/imcc.y
===================================================================
--- compilers/imcc/imcc.y       (revision 18722)
+++ compilers/imcc/imcc.y       (working copy)
@@ -108,7 +108,7 @@
     if (ascii) {
         /* strip delimiters */
         len = strlen(constant);
-        name = mem_sys_allocate(len);
+        name = (char *)mem_sys_allocate(len);
         constant[len - 1] = '\0';
         strcpy(name, constant + 1);
         free(constant);
@@ -182,7 +182,7 @@
     Instruction *i;
     i =  iLABEL(interp, unit, r);
     r->type = (r->type & VT_ENCODED) ? VT_PCC_SUB|VT_ENCODED : VT_PCC_SUB;
-    r->pcc_sub = calloc(1, sizeof(struct pcc_sub_t));
+    r->pcc_sub = (pcc_sub_t*)calloc(1, sizeof(struct pcc_sub_t));
     IMCC_INFO(interp)->cur_call = r;
     i->line = IMCC_INFO(interp)->line;
     add_namespace(interp, unit);
@@ -1048,7 +1048,7 @@
 id_list_id :
      IDENTIFIER UNIQUE_REG
      {
-         IdList* l = malloc(sizeof(IdList));
+         IdList* l = (IdList*)malloc(sizeof(IdList));
          l->id = $1;
          l->unique_reg = 1;
          $$ = l;
@@ -1056,7 +1056,7 @@
 
    | IDENTIFIER
      {
-         IdList* l = malloc(sizeof(IdList));
+         IdList* l = (IdList*)malloc(sizeof(IdList));
          l->id = $1;
          l->unique_reg = 0;
          $$ = l;
Index: compilers/imcc/parser.h
===================================================================
--- compilers/imcc/parser.h     (revision 18722)
+++ compilers/imcc/parser.h     (working copy)
@@ -25,7 +25,7 @@
 EXTERN int is_def;
 
 /* bison */
-PARROT_API EXTERN int yydebug;
+/* PARROT_API EXTERN int yydebug; */
 
 #define KEY_BIT(argnum) (1 << (argnum))
 
Index: compilers/imcc/instructions.c
===================================================================
--- compilers/imcc/instructions.c       (revision 18722)
+++ compilers/imcc/instructions.c       (working copy)
@@ -63,7 +63,7 @@
     reg_space = 0;
     if (n > 1)
         reg_space = sizeof (SymReg *) * (n - 1);
-    ins = calloc(sizeof (Instruction) + reg_space, 1);
+    ins = (Instruction*)calloc(sizeof (Instruction) + reg_space, 1);
     if (ins == NULL) {
         fprintf(stderr, "Memory error at mk_instruction\n");
         abort();
Index: compilers/imcc/symreg.c
===================================================================
--- compilers/imcc/symreg.c     (revision 18722)
+++ compilers/imcc/symreg.c     (working copy)
@@ -80,7 +80,7 @@
         free(name);
         return r;
     }
-    r = calloc(1, sizeof (SymReg));
+    r = (SymReg *)calloc(1, sizeof (SymReg));
     if (r==NULL) {
         fprintf(stderr, "Memory error at mk_symreg\n");
         abort();
@@ -145,7 +145,7 @@
     IMC_Unit *unit = IMCC_INFO(interp)->last_unit;
     SymReg *r = _mk_symreg(&unit->hash, name, proto);
     r->type = VT_PCC_SUB;
-    r->pcc_sub = calloc(1, sizeof (struct pcc_sub_t));
+    r->pcc_sub = (pcc_sub_t*)calloc(1, sizeof (struct pcc_sub_t));
     return r;
 }
 
@@ -182,9 +182,9 @@
 add_pcc_arg(SymReg *r, SymReg * arg)
 {
     int n = r->pcc_sub->nargs;
-    r->pcc_sub->args = realloc(r->pcc_sub->args, (n + 1) * sizeof (SymReg *));
+    r->pcc_sub->args = (SymReg**)realloc(r->pcc_sub->args, (n + 1) * sizeof 
(SymReg *));
     r->pcc_sub->args[n] = arg;
-    r->pcc_sub->arg_flags = realloc(r->pcc_sub->arg_flags, (n+1) * sizeof 
(int));
+    r->pcc_sub->arg_flags = (int*)realloc(r->pcc_sub->arg_flags, (n+1) * 
sizeof (int));
     r->pcc_sub->arg_flags[n] = arg->type;
     arg->type &= ~(VT_FLAT|VT_OPTIONAL|VT_OPT_FLAG|VT_NAMED);
     r->pcc_sub->nargs++;
@@ -200,12 +200,12 @@
 add_pcc_result(SymReg *r, SymReg * arg)
 {
     int n = r->pcc_sub->nret;
-    r->pcc_sub->ret = realloc(r->pcc_sub->ret, (n + 1) * sizeof (SymReg *));
+    r->pcc_sub->ret = (SymReg **)realloc(r->pcc_sub->ret, (n + 1) * sizeof 
(SymReg *));
     r->pcc_sub->ret[n] = arg;
     /* we can't keep the flags in the SymReg as the SymReg
      * maybe used with different flags for different calls
      */
-    r->pcc_sub->ret_flags = realloc(r->pcc_sub->ret_flags, (n+1) * sizeof 
(int));
+    r->pcc_sub->ret_flags = (int*)realloc(r->pcc_sub->ret_flags, (n+1) * 
sizeof (int));
     r->pcc_sub->ret_flags[n] = arg->type;
     arg->type &= ~(VT_FLAT|VT_OPTIONAL|VT_OPT_FLAG|VT_NAMED);
     r->pcc_sub->nret++;
@@ -215,7 +215,7 @@
 add_pcc_multi(SymReg *r, SymReg * arg)
 {
     int n = r->pcc_sub->nmulti;
-    r->pcc_sub->multi = realloc(r->pcc_sub->multi, (n + 1) * sizeof (SymReg 
*));
+    r->pcc_sub->multi = (SymReg **)realloc(r->pcc_sub->multi, (n + 1) * sizeof 
(SymReg *));
     r->pcc_sub->multi[n] = arg;
     r->pcc_sub->nmulti++;
 }
@@ -280,7 +280,7 @@
     Identifier * ident;
     SymReg * r;
     if (_namespace) {
-        ident = calloc(1, sizeof (struct ident_t));
+        ident = (Identifier *)calloc(1, sizeof (struct ident_t));
         ident->name = fullname;
         ident->next = _namespace->idents;
         _namespace->idents = ident;
@@ -413,7 +413,7 @@
         return name;
     /* TODO keyed syntax */
     len = strlen(name) + l  + 4;
-    ns_name = mem_sys_allocate(len);
+    ns_name = (char*)mem_sys_allocate(len);
     strcpy(ns_name, IMCC_INFO(interp)->cur_namespace->name);
     *ns_name = '_';
     ns_name[l - 1] = '\0';
@@ -437,7 +437,7 @@
     SymReg * r;
     if (uniq == U_add_all) {
 
-        r = calloc(1, sizeof (SymReg));
+        r = (SymReg *)calloc(1, sizeof (SymReg));
         r->type = VTADDRESS;
         r->name = name;
         _store_symreg(hsh,r);
@@ -598,7 +598,7 @@
     }
     if (any_slice && !(keys[0]->type & VT_SLICE_BITS))
         keys[0]->type |= (VT_START_SLICE|VT_END_SLICE);
-    key_str = malloc(len);
+    key_str = (char*)malloc(len);
     *key_str = 0;
     /* first look, if we already have this exact key chain */
     for (i = 0; i < nargs; i++) {
@@ -612,7 +612,7 @@
         return keychain;
     }
     /* no, need a new one */
-    keychain = mem_sys_allocate_zeroed(sizeof (SymReg));
+    keychain = mem_allocate_zeroed_typed(SymReg);
     keychain->type = VTCONST;
     ++keychain->use_count;
     key = keychain;
@@ -668,7 +668,7 @@
 void
 create_symhash(SymHash *hash)
 {
-   hash->data = mem_sys_allocate_zeroed(16 * sizeof (SymReg*));
+   hash->data = (SymReg**)mem_sys_allocate_zeroed(16 * sizeof (SymReg*));
    hash->size = 16;
    hash->entries = 0;
 }
@@ -683,9 +683,9 @@
     SymReg ** next_r;
     int n_next, j, k;
 
-    nh.data = mem_sys_allocate_zeroed(new_size * sizeof (SymReg*));
+    nh.data = (SymReg**)mem_sys_allocate_zeroed(new_size * sizeof (SymReg*));
     n_next = 16;
-    next_r =  mem_sys_allocate_zeroed(n_next   * sizeof (SymReg*));
+    next_r =  (SymReg**)mem_sys_allocate_zeroed(n_next   * sizeof (SymReg*));
     for (i = 0; i < hsh->size; i++) {
         j = 0;
         for (r = hsh->data[i]; r; r = next) {
@@ -696,7 +696,7 @@
              */
             if (j >= n_next) {
                 n_next <<= 1;
-                next_r = mem_sys_realloc(next_r, n_next * sizeof (SymReg*));
+                next_r = (SymReg**)mem_sys_realloc(next_r, n_next * sizeof 
(SymReg*));
             }
             r->next = NULL;
             next_r[j++] = r;
Index: compilers/imcc/imc.c
===================================================================
--- compilers/imcc/imc.c        (revision 18722)
+++ compilers/imcc/imc.c        (working copy)
@@ -79,7 +79,7 @@
 static IMC_Unit *
 imc_new_unit(IMC_Unit_Type t)
 {
-   IMC_Unit * unit = calloc(1, sizeof (IMC_Unit));
+   IMC_Unit * unit = (IMC_Unit *)calloc(1, sizeof (IMC_Unit));
    create_symhash(&unit->hash);
    unit->type = t;
    return unit;
Index: compilers/imcc/main.c
===================================================================
--- compilers/imcc/main.c       (revision 18722)
+++ compilers/imcc/main.c       (working copy)
@@ -198,6 +198,7 @@
 {
     struct longopt_opt_info opt = LONGOPT_OPT_INFO_INIT;
     int   status;
+    extern int yydebug;
     if (*argc == 1) {
         usage(stderr);
         exit(1);
@@ -709,7 +710,7 @@
         IMCC_INFO(interp)->state->pasm_file = pasm_file;
         IMCC_TRY(IMCC_INFO(interp)->jump_buf,
                  IMCC_INFO(interp)->error_code) {
-            if (yyparse(yyscanner, (void *) interp))
+            if (yyparse(yyscanner, interp))
                 exit(1);
 
             imc_compile_all_units(interp);
Index: compilers/imcc/imcc.l
===================================================================
--- compilers/imcc/imcc.l       (revision 18722)
+++ compilers/imcc/imcc.l       (working copy)
@@ -147,7 +147,7 @@
         /* Newline in the heredoc. Realloc and cat on. */
         IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->heredoc_content =
-            mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
+            (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
                             strlen(IMCC_INFO(interp)->heredoc_content) +
                             strlen(yytext) + 2);
         strcpy(IMCC_INFO(interp)->heredoc_content +
@@ -174,7 +174,7 @@
         {
             /* Part of the heredoc. Realloc and cat the line on. */
             IMCC_INFO(interp)->heredoc_content =
-                mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
+                (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
                                 strlen(IMCC_INFO(interp)->heredoc_content) +
                                 strlen(yytext) + 2);
             strcpy(IMCC_INFO(interp)->heredoc_content +
@@ -404,7 +404,7 @@
 
             if (!IMCC_INFO(interp)->frames || 
!IMCC_INFO(interp)->frames->label)
                 IMCC_fataly(interp, E_SyntaxError, "missing space?");
-        label = mem_sys_allocate(yyleng+10);
+        label = (char*)mem_sys_allocate(yyleng+10);
         sprintf(label, "%s%d", yytext, IMCC_INFO(interp)->frames->label);
 
         valp->s = label;
@@ -423,7 +423,7 @@
             if (!IMCC_INFO(interp)->frames || 
!IMCC_INFO(interp)->frames->label)
                 IMCC_fataly(interp, E_SyntaxError, "missing space?");
 
-            label = mem_sys_allocate(yyleng+10);
+            label = (char*)mem_sys_allocate(yyleng+10);
             sprintf(label, "%s%d", yytext, IMCC_INFO(interp)->frames->label);
 
             valp->s = label;
@@ -444,7 +444,7 @@
         int type = pmc_type(interp, string_from_cstring(interp, macro_name, 
0));
 
         if (type > 0) {
-            char *buf = malloc(16);
+            char *buf = (char*)malloc(16);
             sprintf(buf, "%d", type);
             valp->s = buf;
             free(macro_name);
@@ -515,7 +515,7 @@
         frame->s.next = (struct parser_state_t*) IMCC_INFO(interp)->frames;
         IMCC_INFO(interp)->frames = frame;
         /* Start slurping up the heredoc. */
-        IMCC_INFO(interp)->heredoc_content = mem_sys_allocate(2);
+        IMCC_INFO(interp)->heredoc_content = (char*)mem_sys_allocate(2);
         IMCC_INFO(interp)->heredoc_content[0] = yytext[2];        /* preserve 
delim */
         IMCC_INFO(interp)->heredoc_content[1] = 0;                /* eos */
         yy_push_state(heredoc1, yyscanner);
@@ -572,7 +572,7 @@
     if (valp) {
         YYCHOP();
 
-        label = mem_sys_allocate(strlen(IMCC_INFO(interp)->cur_macro_name) + 
yyleng + 15);
+        label = 
(char*)mem_sys_allocate(strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 
15);
         sprintf(label, "local__%s__%s__$:", IMCC_INFO(interp)->cur_macro_name, 
yytext+1);
 
         valp->s = label;
@@ -585,7 +585,7 @@
     char *label;
 
     if (valp) {
-        label = mem_sys_allocate(strlen(IMCC_INFO(interp)->cur_macro_name) + 
yyleng + 15);
+        label = 
(char*)mem_sys_allocate(strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 
15);
         sprintf(label, "local__%s__%s__$", IMCC_INFO(interp)->cur_macro_name, 
yytext+2);
 
         valp->s = label;
Index: compilers/imcc/imcparser.c
===================================================================
--- compilers/imcc/imcparser.c  (revision 18722)
+++ compilers/imcc/imcparser.c  (working copy)
@@ -419,7 +419,7 @@
     if (ascii) {
         /* strip delimiters */
         len = strlen(constant);
-        name = mem_sys_allocate(len);
+        name = (char *)mem_sys_allocate(len);
         constant[len - 1] = '\0';
         strcpy(name, constant + 1);
         free(constant);
@@ -493,7 +493,7 @@
     Instruction *i;
     i =  iLABEL(interp, unit, r);
     r->type = (r->type & VT_ENCODED) ? VT_PCC_SUB|VT_ENCODED : VT_PCC_SUB;
-    r->pcc_sub = calloc(1, sizeof(struct pcc_sub_t));
+    r->pcc_sub = (pcc_sub_t*)calloc(1, sizeof(struct pcc_sub_t));
     IMCC_INFO(interp)->cur_call = r;
     i->line = IMCC_INFO(interp)->line;
     add_namespace(interp, unit);
@@ -3482,7 +3482,7 @@
   case 166:
 #line 1056 "compilers/imcc/imcc.y"
     {
-         IdList* l = malloc(sizeof(IdList));
+         IdList* l = (IdList*)malloc(sizeof(IdList));
          l->id = (yyvsp[(1) - (2)].s);
          l->unique_reg = 1;
          (yyval.idlist) = l;
@@ -3492,7 +3492,7 @@
   case 167:
 #line 1064 "compilers/imcc/imcc.y"
     {
-         IdList* l = malloc(sizeof(IdList));
+         IdList* l = (IdList*)malloc(sizeof(IdList));
          l->id = (yyvsp[(1) - (1)].s);
          l->unique_reg = 0;
          (yyval.idlist) = l;

Reply via email to