aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c64
1 files changed, 5 insertions, 59 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 7c937332407..22a15b4ac59 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3163,19 +3163,19 @@ allocate_vector (EMACS_INT len)
3163/* Allocate other vector-like structures. */ 3163/* Allocate other vector-like structures. */
3164 3164
3165struct Lisp_Vector * 3165struct Lisp_Vector *
3166allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag) 3166allocate_pseudovector (int memlen, int lisplen,
3167 int zerolen, enum pvec_type tag)
3167{ 3168{
3168 struct Lisp_Vector *v = allocate_vectorlike (memlen); 3169 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3169 int i;
3170 3170
3171 /* Catch bogus values. */ 3171 /* Catch bogus values. */
3172 eassert (tag <= PVEC_FONT); 3172 eassert (tag <= PVEC_FONT);
3173 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1); 3173 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
3174 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1); 3174 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
3175 3175
3176 /* Only the first lisplen slots will be traced normally by the GC. */ 3176 /* Only the first lisplen slots will be traced normally by the GC.
3177 for (i = 0; i < lisplen; ++i) 3177 But since Qnil == 0, we can memset Lisp_Object slots as well. */
3178 v->contents[i] = Qnil; 3178 memset (v->contents, 0, zerolen * word_size);
3179 3179
3180 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); 3180 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3181 return v; 3181 return v;
@@ -3194,60 +3194,6 @@ allocate_buffer (void)
3194 return b; 3194 return b;
3195} 3195}
3196 3196
3197struct Lisp_Hash_Table *
3198allocate_hash_table (void)
3199{
3200 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE);
3201}
3202
3203struct window *
3204allocate_window (void)
3205{
3206 struct window *w;
3207
3208 w = ALLOCATE_PSEUDOVECTOR (struct window, current_matrix, PVEC_WINDOW);
3209 /* Users assumes that non-Lisp data is zeroed. */
3210 memset (&w->current_matrix, 0,
3211 sizeof (*w) - offsetof (struct window, current_matrix));
3212 return w;
3213}
3214
3215struct terminal *
3216allocate_terminal (void)
3217{
3218 struct terminal *t;
3219
3220 t = ALLOCATE_PSEUDOVECTOR (struct terminal, next_terminal, PVEC_TERMINAL);
3221 /* Users assumes that non-Lisp data is zeroed. */
3222 memset (&t->next_terminal, 0,
3223 sizeof (*t) - offsetof (struct terminal, next_terminal));
3224 return t;
3225}
3226
3227struct frame *
3228allocate_frame (void)
3229{
3230 struct frame *f;
3231
3232 f = ALLOCATE_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
3233 /* Users assumes that non-Lisp data is zeroed. */
3234 memset (&f->face_cache, 0,
3235 sizeof (*f) - offsetof (struct frame, face_cache));
3236 return f;
3237}
3238
3239struct Lisp_Process *
3240allocate_process (void)
3241{
3242 struct Lisp_Process *p;
3243
3244 p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
3245 /* Users assumes that non-Lisp data is zeroed. */
3246 memset (&p->pid, 0,
3247 sizeof (*p) - offsetof (struct Lisp_Process, pid));
3248 return p;
3249}
3250
3251DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0, 3197DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3252 doc: /* Return a newly created vector of length LENGTH, with each element being INIT. 3198 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3253See also the function `vector'. */) 3199See also the function `vector'. */)