diff options
Diffstat (limited to 'src/font.h')
-rw-r--r-- | src/font.h | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/font.h b/src/font.h index d358110ce9a..741bc1033f3 100644 --- a/src/font.h +++ b/src/font.h @@ -185,16 +185,16 @@ enum font_property_index /* Return the numeric weight value of FONT. */ #define FONT_WEIGHT_NUMERIC(font) \ - (INTEGERP (AREF ((font), FONT_WEIGHT_INDEX)) \ - ? (XINT (AREF ((font), FONT_WEIGHT_INDEX)) >> 8) : -1) + (FIXNUMP (AREF ((font), FONT_WEIGHT_INDEX)) \ + ? (XFIXNUM (AREF ((font), FONT_WEIGHT_INDEX)) >> 8) : -1) /* Return the numeric slant value of FONT. */ #define FONT_SLANT_NUMERIC(font) \ - (INTEGERP (AREF ((font), FONT_SLANT_INDEX)) \ - ? (XINT (AREF ((font), FONT_SLANT_INDEX)) >> 8) : -1) + (FIXNUMP (AREF ((font), FONT_SLANT_INDEX)) \ + ? (XFIXNUM (AREF ((font), FONT_SLANT_INDEX)) >> 8) : -1) /* Return the numeric width value of FONT. */ #define FONT_WIDTH_NUMERIC(font) \ - (INTEGERP (AREF ((font), FONT_WIDTH_INDEX)) \ - ? (XINT (AREF ((font), FONT_WIDTH_INDEX)) >> 8) : -1) + (FIXNUMP (AREF ((font), FONT_WIDTH_INDEX)) \ + ? (XFIXNUM (AREF ((font), FONT_WIDTH_INDEX)) >> 8) : -1) /* Return the symbolic weight value of FONT. */ #define FONT_WEIGHT_SYMBOLIC(font) \ font_style_symbolic (font, FONT_WEIGHT_INDEX, false) @@ -228,7 +228,7 @@ enum font_property_index style-related font property index (FONT_WEIGHT/SLANT/WIDTH_INDEX). VAL (integer or symbol) is the numeric or symbolic style value. */ #define FONT_SET_STYLE(font, prop, val) \ - ASET ((font), prop, make_number (font_style_to_value (prop, val, true))) + ASET ((font), prop, make_fixnum (font_style_to_value (prop, val, true))) #ifndef MSDOS #define FONT_WIDTH(f) ((f)->max_width) @@ -494,42 +494,42 @@ INLINE struct font_spec * XFONT_SPEC (Lisp_Object p) { eassert (FONT_SPEC_P (p)); - return XUNTAG (p, Lisp_Vectorlike); + return XUNTAG (p, Lisp_Vectorlike, struct font_spec); } INLINE struct font_spec * GC_XFONT_SPEC (Lisp_Object p) { eassert (GC_FONT_SPEC_P (p)); - return XUNTAG (p, Lisp_Vectorlike); + return XUNTAG (p, Lisp_Vectorlike, struct font_spec); } INLINE struct font_entity * XFONT_ENTITY (Lisp_Object p) { eassert (FONT_ENTITY_P (p)); - return XUNTAG (p, Lisp_Vectorlike); + return XUNTAG (p, Lisp_Vectorlike, struct font_entity); } INLINE struct font_entity * GC_XFONT_ENTITY (Lisp_Object p) { eassert (GC_FONT_ENTITY_P (p)); - return XUNTAG (p, Lisp_Vectorlike); + return XUNTAG (p, Lisp_Vectorlike, struct font_entity); } INLINE struct font * XFONT_OBJECT (Lisp_Object p) { eassert (FONT_OBJECT_P (p)); - return XUNTAG (p, Lisp_Vectorlike); + return XUNTAG (p, Lisp_Vectorlike, struct font); } INLINE struct font * GC_XFONT_OBJECT (Lisp_Object p) { eassert (GC_FONT_OBJECT_P (p)); - return XUNTAG (p, Lisp_Vectorlike); + return XUNTAG (p, Lisp_Vectorlike, struct font); } #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) @@ -613,7 +613,7 @@ struct font_driver (symbols). */ Lisp_Object (*list_family) (struct frame *f); - /* Optional (if FONT_EXTRA_INDEX is not Lisp_Save_Value). + /* Optional. Free FONT_EXTRA_INDEX field of FONT_ENTITY. */ void (*free_entity) (Lisp_Object font_entity); @@ -945,6 +945,22 @@ extern void font_deferred_log (const char *, Lisp_Object, Lisp_Object); font_deferred_log ((ACTION), (ARG), (RESULT)); \ } while (false) +/* FIXME: This is for use in functions that can be called while + garbage-collecting, but which assume that Lisp data structures are + properly-formed. This invalid assumption can lead to core dumps + (Bug#20890). */ +INLINE bool +font_data_structures_may_be_ill_formed (void) +{ +#ifdef USE_CAIRO + /* Although this works around Bug#20890, it is probably not the + right thing to do. */ + return gc_in_progress; +#else + return false; +#endif +} + INLINE_HEADER_END #endif /* not EMACS_FONT_H */ |