comparison src/objects.c @ 424:11054d720c21 r21-2-20

Import from CVS: tag r21-2-20
author cvs
date Mon, 13 Aug 2007 11:26:11 +0200
parents 41dbb7a9d5f2
children
comparison
equal deleted inserted replaced
423:28d9c139be4c 424:11054d720c21
55 ****************************************************************************/ 55 ****************************************************************************/
56 56
57 Lisp_Object Qcolor_instancep; 57 Lisp_Object Qcolor_instancep;
58 58
59 static Lisp_Object 59 static Lisp_Object
60 mark_color_instance (Lisp_Object obj, void (*markobj) (Lisp_Object)) 60 mark_color_instance (Lisp_Object obj)
61 { 61 {
62 struct Lisp_Color_Instance *c = XCOLOR_INSTANCE (obj); 62 struct Lisp_Color_Instance *c = XCOLOR_INSTANCE (obj);
63 markobj (c->name); 63 mark_object (c->name);
64 if (!NILP (c->device)) /* Vthe_null_color_instance */ 64 if (!NILP (c->device)) /* Vthe_null_color_instance */
65 MAYBE_DEVMETH (XDEVICE (c->device), mark_color_instance, (c, markobj)); 65 MAYBE_DEVMETH (XDEVICE (c->device), mark_color_instance, (c));
66 66
67 return c->device; 67 return c->device;
68 } 68 }
69 69
70 static void 70 static void
104 { 104 {
105 struct Lisp_Color_Instance *c1 = XCOLOR_INSTANCE (obj1); 105 struct Lisp_Color_Instance *c1 = XCOLOR_INSTANCE (obj1);
106 struct Lisp_Color_Instance *c2 = XCOLOR_INSTANCE (obj2); 106 struct Lisp_Color_Instance *c2 = XCOLOR_INSTANCE (obj2);
107 107
108 return (c1 == c2) || 108 return (c1 == c2) ||
109 ((EQ (c1->device, c2->device)) && 109 (EQ (c1->device, c2->device) &&
110 DEVICEP (c1->device) && 110 DEVICEP (c1->device) &&
111 HAS_DEVMETH_P (XDEVICE (c1->device), color_instance_equal) && 111 HAS_DEVMETH_P (XDEVICE (c1->device), color_instance_equal) &&
112 DEVMETH (XDEVICE (c1->device), color_instance_equal, (c1, c2, depth))); 112 DEVMETH (XDEVICE (c1->device), color_instance_equal, (c1, c2, depth)));
113 } 113 }
114 114
235 235
236 static Lisp_Object font_instance_truename_internal (Lisp_Object xfont, 236 static Lisp_Object font_instance_truename_internal (Lisp_Object xfont,
237 Error_behavior errb); 237 Error_behavior errb);
238 238
239 static Lisp_Object 239 static Lisp_Object
240 mark_font_instance (Lisp_Object obj, void (*markobj) (Lisp_Object)) 240 mark_font_instance (Lisp_Object obj)
241 { 241 {
242 struct Lisp_Font_Instance *f = XFONT_INSTANCE (obj); 242 struct Lisp_Font_Instance *f = XFONT_INSTANCE (obj);
243 243
244 markobj (f->name); 244 mark_object (f->name);
245 if (!NILP (f->device)) /* Vthe_null_font_instance */ 245 if (!NILP (f->device)) /* Vthe_null_font_instance */
246 MAYBE_DEVMETH (XDEVICE (f->device), mark_font_instance, (f, markobj)); 246 MAYBE_DEVMETH (XDEVICE (f->device), mark_font_instance, (f));
247 247
248 return f->device; 248 return f->device;
249 } 249 }
250 250
251 static void 251 static void
487 COLOR_SPECIFIER_FACE (color) = Qnil; 487 COLOR_SPECIFIER_FACE (color) = Qnil;
488 COLOR_SPECIFIER_FACE_PROPERTY (color) = Qnil; 488 COLOR_SPECIFIER_FACE_PROPERTY (color) = Qnil;
489 } 489 }
490 490
491 static void 491 static void
492 color_mark (Lisp_Object obj, void (*markobj) (Lisp_Object)) 492 color_mark (Lisp_Object obj)
493 { 493 {
494 struct Lisp_Specifier *color = XCOLOR_SPECIFIER (obj); 494 struct Lisp_Specifier *color = XCOLOR_SPECIFIER (obj);
495 495
496 markobj (COLOR_SPECIFIER_FACE (color)); 496 mark_object (COLOR_SPECIFIER_FACE (color));
497 markobj (COLOR_SPECIFIER_FACE_PROPERTY (color)); 497 mark_object (COLOR_SPECIFIER_FACE_PROPERTY (color));
498 } 498 }
499 499
500 /* No equal or hash methods; ignore the face the color is based off 500 /* No equal or hash methods; ignore the face the color is based off
501 of for `equal' */ 501 of for `equal' */
502 502
665 FONT_SPECIFIER_FACE (font) = Qnil; 665 FONT_SPECIFIER_FACE (font) = Qnil;
666 FONT_SPECIFIER_FACE_PROPERTY (font) = Qnil; 666 FONT_SPECIFIER_FACE_PROPERTY (font) = Qnil;
667 } 667 }
668 668
669 static void 669 static void
670 font_mark (Lisp_Object obj, void (*markobj) (Lisp_Object)) 670 font_mark (Lisp_Object obj)
671 { 671 {
672 struct Lisp_Specifier *font = XFONT_SPECIFIER (obj); 672 struct Lisp_Specifier *font = XFONT_SPECIFIER (obj);
673 673
674 markobj (FONT_SPECIFIER_FACE (font)); 674 mark_object (FONT_SPECIFIER_FACE (font));
675 markobj (FONT_SPECIFIER_FACE_PROPERTY (font)); 675 mark_object (FONT_SPECIFIER_FACE_PROPERTY (font));
676 } 676 }
677 677
678 /* No equal or hash methods; ignore the face the font is based off 678 /* No equal or hash methods; ignore the face the font is based off
679 of for `equal' */ 679 of for `equal' */
680 680
872 FACE_BOOLEAN_SPECIFIER_FACE (face_boolean) = Qnil; 872 FACE_BOOLEAN_SPECIFIER_FACE (face_boolean) = Qnil;
873 FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY (face_boolean) = Qnil; 873 FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY (face_boolean) = Qnil;
874 } 874 }
875 875
876 static void 876 static void
877 face_boolean_mark (Lisp_Object obj, void (*markobj) (Lisp_Object)) 877 face_boolean_mark (Lisp_Object obj)
878 { 878 {
879 struct Lisp_Specifier *face_boolean = XFACE_BOOLEAN_SPECIFIER (obj); 879 struct Lisp_Specifier *face_boolean = XFACE_BOOLEAN_SPECIFIER (obj);
880 880
881 markobj (FACE_BOOLEAN_SPECIFIER_FACE (face_boolean)); 881 mark_object (FACE_BOOLEAN_SPECIFIER_FACE (face_boolean));
882 markobj (FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY (face_boolean)); 882 mark_object (FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY (face_boolean));
883 } 883 }
884 884
885 /* No equal or hash methods; ignore the face the face-boolean is based off 885 /* No equal or hash methods; ignore the face the face-boolean is based off
886 of for `equal' */ 886 of for `equal' */
887 887
1034 1034
1035 /* Qcolor, Qfont defined in general.c */ 1035 /* Qcolor, Qfont defined in general.c */
1036 defsymbol (&Qface_boolean, "face-boolean"); 1036 defsymbol (&Qface_boolean, "face-boolean");
1037 } 1037 }
1038 1038
1039 static const struct lrecord_description color_specifier_description[] = {
1040 { XD_LISP_OBJECT, specifier_data_offset + offsetof(struct color_specifier, face), 2 },
1041 { XD_END }
1042 };
1043
1044 static const struct lrecord_description font_specifier_description[] = {
1045 { XD_LISP_OBJECT, specifier_data_offset + offsetof(struct font_specifier, face), 2 },
1046 { XD_END }
1047 };
1048
1049 static const struct lrecord_description face_boolean_specifier_description[] = {
1050 { XD_LISP_OBJECT, specifier_data_offset + offsetof(struct face_boolean_specifier, face), 2 },
1051 { XD_END }
1052 };
1053
1039 void 1054 void
1040 specifier_type_create_objects (void) 1055 specifier_type_create_objects (void)
1041 { 1056 {
1042 INITIALIZE_SPECIFIER_TYPE_WITH_DATA (color, "color", "color-specifier-p"); 1057 INITIALIZE_SPECIFIER_TYPE_WITH_DATA (color, "color", "color-specifier-p");
1043 INITIALIZE_SPECIFIER_TYPE_WITH_DATA (font, "font", "font-specifier-p"); 1058 INITIALIZE_SPECIFIER_TYPE_WITH_DATA (font, "font", "font-specifier-p");
1068 SPECIFIER_HAS_METHOD (font, validate_matchspec); 1083 SPECIFIER_HAS_METHOD (font, validate_matchspec);
1069 #endif 1084 #endif
1070 } 1085 }
1071 1086
1072 void 1087 void
1073 vars_of_objects (void) 1088 reinit_specifier_type_create_objects (void)
1074 { 1089 {
1075 staticpro (&Vthe_null_color_instance); 1090 REINITIALIZE_SPECIFIER_TYPE (color);
1091 REINITIALIZE_SPECIFIER_TYPE (font);
1092 REINITIALIZE_SPECIFIER_TYPE (face_boolean);
1093 }
1094
1095 void
1096 reinit_vars_of_objects (void)
1097 {
1098 staticpro_nodump (&Vthe_null_color_instance);
1076 { 1099 {
1077 struct Lisp_Color_Instance *c = 1100 struct Lisp_Color_Instance *c =
1078 alloc_lcrecord_type (struct Lisp_Color_Instance, &lrecord_color_instance); 1101 alloc_lcrecord_type (struct Lisp_Color_Instance, &lrecord_color_instance);
1079 c->name = Qnil; 1102 c->name = Qnil;
1080 c->device = Qnil; 1103 c->device = Qnil;
1081 c->data = 0; 1104 c->data = 0;
1082 1105
1083 XSETCOLOR_INSTANCE (Vthe_null_color_instance, c); 1106 XSETCOLOR_INSTANCE (Vthe_null_color_instance, c);
1084 } 1107 }
1085 1108
1086 staticpro (&Vthe_null_font_instance); 1109 staticpro_nodump (&Vthe_null_font_instance);
1087 { 1110 {
1088 struct Lisp_Font_Instance *f = 1111 struct Lisp_Font_Instance *f =
1089 alloc_lcrecord_type (struct Lisp_Font_Instance, &lrecord_font_instance); 1112 alloc_lcrecord_type (struct Lisp_Font_Instance, &lrecord_font_instance);
1090 f->name = Qnil; 1113 f->name = Qnil;
1091 f->device = Qnil; 1114 f->device = Qnil;
1097 f->proportional_p = 0; 1120 f->proportional_p = 0;
1098 1121
1099 XSETFONT_INSTANCE (Vthe_null_font_instance, f); 1122 XSETFONT_INSTANCE (Vthe_null_font_instance, f);
1100 } 1123 }
1101 } 1124 }
1125
1126 void
1127 vars_of_objects (void)
1128 {
1129 reinit_vars_of_objects ();
1130 }