comparison src/keymap.c @ 31496:946e1ba42cc9

(Fset_keymap_parent): Check for cycles in keymap inheritance.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 08 Sep 2000 13:30:03 +0000
parents 5213900983ed
children 43566b0aec59
comparison
equal deleted inserted replaced
31495:1cec17cdcff1 31496:946e1ba42cc9
305 } 305 }
306 306
307 return Qnil; 307 return Qnil;
308 } 308 }
309 309
310
310 /* Set the parent keymap of MAP to PARENT. */ 311 /* Set the parent keymap of MAP to PARENT. */
311 312
312 DEFUN ("set-keymap-parent", Fset_keymap_parent, Sset_keymap_parent, 2, 2, 0, 313 DEFUN ("set-keymap-parent", Fset_keymap_parent, Sset_keymap_parent, 2, 2, 0,
313 "Modify KEYMAP to set its parent map to PARENT.\n\ 314 "Modify KEYMAP to set its parent map to PARENT.\n\
314 PARENT should be nil or another keymap.") 315 PARENT should be nil or another keymap.")
321 322
322 keymap = get_keymap_1 (keymap, 1, 1); 323 keymap = get_keymap_1 (keymap, 1, 1);
323 GCPRO1 (keymap); 324 GCPRO1 (keymap);
324 325
325 if (!NILP (parent)) 326 if (!NILP (parent))
326 parent = get_keymap_1 (parent, 1, 1); 327 {
328 Lisp_Object k;
329
330 parent = get_keymap_1 (parent, 1, 1);
331
332 /* Check for cycles. */
333 k = parent;
334 while (KEYMAPP (k) && !EQ (keymap, k))
335 k = Fkeymap_parent (k);
336 if (EQ (keymap, k))
337 error ("Cyclic keymap inheritance");
338 }
327 339
328 /* Skip past the initial element `keymap'. */ 340 /* Skip past the initial element `keymap'. */
329 prev = keymap; 341 prev = keymap;
330 while (1) 342 while (1)
331 { 343 {