#endif /* NO_UNION_TYPE */
-/* If union type is not wanted, define Lisp_Object as just a number
- and define the macros below to extract fields by shifting */
+/* If union type is not wanted, define Lisp_Object as just a number. */
#ifdef NO_UNION_TYPE
-
#define Lisp_Object EMACS_INT
+#endif /* NO_UNION_TYPE */
#ifndef VALMASK
#define VALMASK ((((EMACS_INT) 1)<<VALBITS) - 1)
/* For convenience, we also store the number of elements in these bits. */
#define PSEUDOVECTOR_SIZE_MASK 0x1ff
-
-#endif /* NO_UNION_TYPE */
\f
/* These macros extract various sorts of values from a Lisp_Object.
For example, if tem is a Lisp_Object whose type is Lisp_Cons,
(((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
- and 8-bit Europeans characters. Do not follow parent. */
-#define CHAR_TABLE_REF(CT, IDX) \
- (CHAR_TABLE_P (CT) && IDX >= 0 && IDX < CHAR_TABLE_SINGLE_BYTE_SLOTS \
- ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \
- ? XCHAR_TABLE (CT)->contents[IDX] \
- : XCHAR_TABLE (CT)->defalt) \
- : Faref (CT, IDX))
+ and 8-bit Europeans characters. For these characters, do not check
+ validity of CT. Do not follow parent. */
+#define CHAR_TABLE_REF(CT, IDX) \
+ ((IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS \
+ ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \
+ ? XCHAR_TABLE (CT)->contents[IDX] \
+ : XCHAR_TABLE (CT)->defalt) \
+ : Faref (CT, make_number (IDX)))
/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
- 8-bit Europeans characters. */
-#define CHAR_TABLE_SET(CT, IDX, VAL) \
- do { \
- if (CHAR_TABLE_P (CT) && IDX >= 0 && IDX < CHAR_TABLE_SINGLE_BYTE_SLOTS) \
- XCHAR_TABLE (CT)->contents[IDX] = VAL; \
- else \
- Faset (CT, IDX, VAL); \
+ 8-bit Europeans characters. Do not check validity of CT. */
+#define CHAR_TABLE_SET(CT, IDX, VAL) \
+ do { \
+ if (XFASTINT (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS) \
+ XCHAR_TABLE (CT)->contents[XFASTINT (IDX)] = VAL; \
+ else \
+ Faset (CT, IDX, VAL); \
} while (0)
struct Lisp_Char_Table
#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
\f
+/* Variables used locally in the following case handling macros. */
+extern int case_temp1;
+extern Lisp_Object case_temp2;
+
/* Current buffer's map from characters to lower-case characters. */
-#define DOWNCASE_TABLE XCHAR_TABLE (current_buffer->downcase_table)->contents
+#define DOWNCASE_TABLE current_buffer->downcase_table
/* Current buffer's map from characters to upper-case characters. */
-#define UPCASE_TABLE XCHAR_TABLE (current_buffer->upcase_table)->contents
+#define UPCASE_TABLE current_buffer->upcase_table
/* Downcase a character, or make no change if that cannot be done. */
-#define DOWNCASE(CH) (XFASTINT (DOWNCASE_TABLE[CH]))
+#define DOWNCASE(CH) \
+ ((case_temp1 = (CH), \
+ case_temp2 = CHAR_TABLE_REF (DOWNCASE_TABLE, case_temp1), \
+ NATNUMP (case_temp2)) \
+ ? XFASTINT (case_temp2) : case_temp1)
/* 1 if CH is upper case. */
-#define UPPERCASEP(CH) (DOWNCASE(CH) != (CH))
+#define UPPERCASEP(CH) (DOWNCASE (CH) != (CH))
/* 1 if CH is neither upper nor lower case. */
-#define NOCASEP(CH) (XFASTINT (UPCASE_TABLE[CH]) == (CH))
+#define NOCASEP(CH) (UPCASE1 (CH) == (CH))
/* 1 if CH is lower case. */
/* Upcase a character known to be not upper case. */
-#define UPCASE1(CH) (XFASTINT (UPCASE_TABLE[CH]))
+#define UPCASE1(CH) \
+ ((case_temp1 = (CH), \
+ case_temp2 = CHAR_TABLE_REF (UPCASE_TABLE, case_temp1), \
+ NATNUMP (case_temp2)) \
+ ? XFASTINT (case_temp2) : case_temp1)
extern Lisp_Object Vascii_downcase_table;
\f
extern Lisp_Object Fsymbol_value (), find_symbol_value (), Fset ();
extern Lisp_Object Fdefault_value (), Fset_default (), Fdefault_boundp ();
extern Lisp_Object Fmake_local_variable ();
+extern Lisp_Object Flocal_variable_if_set_p ();
extern Lisp_Object Faref (), Faset ();
/* Defined in coding.c */
extern Lisp_Object Fcoding_system_p (), Fcheck_coding_system ();
extern Lisp_Object Fread_coding_system (), Fread_non_nil_coding_system ();
+extern Lisp_Object Ffind_coding_system ();
/* Defined in syntax.c */
extern Lisp_Object Fforward_word ();
extern Lisp_Object Ffillarray (), Fnconc (), Fmapcar (), Fmapconcat ();
extern Lisp_Object Fy_or_n_p (), do_yes_or_no_p ();
extern Lisp_Object Ffeaturep (), Frequire () , Fprovide ();
-extern Lisp_Object concat2 (), nconc2 ();
+extern Lisp_Object concat2 (), concat3 (), nconc2 ();
extern Lisp_Object assq_no_quit ();
extern Lisp_Object Fcopy_alist ();
extern Lisp_Object Fplist_get ();
extern Lisp_Object Fset_char_table_parent ();
+extern Lisp_Object Fchar_table_extra_slot ();
+extern Lisp_Object Frassoc ();
/* Defined in insdel.c */
extern void move_gap ();
extern Lisp_Object save_excursion_restore (), save_restriction_restore ();
extern Lisp_Object Fchar_to_string ();
extern Lisp_Object Fdelete_region (), Fnarrow_to_region (), Fwiden ();
+extern Lisp_Object Fuser_login_name (), Fsystem_name ();
/* defined in buffer.c */
extern Lisp_Object Foverlay_start (), Foverlay_end ();
extern Lisp_Object Fbuffer_disable_undo (), Fbuffer_enable_undo ();
extern Lisp_Object Ferase_buffer ();
extern Lisp_Object Qoverlayp;
+extern Lisp_Object get_truename_buffer ();
extern struct buffer *all_buffers;
+extern Lisp_Object Fprevious_overlay_change ();
/* defined in marker.c */
extern Lisp_Object Funhandled_file_name_directory ();
extern Lisp_Object Ffile_directory_p ();
extern Lisp_Object Fwrite_region ();
+extern Lisp_Object Ffile_readable_p (), Ffile_executable_p ();
/* Defined in abbrev.c */
/* defined in keyboard.c */
extern Lisp_Object Qdisabled;
-extern Lisp_Object Vhelp_form, Vtop_level;
+extern Lisp_Object Vtty_erase_char, Vhelp_form, Vtop_level;
extern Lisp_Object Fdiscard_input (), Frecursive_edit ();
extern Lisp_Object Fcommand_execute (), Finput_pending_p ();
extern Lisp_Object menu_bar_items ();
/* defined in indent.c */
extern Lisp_Object Fvertical_motion (), Findent_to (), Fcurrent_column ();
+extern Lisp_Object Fmove_to_column ();
/* defined in window.c */
extern Lisp_Object Qwindowp, Qwindow_live_p;
extern Lisp_Object Fset_frame_position ();
extern Lisp_Object Fraise_frame ();
extern Lisp_Object Fredirect_frame_focus ();
+extern Lisp_Object frame_buffer_list ();
/* defined in emacs.c */
extern Lisp_Object decode_env_path ();
extern Lisp_Object Fget_text_property (), Fput_text_property ();
extern Lisp_Object Fset_text_properties ();
extern Lisp_Object Ftext_property_not_all ();
+extern Lisp_Object Fprevious_char_property_change ();
+extern Lisp_Object Fnext_char_property_change ();
/* defined in intervals.c */
extern Lisp_Object get_local_map ();