Mercurial > emacs
comparison src/chartab.c @ 89484:5c41371d228b
(map_char_table): Protect `range' from GC.
(map_char_table_for_charset): Likewise.
author | Andreas Schwab <schwab@suse.de> |
---|---|
date | Wed, 10 Sep 2003 10:52:45 +0000 |
parents | 2f877ed80fa6 |
children | c92884b9ca4a |
comparison
equal
deleted
inserted
replaced
89483:2f877ed80fa6 | 89484:5c41371d228b |
---|---|
771 void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); | 771 void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); |
772 Lisp_Object function, table, arg; | 772 Lisp_Object function, table, arg; |
773 { | 773 { |
774 Lisp_Object range, val; | 774 Lisp_Object range, val; |
775 int c, i; | 775 int c, i; |
776 struct gcpro gcpro1; | |
776 | 777 |
777 range = Fcons (make_number (0), Qnil); | 778 range = Fcons (make_number (0), Qnil); |
779 GCPRO1 (range); | |
778 val = XCHAR_TABLE (table)->ascii; | 780 val = XCHAR_TABLE (table)->ascii; |
779 if (SUB_CHAR_TABLE_P (val)) | 781 if (SUB_CHAR_TABLE_P (val)) |
780 val = XSUB_CHAR_TABLE (val)->contents[0]; | 782 val = XSUB_CHAR_TABLE (val)->contents[0]; |
781 | 783 |
782 for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) | 784 for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) |
816 if (c_function) | 818 if (c_function) |
817 (*c_function) (arg, range, val); | 819 (*c_function) (arg, range, val); |
818 else | 820 else |
819 call2 (function, range, val); | 821 call2 (function, range, val); |
820 } | 822 } |
823 | |
824 UNGCPRO; | |
821 } | 825 } |
822 | 826 |
823 DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, | 827 DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, |
824 2, 2, 0, | 828 2, 2, 0, |
825 doc: /* | 829 doc: /* |
911 struct charset *charset; | 915 struct charset *charset; |
912 unsigned from, to; | 916 unsigned from, to; |
913 { | 917 { |
914 Lisp_Object range; | 918 Lisp_Object range; |
915 int c, i; | 919 int c, i; |
920 struct gcpro gcpro1; | |
916 | 921 |
917 range = Fcons (Qnil, Qnil); | 922 range = Fcons (Qnil, Qnil); |
923 GCPRO1 (range); | |
918 | 924 |
919 for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) | 925 for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) |
920 { | 926 { |
921 Lisp_Object this; | 927 Lisp_Object this; |
922 | 928 |
943 if (c_function) | 949 if (c_function) |
944 (*c_function) (arg, range); | 950 (*c_function) (arg, range); |
945 else | 951 else |
946 call2 (function, range, arg); | 952 call2 (function, range, arg); |
947 } | 953 } |
954 | |
955 UNGCPRO; | |
948 } | 956 } |
949 | 957 |
950 | 958 |
951 void | 959 void |
952 syms_of_chartab () | 960 syms_of_chartab () |