aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Mackenzie2015-11-24 17:43:52 +0000
committerAlan Mackenzie2015-11-24 17:43:52 +0000
commit8766ea49b62c82eb775b0810ae191af5a92cabee (patch)
tree28604e3d07f6e0102bc8f5586c05498a1c204897 /src
parentacb96f2718ccb0d36af514ce63b5decf0f24a697 (diff)
parentd5fdffecdfad305d9c933ae3cad75a5e4e73878c (diff)
downloademacs-8766ea49b62c82eb775b0810ae191af5a92cabee.tar.gz
emacs-8766ea49b62c82eb775b0810ae191af5a92cabee.zip
Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c19
-rw-r--r--src/font.h42
2 files changed, 48 insertions, 13 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 99f5cdcdea2..e83b3836aa4 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -5317,10 +5317,6 @@ total_bytes_of_live_objects (void)
5317 5317
5318#ifdef HAVE_WINDOW_SYSTEM 5318#ifdef HAVE_WINDOW_SYSTEM
5319 5319
5320/* This code has a few issues on MS-Windows, see Bug#15876 and Bug#16140. */
5321
5322#if !defined (HAVE_NTGUI)
5323
5324/* Remove unmarked font-spec and font-entity objects from ENTRY, which is 5320/* Remove unmarked font-spec and font-entity objects from ENTRY, which is
5325 (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...), and return changed entry. */ 5321 (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...), and return changed entry. */
5326 5322
@@ -5335,11 +5331,12 @@ compact_font_cache_entry (Lisp_Object entry)
5335 Lisp_Object obj = XCAR (tail); 5331 Lisp_Object obj = XCAR (tail);
5336 5332
5337 /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]). */ 5333 /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]). */
5338 if (CONSP (obj) && FONT_SPEC_P (XCAR (obj)) 5334 if (CONSP (obj) && GC_FONT_SPEC_P (XCAR (obj))
5339 && !VECTOR_MARKED_P (XFONT_SPEC (XCAR (obj))) 5335 && !VECTOR_MARKED_P (GC_XFONT_SPEC (XCAR (obj)))
5340 && VECTORP (XCDR (obj))) 5336 && VECTORP (XCDR (obj)))
5341 { 5337 {
5342 ptrdiff_t i, size = gc_asize (XCDR (obj)); 5338 ptrdiff_t i, size = gc_asize (XCDR (obj));
5339 Lisp_Object obj_cdr = XCDR (obj);
5343 5340
5344 /* If font-spec is not marked, most likely all font-entities 5341 /* If font-spec is not marked, most likely all font-entities
5345 are not marked too. But we must be sure that nothing is 5342 are not marked too. But we must be sure that nothing is
@@ -5348,14 +5345,14 @@ compact_font_cache_entry (Lisp_Object entry)
5348 { 5345 {
5349 Lisp_Object objlist; 5346 Lisp_Object objlist;
5350 5347
5351 if (VECTOR_MARKED_P (XFONT_ENTITY (AREF (XCDR (obj), i)))) 5348 if (VECTOR_MARKED_P (GC_XFONT_ENTITY (AREF (obj_cdr, i))))
5352 break; 5349 break;
5353 5350
5354 objlist = AREF (AREF (XCDR (obj), i), FONT_OBJLIST_INDEX); 5351 objlist = AREF (AREF (obj_cdr, i), FONT_OBJLIST_INDEX);
5355 for (; CONSP (objlist); objlist = XCDR (objlist)) 5352 for (; CONSP (objlist); objlist = XCDR (objlist))
5356 { 5353 {
5357 Lisp_Object val = XCAR (objlist); 5354 Lisp_Object val = XCAR (objlist);
5358 struct font *font = XFONT_OBJECT (val); 5355 struct font *font = GC_XFONT_OBJECT (val);
5359 5356
5360 if (!NILP (AREF (val, FONT_TYPE_INDEX)) 5357 if (!NILP (AREF (val, FONT_TYPE_INDEX))
5361 && VECTOR_MARKED_P(font)) 5358 && VECTOR_MARKED_P(font))
@@ -5383,8 +5380,6 @@ compact_font_cache_entry (Lisp_Object entry)
5383 return entry; 5380 return entry;
5384} 5381}
5385 5382
5386#endif /* not HAVE_NTGUI */
5387
5388/* Compact font caches on all terminals and mark 5383/* Compact font caches on all terminals and mark
5389 everything which is still here after compaction. */ 5384 everything which is still here after compaction. */
5390 5385
@@ -5396,7 +5391,6 @@ compact_font_caches (void)
5396 for (t = terminal_list; t; t = t->next_terminal) 5391 for (t = terminal_list; t; t = t->next_terminal)
5397 { 5392 {
5398 Lisp_Object cache = TERMINAL_FONT_CACHE (t); 5393 Lisp_Object cache = TERMINAL_FONT_CACHE (t);
5399#if !defined (HAVE_NTGUI)
5400 if (CONSP (cache)) 5394 if (CONSP (cache))
5401 { 5395 {
5402 Lisp_Object entry; 5396 Lisp_Object entry;
@@ -5404,7 +5398,6 @@ compact_font_caches (void)
5404 for (entry = XCDR (cache); CONSP (entry); entry = XCDR (entry)) 5398 for (entry = XCDR (cache); CONSP (entry); entry = XCDR (entry))
5405 XSETCAR (entry, compact_font_cache_entry (XCAR (entry))); 5399 XSETCAR (entry, compact_font_cache_entry (XCAR (entry)));
5406 } 5400 }
5407#endif /* not HAVE_NTGUI */
5408 mark_object (cache); 5401 mark_object (cache);
5409 } 5402 }
5410} 5403}
diff --git a/src/font.h b/src/font.h
index 1d13e1cb6b0..24c058dd88b 100644
--- a/src/font.h
+++ b/src/font.h
@@ -427,6 +427,13 @@ FONT_SPEC_P (Lisp_Object x)
427 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX; 427 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
428} 428}
429 429
430/* Like FONT_SPEC_P, but can be used in the garbage collector. */
431INLINE bool
432GC_FONT_SPEC_P (Lisp_Object x)
433{
434 return FONTP (x) && (gc_asize (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
435}
436
430/* True iff X is font-entity. */ 437/* True iff X is font-entity. */
431INLINE bool 438INLINE bool
432FONT_ENTITY_P (Lisp_Object x) 439FONT_ENTITY_P (Lisp_Object x)
@@ -434,6 +441,13 @@ FONT_ENTITY_P (Lisp_Object x)
434 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX; 441 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
435} 442}
436 443
444/* Like FONT_ENTITY_P, but can be used in the garbage collector. */
445INLINE bool
446GC_FONT_ENTITY_P (Lisp_Object x)
447{
448 return FONTP (x) && (gc_asize (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
449}
450
437/* True iff X is font-object. */ 451/* True iff X is font-object. */
438INLINE bool 452INLINE bool
439FONT_OBJECT_P (Lisp_Object x) 453FONT_OBJECT_P (Lisp_Object x)
@@ -441,6 +455,13 @@ FONT_OBJECT_P (Lisp_Object x)
441 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX; 455 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
442} 456}
443 457
458/* Like FONT_OBJECT_P, but can be used in the garbage collector. */
459INLINE bool
460GC_FONT_OBJECT_P (Lisp_Object x)
461{
462 return FONTP (x) && (gc_asize (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
463}
464
444/* Type checking functions for various font-related objects. */ 465/* Type checking functions for various font-related objects. */
445 466
446INLINE void 467INLINE void
@@ -476,6 +497,13 @@ XFONT_SPEC (Lisp_Object p)
476 return XUNTAG (p, Lisp_Vectorlike); 497 return XUNTAG (p, Lisp_Vectorlike);
477} 498}
478 499
500INLINE struct font_spec *
501GC_XFONT_SPEC (Lisp_Object p)
502{
503 eassert (GC_FONT_SPEC_P (p));
504 return XUNTAG (p, Lisp_Vectorlike);
505}
506
479INLINE struct font_entity * 507INLINE struct font_entity *
480XFONT_ENTITY (Lisp_Object p) 508XFONT_ENTITY (Lisp_Object p)
481{ 509{
@@ -483,6 +511,13 @@ XFONT_ENTITY (Lisp_Object p)
483 return XUNTAG (p, Lisp_Vectorlike); 511 return XUNTAG (p, Lisp_Vectorlike);
484} 512}
485 513
514INLINE struct font_entity *
515GC_XFONT_ENTITY (Lisp_Object p)
516{
517 eassert (GC_FONT_ENTITY_P (p));
518 return XUNTAG (p, Lisp_Vectorlike);
519}
520
486INLINE struct font * 521INLINE struct font *
487XFONT_OBJECT (Lisp_Object p) 522XFONT_OBJECT (Lisp_Object p)
488{ 523{
@@ -490,6 +525,13 @@ XFONT_OBJECT (Lisp_Object p)
490 return XUNTAG (p, Lisp_Vectorlike); 525 return XUNTAG (p, Lisp_Vectorlike);
491} 526}
492 527
528INLINE struct font *
529GC_XFONT_OBJECT (Lisp_Object p)
530{
531 eassert (GC_FONT_OBJECT_P (p));
532 return XUNTAG (p, Lisp_Vectorlike);
533}
534
493#define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) 535#define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT))
494 536
495INLINE struct font * 537INLINE struct font *