Another C++ strictness fix
Pango Bug 602408 - Invalid C++ code breaks compile with Sun C++ Compiler (Error: A union member cannot have a user-defined assignment operator) According to the bug: C++ Programming Language by Bjarne Stroustrup: Chapter 10.4.12 forbids explicitly using of union members with constructors, destructors or assignment operations. So we use a set() method instead of the assignment operator. Ugly, but hey, that's life.
This commit is contained in:
parent
8b9b866d3e
commit
807b8aa486
|
@ -262,7 +262,7 @@ _hb_sanitize_edit (SANITIZE_ARG_DEF,
|
|||
#define NEUTER(Var, Val) \
|
||||
(SANITIZE_OBJ (Var) && \
|
||||
_hb_sanitize_edit (SANITIZE_ARG, CONST_CHARP(&(Var)), sizeof (Var)) && \
|
||||
((Var) = (Val), true))
|
||||
((Var).set (Val), true))
|
||||
|
||||
|
||||
/* Template to sanitize an object. */
|
||||
|
@ -349,7 +349,7 @@ struct Sanitizer
|
|||
#define _DEFINE_INT_TYPE1_UNALIGNED(NAME, TYPE, BIG_ENDIAN, BYTES) \
|
||||
struct NAME \
|
||||
{ \
|
||||
inline NAME& operator = (TYPE i) { (TYPE&) v = BIG_ENDIAN (i); return *this; } \
|
||||
inline NAME& set (TYPE i) { (TYPE&) v = BIG_ENDIAN (i); return *this; } \
|
||||
inline operator TYPE(void) const { return BIG_ENDIAN ((TYPE&) v); } \
|
||||
inline bool operator== (NAME o) const { return (TYPE&) v == (TYPE&) o.v; } \
|
||||
inline bool sanitize (SANITIZE_ARG_DEF) { \
|
||||
|
@ -363,7 +363,7 @@ struct Sanitizer
|
|||
#define DEFINE_INT_TYPE1(NAME, TYPE, BIG_ENDIAN, BYTES) \
|
||||
struct NAME \
|
||||
{ \
|
||||
inline NAME& operator = (TYPE i) { BIG_ENDIAN##_put_unaligned(v, i); return *this; } \
|
||||
inline NAME& set (TYPE i) { BIG_ENDIAN##_put_unaligned(v, i); return *this; } \
|
||||
inline operator TYPE(void) const { return BIG_ENDIAN##_get_unaligned (v); } \
|
||||
inline bool operator== (NAME o) const { return BIG_ENDIAN##_cmp_unaligned (v, o.v); } \
|
||||
inline bool sanitize (SANITIZE_ARG_DEF) { \
|
||||
|
@ -388,7 +388,7 @@ DEFINE_INT_TYPE (LONG, , 32); /* 32-bit signed integer. */
|
|||
struct Tag : ULONG
|
||||
{
|
||||
inline Tag (const Tag &o) { *(ULONG*)this = (ULONG&) o; }
|
||||
inline Tag (uint32_t i) { *(ULONG*)this = i; }
|
||||
inline Tag (uint32_t i) { (*(ULONG*)this).set (i); }
|
||||
inline Tag (const char *c) { *(ULONG*)this = *(ULONG*)c; }
|
||||
inline bool operator== (const char *c) const { return *(ULONG*)this == *(ULONG*)c; }
|
||||
/* What the char* converters return is NOT nul-terminated. Print using "%.4s" */
|
||||
|
|
|
@ -328,7 +328,7 @@ struct CoverageFormat1
|
|||
if (HB_UNLIKELY (glyph_id > 0xFFFF))
|
||||
return NOT_COVERED;
|
||||
GlyphID gid;
|
||||
gid = glyph_id;
|
||||
gid.set (glyph_id);
|
||||
// TODO: bsearch
|
||||
unsigned int num_glyphs = glyphArray.len;
|
||||
for (unsigned int i = 0; i < num_glyphs; i++)
|
||||
|
|
Loading…
Reference in New Issue