aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorTom Tromey2013-06-03 12:25:05 -0600
committerTom Tromey2013-06-03 12:25:05 -0600
commit68359abba96d7ec4db8aab3d3dd9cf1105c3bab5 (patch)
tree862703e7e1a1888170136a8296a5750d6b2ae2eb /src/data.c
parentcbcba8ce7f980b01c18c0fd561ef6687b1361507 (diff)
parente2d8a6f0a229b4ebe26484b892ec4f14888f58b6 (diff)
downloademacs-68359abba96d7ec4db8aab3d3dd9cf1105c3bab5.tar.gz
emacs-68359abba96d7ec4db8aab3d3dd9cf1105c3bab5.zip
merge from trunk; clean up some issues
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c62
1 files changed, 15 insertions, 47 deletions
diff --git a/src/data.c b/src/data.c
index 8a66cbe9197..c6cb1b43dd6 100644
--- a/src/data.c
+++ b/src/data.c
@@ -101,9 +101,10 @@ wrong_type_argument (register Lisp_Object predicate, register Lisp_Object value)
101} 101}
102 102
103void 103void
104pure_write_error (void) 104pure_write_error (Lisp_Object obj)
105{ 105{
106 error ("Attempt to modify read-only object"); 106 Fsignal (Qerror, Fcons (build_string ("Attempt to modify read-only object"),
107 Fcons (obj, Qnil)));
107} 108}
108 109
109void 110void
@@ -1106,40 +1107,6 @@ DEFUN ("set", Fset, Sset, 2, 2, 0,
1106 return newval; 1107 return newval;
1107} 1108}
1108 1109
1109/* Return true if SYMBOL currently has a let-binding
1110 which was made in the buffer that is now current. */
1111
1112static bool
1113let_shadows_buffer_binding_p (struct Lisp_Symbol *symbol)
1114{
1115 struct specbinding *p;
1116
1117 for (p = specpdl_ptr; p > specpdl; )
1118 if ((--p)->func == NULL
1119 && CONSP (p->symbol))
1120 {
1121 struct Lisp_Symbol *let_bound_symbol = XSYMBOL (XCAR (p->symbol));
1122 eassert (let_bound_symbol->redirect != SYMBOL_VARALIAS);
1123 if (symbol == let_bound_symbol
1124 && XBUFFER (XCDR (XCDR (p->symbol))) == current_buffer)
1125 return 1;
1126 }
1127
1128 return 0;
1129}
1130
1131static bool
1132let_shadows_global_binding_p (Lisp_Object symbol)
1133{
1134 struct specbinding *p;
1135
1136 for (p = specpdl_ptr; p > specpdl; )
1137 if ((--p)->func == NULL && EQ (p->symbol, symbol))
1138 return 1;
1139
1140 return 0;
1141}
1142
1143/* Store the value NEWVAL into SYMBOL. 1110/* Store the value NEWVAL into SYMBOL.
1144 If buffer/frame-locality is an issue, WHERE specifies which context to use. 1111 If buffer/frame-locality is an issue, WHERE specifies which context to use.
1145 (nil stands for the current buffer/frame). 1112 (nil stands for the current buffer/frame).
@@ -1878,17 +1845,18 @@ BUFFER defaults to the current buffer. */)
1878 XSETBUFFER (tmp, buf); 1845 XSETBUFFER (tmp, buf);
1879 XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ 1846 XSETSYMBOL (variable, sym); /* Update in case of aliasing. */
1880 1847
1881 for (tail = BVAR (buf, local_var_alist); CONSP (tail); tail = XCDR (tail)) 1848 if (EQ (blv->where, tmp)) /* The binding is already loaded. */
1882 { 1849 return blv_found (blv) ? Qt : Qnil;
1883 elt = XCAR (tail); 1850 else
1884 if (EQ (variable, XCAR (elt))) 1851 for (tail = BVAR (buf, local_var_alist); CONSP (tail); tail = XCDR (tail))
1885 { 1852 {
1886 eassert (!blv->frame_local); 1853 elt = XCAR (tail);
1887 eassert (blv_found (blv) || !EQ (blv->where, tmp)); 1854 if (EQ (variable, XCAR (elt)))
1888 return Qt; 1855 {
1889 } 1856 eassert (!blv->frame_local);
1890 } 1857 return Qt;
1891 eassert (!blv_found (blv) || !EQ (blv->where, tmp)); 1858 }
1859 }
1892 return Qnil; 1860 return Qnil;
1893 } 1861 }
1894 case SYMBOL_FORWARDED: 1862 case SYMBOL_FORWARDED: