On Thursday 17 May 2007 09:32:01 jerry gay wrote:

> this revision breaks parrot on msvc (and i suspect other c89-compliant
> compilers--sometimes i wonder if there are any others!)

I doubt even MSVC is C89-compliant, to be honest.  It just barfs more often 
than GCC on certain things.

> this situation is *extremely* frustrating. the temporary workaround is
> to revert this patch until it works everywhere. the solution is to
> find a way to make gcc (and other) compilers comply with our most
> important coding standard: C89 compliance.

Unfortunately, our headers (and even some system headers) don't follow C89:

$ make parrot
compilers/imcc/pbc.c
In file included from ./include/parrot/parrot.h:30,
                 from compilers/imcc/imc.h:21,
                 from compilers/imcc/pbc.c:7:
./include/parrot/config.h:82: warning: ISO C90 does not support ‘long long’
./include/parrot/config.h:83: warning: ISO C90 does not support ‘long long’
In file included from ./include/parrot/atomic.h:25,
                 from ./include/parrot/thread.h:20,
                 from ./include/parrot/pmc.h:19,
                 from ./include/parrot/parrot.h:282,
                 from compilers/imcc/imc.h:21,
                 from compilers/imcc/pbc.c:7:
./include/parrot/atomic/gcc_x86.h:30: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ 
or ‘__attribute__’ before ‘static’
./include/parrot/atomic/gcc_x86.h:85: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ 
or ‘__attribute__’ before ‘static

Chasing down that problem is... fun.

Regardless, does this patch fix the problem for you?

-- c

=== compilers/imcc/pbc.c
==================================================================
--- compilers/imcc/pbc.c	(revision 3523)
+++ compilers/imcc/pbc.c	(local)
@@ -595,7 +595,7 @@
      * I think letting this override in PASM/PIR would be a
      * can of worms - how do we call this if it declares .lex
      */
-    decl_func = (decl_func_t) PMC_struct_val(decl_lex_meth);
+    decl_func = (decl_func_t) D2FPTR(PMC_struct_val(decl_lex_meth));
 
     for (i = 0; i < hsh->size; i++) {
         for (r = hsh->data[i]; r; r = r->next) {
@@ -641,14 +641,14 @@
 static PMC*
 find_outer(Interp *interp, IMC_Unit *unit)
 {
-    UNUSED(interp);
-
     subs_t *s;
     SymReg *sub;
     size_t  len;
     PMC    *current;
     STRING *cur_name;
 
+    UNUSED(interp);
+
     if (!unit->outer)
         return NULL;
 
@@ -908,7 +908,7 @@
     opcode_t  size;
     int       key_length;     /* P0["hi;there"; S0; 2] has length 3 */
     int       k;
-    SymReg   *r;
+    SymReg   *r, *reg;
     int       var_type, slice_bits, type;
 
     /* 0 is length */
@@ -918,7 +918,7 @@
     char     *s  = s_key;
     *s           = 0;
 
-    SymReg *reg  = key_reg->set == 'K' ? key_reg->nextkey : key_reg;
+    reg          = key_reg->set == 'K' ? key_reg->nextkey : key_reg;
 
     for (key_length = 0; reg ; reg = reg->nextkey, key_length++) {
         if ((pc - key - 2) >= KEYLEN)

Reply via email to