Commit 420f7bbf04a9405dc5d418edb548b440406db800
- Diff rendering mode:
- inline
- side by side
src/buffer.h
(1 / 1)
|   | |||
| 858 | 858 | #define BUF_MODE_LINE_FORMAT(BUF) *find_variable_location (&((BUF)->mode_line_format_)) | |
| 859 | 859 | #define BUF_MODE_NAME(BUF) *find_variable_location (&((BUF)->mode_name_)) | |
| 860 | 860 | #define BUF_MAJOR_MODE(BUF) *find_variable_location (&((BUF)->major_mode_)) | |
| 861 | #define BUF_LOCAL_VAR_ALIST(BUF) *find_variable_location (&((BUF)->local_var_alist_)) | ||
| 861 | #define BUF_LOCAL_VAR_ALIST(BUF) (((BUF)->local_var_alist_)) | ||
| 862 | 862 | #define BUF_MARK(BUF) *find_variable_location (&((BUF)->mark_)) | |
| 863 | 863 | #define BUF_READ_ONLY(BUF) *find_variable_location (&((BUF)->read_only_)) | |
| 864 | 864 | #define BUF_AUTO_SAVE_FILE_NAME(BUF) *find_variable_location (&((BUF)->auto_save_file_name_)) |
src/data.c
(28 / 60)
|   | |||
| 814 | 814 | } | |
| 815 | 815 | ||
| 816 | 816 | Lisp_Object * | |
| 817 | blocal_get_thread_data (struct Lisp_Buffer_Local_Value *l) | ||
| 817 | blocal_get_thread_data (struct Lisp_Buffer_Local_Value *l, Lisp_Object symbol) | ||
| 818 | 818 | { | |
| 819 | 819 | Lisp_Object ret = assq_no_quit (get_current_thread (), l->thread_data); | |
| 820 | 820 | if (NILP (ret)) | |
| 821 | 821 | { | |
| 822 | Lisp_Object tem, val = Qnil, len, it, parent = Qnil; | ||
| 822 | Lisp_Object tem, val, len; | ||
| 823 | 823 | ||
| 824 | for (it = l->thread_data; !NILP (it); it = XCDR (it)) | ||
| 825 | { | ||
| 826 | Lisp_Object thread_data = XCDR (XCAR (it)); | ||
| 827 | if ((EQ (Fcurrent_buffer (), BLOCAL_BUFFER_VEC (thread_data))) | ||
| 828 | && (! l->check_frame | ||
| 829 | || EQ (selected_frame, BLOCAL_FRAME_VEC (thread_data)))) | ||
| 830 | { | ||
| 831 | Lisp_Object cdr = BLOCAL_CDR_VEC (thread_data); | ||
| 832 | parent = thread_data; | ||
| 833 | VECTORP (thread_data) || (abort (), 1); | ||
| 834 | if (EQ (XCAR (cdr), XCAR (XCAR (cdr)))) | ||
| 835 | val = XCDR (assq_no_quit (XCAR (XCAR (it)), | ||
| 836 | XTHREADLOCAL (l->realvalue)->thread_alist)); | ||
| 837 | else | ||
| 838 | val = XCDR (BLOCAL_CDR_VEC (thread_data)); | ||
| 824 | if (NILP (symbol)) | ||
| 825 | abort (); | ||
| 839 | 826 | ||
| 840 | break; | ||
| 841 | } | ||
| 842 | } | ||
| 843 | |||
| 844 | if (EQ (parent, Qnil)) | ||
| 845 | val = XTHREADLOCAL (l->realvalue)->global; | ||
| 846 | |||
| 847 | 827 | XSETFASTINT (len, 4); | |
| 848 | 828 | ret = Fmake_vector (len, Qnil); | |
| 849 | 829 | ||
| 850 | if (NILP (parent)) | ||
| 851 | XSETFASTINT (AREF (ret, 0), 0); | ||
| 830 | BLOCAL_CLEAR_FLAGS_VEC (ret); | ||
| 831 | tem = Fcons (Qnil, Qnil); | ||
| 832 | val = assq_no_quit (symbol, BUF_LOCAL_VAR_ALIST (current_buffer)); | ||
| 833 | if (NILP (val) || (l->check_frame && ! EQ (selected_frame, Qnil))) | ||
| 834 | { | ||
| 835 | val = assq_no_quit (symbol, XFRAME (selected_frame)->param_alist); | ||
| 836 | if (! NILP (val)) | ||
| 837 | BLOCAL_SET_FOUND_FOR_FRAME_VEC (ret); | ||
| 838 | else | ||
| 839 | { | ||
| 840 | val = XTHREADLOCAL (l->realvalue)->global; | ||
| 841 | XSETCAR (tem, tem); | ||
| 842 | } | ||
| 843 | } | ||
| 852 | 844 | else | |
| 853 | XSETFASTINT (AREF (ret, 0), AREF (parent, 0)); | ||
| 845 | { | ||
| 846 | XSETCAR (tem, val); | ||
| 847 | val = XCDR (val); | ||
| 848 | XSETCDR (tem, XTHREADLOCAL (l->realvalue)->global); | ||
| 849 | BLOCAL_SET_FOUND_FOR_BUFFER_VEC (ret); | ||
| 850 | } | ||
| 854 | 851 | ||
| 855 | 852 | BLOCAL_BUFFER_VEC (ret) = Fcurrent_buffer (); | |
| 856 | 853 | BLOCAL_FRAME_VEC (ret) = Qnil; | |
| 857 | |||
| 858 | tem = Fcons (Qnil, val); | ||
| 859 | XSETCAR (tem, tem); | ||
| 860 | 854 | BLOCAL_CDR_VEC (ret) = tem; | |
| 861 | 855 | ||
| 862 | 856 | ret = Fcons (get_current_thread (), ret); | |
| … | … | ||
| 1178 | 1178 | def: | |
| 1179 | 1179 | valcontents = SYMBOL_VALUE (symbol); | |
| 1180 | 1180 | if (BUFFER_LOCAL_VALUEP (valcontents)) | |
| 1181 | { | ||
| 1182 | Lisp_Object cdr = BLOCAL_CDR (XBUFFER_LOCAL_VALUE (valcontents)); | ||
| 1183 | if (EQ (XCAR (cdr), XCAR (XCAR (cdr)))) | ||
| 1184 | { | ||
| 1185 | Lisp_Object it; | ||
| 1186 | for (it = XBUFFER_LOCAL_VALUE (valcontents)->thread_data; | ||
| 1187 | !NILP (it); it = XCDR (it)) | ||
| 1188 | { | ||
| 1189 | Lisp_Object head = XCDR (XCAR (it)); | ||
| 1190 | if (EQ (BLOCAL_BUFFER (XBUFFER_LOCAL_VALUE (valcontents)), | ||
| 1191 | BLOCAL_BUFFER_VEC (head)) | ||
| 1192 | && (! XBUFFER_LOCAL_VALUE (valcontents)->check_frame | ||
| 1193 | || EQ (selected_frame, BLOCAL_FRAME_VEC (head)))) | ||
| 1194 | { | ||
| 1195 | Lisp_Object rv | ||
| 1196 | = XBUFFER_LOCAL_VALUE (valcontents)->realvalue; | ||
| 1197 | |||
| 1198 | if (EQ (XCAR (BLOCAL_CDR_VEC (head)), | ||
| 1199 | XCAR (XCAR (BLOCAL_CDR_VEC (head))))) | ||
| 1200 | Fsetcdr (assq_no_quit (XCAR (XCAR (it)), | ||
| 1201 | XTHREADLOCAL (rv)->thread_alist), | ||
| 1202 | newval); | ||
| 1203 | |||
| 1204 | XSETCDR (XCAR (BLOCAL_CDR_VEC (head)), newval); | ||
| 1205 | } | ||
| 1206 | } | ||
| 1207 | } | ||
| 1208 | BLOCAL_REALVALUE (XBUFFER_LOCAL_VALUE (valcontents)) = newval; | ||
| 1209 | } | ||
| 1181 | BLOCAL_REALVALUE (XBUFFER_LOCAL_VALUE (valcontents)) = newval; | ||
| 1210 | 1182 | else if (THREADLOCALP (valcontents)) | |
| 1211 | 1183 | { | |
| 1212 | 1184 | Lisp_Object val = indirect_variable (XSYMBOL (symbol))->value; | |
| … | … | ||
| 1228 | 1228 | { | |
| 1229 | 1229 | register Lisp_Object tem1; | |
| 1230 | 1230 | ||
| 1231 | tem1 = BLOCAL_BUFFER (XBUFFER_LOCAL_VALUE (valcontents)); | ||
| 1231 | struct Lisp_Buffer_Local_Value *local = XBUFFER_LOCAL_VALUE (valcontents); | ||
| 1232 | blocal_get_thread_data (local, symbol); | ||
| 1233 | tem1 = BLOCAL_BUFFER (local); | ||
| 1232 | 1234 | ||
| 1233 | 1235 | if (NILP (tem1) | |
| 1234 | 1236 | || current_buffer != XBUFFER (tem1) |
src/lisp.h
(3 / 2)
|   | |||
| 1366 | 1366 | }; | |
| 1367 | 1367 | ||
| 1368 | 1368 | void blocal_unbind_thread (Lisp_Object thread); | |
| 1369 | Lisp_Object *blocal_get_thread_data (struct Lisp_Buffer_Local_Value *l); | ||
| 1369 | Lisp_Object *blocal_get_thread_data (struct Lisp_Buffer_Local_Value *l, | ||
| 1370 | Lisp_Object sym); | ||
| 1370 | 1371 | void blocal_set_thread_data (struct Lisp_Buffer_Local_Value *l, Lisp_Object o); | |
| 1371 | 1372 | Lisp_Object *blocal_getrealvalue (struct Lisp_Buffer_Local_Value *l); | |
| 1372 | 1373 | ||
| … | … | ||
| 1379 | 1379 | #define BLOCAL_BUFFER_VEC(VEC) (AREF ((VEC), 1)) | |
| 1380 | 1380 | #define BLOCAL_FRAME_VEC(VEC) (AREF ((VEC), 2)) | |
| 1381 | 1381 | #define BLOCAL_CDR_VEC(VEC) (AREF ((VEC), 3)) | |
| 1382 | #define BLOCAL_THREAD_DATA(A) (*blocal_get_thread_data (A)) | ||
| 1382 | #define BLOCAL_THREAD_DATA(A) (*blocal_get_thread_data (A, Qnil)) | ||
| 1383 | 1383 | #define BLOCAL_SET_THREAD_DATA(A, B) (blocal_set_thread_data (A, B)) | |
| 1384 | 1384 | #define BLOCAL_CLEAR_FLAGS(A) (BLOCAL_CLEAR_FLAGS_VEC (BLOCAL_THREAD_DATA (A))) | |
| 1385 | 1385 | #define BLOCAL_FOUND_FOR_BUFFER(A) (BLOCAL_FOUND_FOR_BUFFER_VEC (BLOCAL_THREAD_DATA (A))) |

