On Sat, Apr 26, 2008 at 8:16 PM, chromatic <[EMAIL PROTECTED]> wrote:
> > A possible solution is to add another macro taking as second argument
> > the struct instead of a pointer.
> That seems cleaner to me; want to try that patch?
The attached patch adds the macro STRUCT_COPY_ST, and uses it in the
src/charset charset init functions.
All test pass with 27216 in my system (Ubuntu 8.04)
--
Salu2
Index: src/charset/iso-8859-1.c
===================================================================
--- src/charset/iso-8859-1.c (revisión: 27216)
+++ src/charset/iso-8859-1.c (copia de trabajo)
@@ -628,7 +628,7 @@
NULL
};
- STRUCT_COPY(return_set, &base_set);
+ STRUCT_COPY_ST(return_set, base_set);
return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
Parrot_register_charset(interp, "iso-8859-1", return_set);
return return_set;
Index: src/charset/binary.c
===================================================================
--- src/charset/binary.c (revisión: 27216)
+++ src/charset/binary.c (copia de trabajo)
@@ -467,7 +467,7 @@
NULL
};
- STRUCT_COPY(return_set, &base_set);
+ STRUCT_COPY_ST(return_set, base_set);
return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
Parrot_register_charset(interp, "binary", return_set);
return return_set;
Index: src/charset/unicode.c
===================================================================
--- src/charset/unicode.c (revisión: 27216)
+++ src/charset/unicode.c (copia de trabajo)
@@ -925,7 +925,7 @@
NULL
};
- STRUCT_COPY(return_set, &base_set);
+ STRUCT_COPY_ST(return_set, base_set);
/*
* for now use utf8
* TODO replace it with a fixed uint_16 or uint_32 encoding
Index: src/charset/ascii.c
===================================================================
--- src/charset/ascii.c (revisión: 27216)
+++ src/charset/ascii.c (copia de trabajo)
@@ -789,7 +789,7 @@
NULL
};
- STRUCT_COPY(return_set, &base_set);
+ STRUCT_COPY_ST(return_set, base_set);
return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
Parrot_register_charset(interp, "ascii", return_set);
return return_set;
Index: include/parrot/parrot.h
===================================================================
--- include/parrot/parrot.h (revisión: 27216)
+++ include/parrot/parrot.h (copia de trabajo)
@@ -241,10 +241,12 @@
#endif /* O_BINARY */
/* Hide our struct copying behind macros */
+/* Copying to struct pointer from struct pointer */
#define STRUCT_COPY(d, s) (PARROT_ASSERT(d), PARROT_ASSERT(s), *(d)=*(s))
#define STRUCT_COPY_N(d, s, n) (PARROT_ASSERT(d), PARROT_ASSERT(s), PARROT_ASSERT(sizeof (*(d))==sizeof (*(s))), memcpy((d), (s), sizeof (*(d))*(n)))
+/* Copying to struct pointer from struct */
+#define STRUCT_COPY_ST(d, s) (PARROT_ASSERT(d), *(d)=(s))
-
/* internationalization settings */
#ifdef PARROT_HAS_GETTEXT
# include <libintl.h>