diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/alloc.c | 63 |
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. */ |