aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer1994-11-18 02:31:20 +0000
committerKarl Heuer1994-11-18 02:31:20 +0000
commitd6dd74bbaebbecd566b09783333d4c5aee60c83b (patch)
tree363ac3c2aed851427c0af3985c4217354149d9b4 /src
parentd60858a687dc2146c79bb394b112b46f6488bc93 (diff)
downloademacs-d6dd74bbaebbecd566b09783333d4c5aee60c83b.tar.gz
emacs-d6dd74bbaebbecd566b09783333d4c5aee60c83b.zip
(Fpurecopy): Use type test macros.
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c63
1 files changed, 23 insertions, 40 deletions
diff --git a/src/alloc.c b/src/alloc.c
index e8c137bb4ed..02587c6d906 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1127,9 +1127,6 @@ Does not copy symbols.")
1127 (obj) 1127 (obj)
1128 register Lisp_Object obj; 1128 register Lisp_Object obj;
1129{ 1129{
1130 register Lisp_Object new, tem;
1131 register int i;
1132
1133 if (NILP (Vpurify_flag)) 1130 if (NILP (Vpurify_flag))
1134 return obj; 1131 return obj;
1135 1132
@@ -1137,47 +1134,33 @@ Does not copy symbols.")
1137 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) 1134 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure)
1138 return obj; 1135 return obj;
1139 1136
1140#ifdef SWITCH_ENUM_BUG 1137 if (CONSP (obj))
1141 switch ((int) XTYPE (obj)) 1138 return pure_cons (XCONS (obj)->car, XCONS (obj)->cdr);
1142#else
1143 switch (XTYPE (obj))
1144#endif
1145 {
1146 case Lisp_Misc:
1147 switch (XMISC (obj)->type)
1148 {
1149 case Lisp_Misc_Marker:
1150 error ("Attempt to copy a marker to pure storage");
1151
1152 default:
1153 abort ();
1154 }
1155
1156 case Lisp_Cons:
1157 return pure_cons (XCONS (obj)->car, XCONS (obj)->cdr);
1158
1159#ifdef LISP_FLOAT_TYPE 1139#ifdef LISP_FLOAT_TYPE
1160 case Lisp_Float: 1140 else if (FLOATP (obj))
1161 return make_pure_float (XFLOAT (obj)->data); 1141 return make_pure_float (XFLOAT (obj)->data);
1162#endif /* LISP_FLOAT_TYPE */ 1142#endif /* LISP_FLOAT_TYPE */
1163 1143 else if (STRINGP (obj))
1164 case Lisp_String: 1144 return make_pure_string (XSTRING (obj)->data, XSTRING (obj)->size);
1165 return make_pure_string (XSTRING (obj)->data, XSTRING (obj)->size); 1145 else if (COMPILEDP (obj) || VECTORP (obj))
1166 1146 {
1167 case Lisp_Compiled: 1147 register struct Lisp_Vector *vec;
1168 case Lisp_Vector: 1148 register int i, size;
1169 new = make_pure_vector (XVECTOR (obj)->size); 1149
1170 for (i = 0; i < XVECTOR (obj)->size; i++) 1150 size = XVECTOR (obj)->size;
1171 { 1151 vec = XVECTOR (make_pure_vector (size));
1172 tem = XVECTOR (obj)->contents[i]; 1152 for (i = 0; i < size; i++)
1173 XVECTOR (new)->contents[i] = Fpurecopy (tem); 1153 vec->contents[i] = Fpurecopy (XVECTOR (obj)->contents[i]);
1174 } 1154 if (COMPILEDP (obj))
1175 XSETTYPE (new, XTYPE (obj)); 1155 XSETCOMPILED (obj, vec);
1176 return new; 1156 else
1177 1157 XSETVECTOR (obj, vec);
1178 default:
1179 return obj; 1158 return obj;
1180 } 1159 }
1160 else if (MARKERP (obj))
1161 error ("Attempt to copy a marker to pure storage");
1162 else
1163 return obj;
1181} 1164}
1182 1165
1183/* Recording what needs to be marked for gc. */ 1166/* Recording what needs to be marked for gc. */