comparison src/data.c @ 95407:8a703a3c84d7

(Fmake_variable_buffer_local, Fmake_local_variable) (Fmake_variable_frame_local): Disallow mixing buffer-local and frame-local settings for the same variable.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 30 May 2008 02:37:40 +0000
parents 0835cb21d60e
children 4f530a89d1ee
comparison
equal deleted inserted replaced
95406:ab071b8b8bf4 95407:8a703a3c84d7
1491 error ("Symbol %s may not be buffer-local", SDATA (sym->xname)); 1491 error ("Symbol %s may not be buffer-local", SDATA (sym->xname));
1492 1492
1493 if (BUFFER_OBJFWDP (valcontents)) 1493 if (BUFFER_OBJFWDP (valcontents))
1494 return variable; 1494 return variable;
1495 else if (BUFFER_LOCAL_VALUEP (valcontents)) 1495 else if (BUFFER_LOCAL_VALUEP (valcontents))
1496 newval = valcontents; 1496 {
1497 if (XBUFFER_LOCAL_VALUE (valcontents)->check_frame)
1498 error ("Symbol %s may not be buffer-local", SDATA (sym->xname));
1499 newval = valcontents;
1500 }
1497 else 1501 else
1498 { 1502 {
1499 if (EQ (valcontents, Qunbound)) 1503 if (EQ (valcontents, Qunbound))
1500 sym->value = Qnil; 1504 sym->value = Qnil;
1501 tem = Fcons (Qnil, Fsymbol_value (variable)); 1505 tem = Fcons (Qnil, Fsymbol_value (variable));
1543 1547
1544 CHECK_SYMBOL (variable); 1548 CHECK_SYMBOL (variable);
1545 sym = indirect_variable (XSYMBOL (variable)); 1549 sym = indirect_variable (XSYMBOL (variable));
1546 1550
1547 valcontents = sym->value; 1551 valcontents = sym->value;
1548 if (sym->constant || KBOARD_OBJFWDP (valcontents)) 1552 if (sym->constant || KBOARD_OBJFWDP (valcontents)
1553 || (BUFFER_LOCAL_VALUEP (valcontents)
1554 && (XBUFFER_LOCAL_VALUE (valcontents)->check_frame)))
1549 error ("Symbol %s may not be buffer-local", SDATA (sym->xname)); 1555 error ("Symbol %s may not be buffer-local", SDATA (sym->xname));
1550 1556
1551 if ((BUFFER_LOCAL_VALUEP (valcontents) 1557 if ((BUFFER_LOCAL_VALUEP (valcontents)
1552 && XBUFFER_LOCAL_VALUE (valcontents)->local_if_set) 1558 && XBUFFER_LOCAL_VALUE (valcontents)->local_if_set)
1553 || BUFFER_OBJFWDP (valcontents)) 1559 || BUFFER_OBJFWDP (valcontents))
1707 || BUFFER_OBJFWDP (valcontents)) 1713 || BUFFER_OBJFWDP (valcontents))
1708 error ("Symbol %s may not be frame-local", SDATA (sym->xname)); 1714 error ("Symbol %s may not be frame-local", SDATA (sym->xname));
1709 1715
1710 if (BUFFER_LOCAL_VALUEP (valcontents)) 1716 if (BUFFER_LOCAL_VALUEP (valcontents))
1711 { 1717 {
1712 XBUFFER_LOCAL_VALUE (valcontents)->check_frame = 1; 1718 if (!XBUFFER_LOCAL_VALUE (valcontents)->check_frame)
1719 error ("Symbol %s may not be frame-local", SDATA (sym->xname));
1713 return variable; 1720 return variable;
1714 } 1721 }
1715 1722
1716 if (EQ (valcontents, Qunbound)) 1723 if (EQ (valcontents, Qunbound))
1717 sym->value = Qnil; 1724 sym->value = Qnil;