Mercurial > emacs
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 { |