aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorJoakim Verona2012-08-19 02:44:11 +0200
committerJoakim Verona2012-08-19 02:44:11 +0200
commit5436d1df5e2ba0b4d4f72b03a1cd09b20403654b (patch)
tree532faa27319b3bb199d414dc85e63a58246d30b0 /src/lisp.h
parentd02344322b0d2fea8dd9ad9dd0a6c70e058f967b (diff)
parente757f1c6f393cf82057dbee0a4325b07f0fd55c4 (diff)
downloademacs-5436d1df5e2ba0b4d4f72b03a1cd09b20403654b.tar.gz
emacs-5436d1df5e2ba0b4d4f72b03a1cd09b20403654b.zip
upstream
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h136
1 files changed, 110 insertions, 26 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 90705f51ddb..fea5ac0c768 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -928,7 +928,7 @@ enum
928 8-bit European characters. Do not check validity of CT. */ 928 8-bit European characters. Do not check validity of CT. */
929#define CHAR_TABLE_SET(CT, IDX, VAL) \ 929#define CHAR_TABLE_SET(CT, IDX, VAL) \
930 (ASCII_CHAR_P (IDX) && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii) \ 930 (ASCII_CHAR_P (IDX) && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii) \
931 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] = VAL \ 931 ? set_sub_char_table_contents (XCHAR_TABLE (CT)->ascii, IDX, VAL) \
932 : char_table_set (CT, IDX, VAL)) 932 : char_table_set (CT, IDX, VAL))
933 933
934enum CHARTAB_SIZE_BITS 934enum CHARTAB_SIZE_BITS
@@ -941,8 +941,6 @@ enum CHARTAB_SIZE_BITS
941 941
942extern const int chartab_size[4]; 942extern const int chartab_size[4];
943 943
944struct Lisp_Sub_Char_Table;
945
946struct Lisp_Char_Table 944struct Lisp_Char_Table
947 { 945 {
948 /* HEADER.SIZE is the vector's size field, which also holds the 946 /* HEADER.SIZE is the vector's size field, which also holds the
@@ -991,6 +989,7 @@ struct Lisp_Sub_Char_Table
991 /* Minimum character covered by the sub char-table. */ 989 /* Minimum character covered by the sub char-table. */
992 Lisp_Object min_char; 990 Lisp_Object min_char;
993 991
992 /* Use set_sub_char_table_contents to set this. */
994 Lisp_Object contents[1]; 993 Lisp_Object contents[1];
995 }; 994 };
996 995
@@ -1472,14 +1471,6 @@ struct Lisp_Buffer_Local_Value
1472 Lisp_Object valcell; 1471 Lisp_Object valcell;
1473 }; 1472 };
1474 1473
1475#define BLV_FOUND(blv) \
1476 (eassert ((blv)->found == !EQ ((blv)->defcell, (blv)->valcell)), (blv)->found)
1477#define SET_BLV_FOUND(blv, v) \
1478 (eassert ((v) == !EQ ((blv)->defcell, (blv)->valcell)), (blv)->found = (v))
1479
1480#define BLV_VALUE(blv) (XCDR ((blv)->valcell))
1481#define SET_BLV_VALUE(blv, v) (XSETCDR ((blv)->valcell, v))
1482
1483/* Like Lisp_Objfwd except that value lives in a slot in the 1474/* Like Lisp_Objfwd except that value lives in a slot in the
1484 current kboard. */ 1475 current kboard. */
1485struct Lisp_Kboard_Objfwd 1476struct Lisp_Kboard_Objfwd
@@ -1758,15 +1749,18 @@ typedef struct {
1758#define CHECK_WINDOW_CONFIGURATION(x) \ 1749#define CHECK_WINDOW_CONFIGURATION(x) \
1759 CHECK_TYPE (WINDOW_CONFIGURATIONP (x), Qwindow_configuration_p, x) 1750 CHECK_TYPE (WINDOW_CONFIGURATIONP (x), Qwindow_configuration_p, x)
1760 1751
1761/* This macro rejects windows on the interior of the window tree as 1752/* A window of any sort, leaf or interior, is "valid" if one of its
1762 "dead", which is what we want; this is an argument-checking macro, and 1753 buffer, vchild, or hchild members is non-nil. */
1763 the user should never get access to interior windows. 1754#define CHECK_VALID_WINDOW(x) \
1764 1755 CHECK_TYPE (WINDOWP (x) \
1765 A window of any sort, leaf or interior, is dead if the buffer, 1756 && (!NILP (XWINDOW (x)->buffer) \
1766 vchild, and hchild members are all nil. */ 1757 || !NILP (XWINDOW (x)->vchild) \
1767 1758 || !NILP (XWINDOW (x)->hchild)), \
1768#define CHECK_LIVE_WINDOW(x) \ 1759 Qwindow_valid_p, x)
1769 CHECK_TYPE (WINDOWP (x) && !NILP (XWINDOW (x)->buffer), \ 1760
1761/* A window is "live" if and only if it shows a buffer. */
1762#define CHECK_LIVE_WINDOW(x) \
1763 CHECK_TYPE (WINDOWP (x) && !NILP (XWINDOW (x)->buffer), \
1770 Qwindow_live_p, x) 1764 Qwindow_live_p, x)
1771 1765
1772#define CHECK_PROCESS(x) \ 1766#define CHECK_PROCESS(x) \
@@ -2412,6 +2406,52 @@ set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next)
2412 XSYMBOL (sym)->next = next; 2406 XSYMBOL (sym)->next = next;
2413} 2407}
2414 2408
2409/* Buffer-local (also frame-local) variable access functions. */
2410
2411LISP_INLINE int
2412blv_found (struct Lisp_Buffer_Local_Value *blv)
2413{
2414 eassert (blv->found == !EQ (blv->defcell, blv->valcell));
2415 return blv->found;
2416}
2417
2418LISP_INLINE void
2419set_blv_found (struct Lisp_Buffer_Local_Value *blv, int found)
2420{
2421 eassert (found == !EQ (blv->defcell, blv->valcell));
2422 blv->found = found;
2423}
2424
2425LISP_INLINE Lisp_Object
2426blv_value (struct Lisp_Buffer_Local_Value *blv)
2427{
2428 return XCDR (blv->valcell);
2429}
2430
2431LISP_INLINE void
2432set_blv_value (struct Lisp_Buffer_Local_Value *blv, Lisp_Object val)
2433{
2434 XSETCDR (blv->valcell, val);
2435}
2436
2437LISP_INLINE void
2438set_blv_where (struct Lisp_Buffer_Local_Value *blv, Lisp_Object val)
2439{
2440 blv->where = val;
2441}
2442
2443LISP_INLINE void
2444set_blv_defcell (struct Lisp_Buffer_Local_Value *blv, Lisp_Object val)
2445{
2446 blv->defcell = val;
2447}
2448
2449LISP_INLINE void
2450set_blv_valcell (struct Lisp_Buffer_Local_Value *blv, Lisp_Object val)
2451{
2452 blv->valcell = val;
2453}
2454
2415/* Set overlay's property list. */ 2455/* Set overlay's property list. */
2416 2456
2417LISP_INLINE void 2457LISP_INLINE void
@@ -2423,7 +2463,7 @@ set_overlay_plist (Lisp_Object overlay, Lisp_Object plist)
2423/* Get text properties of S. */ 2463/* Get text properties of S. */
2424 2464
2425LISP_INLINE INTERVAL 2465LISP_INLINE INTERVAL
2426string_get_intervals (Lisp_Object s) 2466string_intervals (Lisp_Object s)
2427{ 2467{
2428 return XSTRING (s)->intervals; 2468 return XSTRING (s)->intervals;
2429} 2469}
@@ -2431,11 +2471,57 @@ string_get_intervals (Lisp_Object s)
2431/* Set text properties of S to I. */ 2471/* Set text properties of S to I. */
2432 2472
2433LISP_INLINE void 2473LISP_INLINE void
2434string_set_intervals (Lisp_Object s, INTERVAL i) 2474set_string_intervals (Lisp_Object s, INTERVAL i)
2435{ 2475{
2436 XSTRING (s)->intervals = i; 2476 XSTRING (s)->intervals = i;
2437} 2477}
2438 2478
2479/* Set a Lisp slot in TABLE to VAL. Most code should use this instead
2480 of setting slots directly. */
2481
2482LISP_INLINE void
2483set_char_table_ascii (Lisp_Object table, Lisp_Object val)
2484{
2485 XCHAR_TABLE (table)->ascii = val;
2486}
2487LISP_INLINE void
2488set_char_table_defalt (Lisp_Object table, Lisp_Object val)
2489{
2490 XCHAR_TABLE (table)->defalt = val;
2491}
2492LISP_INLINE void
2493set_char_table_parent (Lisp_Object table, Lisp_Object val)
2494{
2495 XCHAR_TABLE (table)->parent = val;
2496}
2497LISP_INLINE void
2498set_char_table_purpose (Lisp_Object table, Lisp_Object val)
2499{
2500 XCHAR_TABLE (table)->purpose = val;
2501}
2502
2503/* Set different slots in (sub)character tables. */
2504
2505LISP_INLINE void
2506set_char_table_extras (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
2507{
2508 eassert (0 <= idx && idx < CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (table)));
2509 XCHAR_TABLE (table)->extras[idx] = val;
2510}
2511
2512LISP_INLINE void
2513set_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
2514{
2515 eassert (0 <= idx && idx < (1 << CHARTAB_SIZE_BITS_0));
2516 XCHAR_TABLE (table)->contents[idx] = val;
2517}
2518
2519LISP_INLINE void
2520set_sub_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
2521{
2522 XSUB_CHAR_TABLE (table)->contents[idx] = val;
2523}
2524
2439/* Defined in data.c. */ 2525/* Defined in data.c. */
2440extern Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound; 2526extern Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound;
2441extern Lisp_Object Qerror_conditions, Qerror_message, Qtop_level; 2527extern Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
@@ -2657,7 +2743,6 @@ _Noreturn void __executable_start (void);
2657#endif 2743#endif
2658extern Lisp_Object selected_frame; 2744extern Lisp_Object selected_frame;
2659extern Lisp_Object Vwindow_system; 2745extern Lisp_Object Vwindow_system;
2660void duration_to_sec_usec (double, int *, int *);
2661extern Lisp_Object sit_for (Lisp_Object, int, int); 2746extern Lisp_Object sit_for (Lisp_Object, int, int);
2662extern void init_display (void); 2747extern void init_display (void);
2663extern void syms_of_display (void); 2748extern void syms_of_display (void);
@@ -2835,9 +2920,8 @@ extern Lisp_Object copy_char_table (Lisp_Object);
2835extern Lisp_Object char_table_ref (Lisp_Object, int); 2920extern Lisp_Object char_table_ref (Lisp_Object, int);
2836extern Lisp_Object char_table_ref_and_range (Lisp_Object, int, 2921extern Lisp_Object char_table_ref_and_range (Lisp_Object, int,
2837 int *, int *); 2922 int *, int *);
2838extern Lisp_Object char_table_set (Lisp_Object, int, Lisp_Object); 2923extern void char_table_set (Lisp_Object, int, Lisp_Object);
2839extern Lisp_Object char_table_set_range (Lisp_Object, int, int, 2924extern void char_table_set_range (Lisp_Object, int, int, Lisp_Object);
2840 Lisp_Object);
2841extern int char_table_translate (Lisp_Object, int); 2925extern int char_table_translate (Lisp_Object, int);
2842extern void map_char_table (void (*) (Lisp_Object, Lisp_Object, 2926extern void map_char_table (void (*) (Lisp_Object, Lisp_Object,
2843 Lisp_Object), 2927 Lisp_Object),