aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2017-01-22 00:18:40 -0800
committerPaul Eggert2017-01-22 00:25:35 -0800
commit0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3 (patch)
tree34ff3896930886b9a072423fdb310d482bec283a /src
parentade0652cc2a7103cd910accda8165ff8ee7c719f (diff)
downloademacs-0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3.tar.gz
emacs-0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3.zip
Improve uses of CHECK_LIST etc.
* src/eval.c (FletX): Report an error for invalid constructs like ‘(let* (a . 0))’, so that ‘let*’ is more consistent with ‘let’. (lambda_arity): Use plain CHECK_CONS. * src/fns.c (CHECK_LIST_END): Move from here to lisp.h. (Fcopy_alist): Remove unnecessary CHECK_LIST call, since concat does that for us. (Fnthcdr, Fmember, Fmemql, Fdelete, Fnreverse): Use CHECK_LIST_END, not CHECK_LIST_CONS. This hoists a runtime check out of the loop. (Fmemq): Simplify and use CHECK_LIST_END instead of CHECK_LIST. (Fassq, Fassoc, Frassq, Frassoc): Simplify and use CHECK_LIST_END instead of CAR. (assq_no_quit, assoc_no_quit): Simplify and assume proper list. (Fnconc): Use plain CHECK_CONS, and do-while instead of while loop. * src/fontset.c (Fnew_fontset): * src/frame.c (Fmodify_frame_parameters): Use CHECK_LIST_END at end, rather than CHECK_LIST at start, for a more-complete check. * src/gfilenotify.c (Fgfile_add_watch): Omit unnecessary CHECK_LIST, since Fmember does that for us. * src/lisp.h (lisp_h_CHECK_LIST_CONS, CHECK_LIST_CONS): Remove; no longer used. (CHECK_LIST_END): New inline function.
Diffstat (limited to 'src')
-rw-r--r--src/eval.c9
-rw-r--r--src/fns.c248
-rw-r--r--src/fontset.c8
-rw-r--r--src/frame.c5
-rw-r--r--src/gfilenotify.c8
-rw-r--r--src/lisp.h6
6 files changed, 94 insertions, 190 deletions
diff --git a/src/eval.c b/src/eval.c
index c05c8d8f8de..01e3db44082 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -856,9 +856,7 @@ usage: (let* VARLIST BODY...) */)
856 856
857 lexenv = Vinternal_interpreter_environment; 857 lexenv = Vinternal_interpreter_environment;
858 858
859 varlist = XCAR (args); 859 for (varlist = XCAR (args); CONSP (varlist); varlist = XCDR (varlist))
860 CHECK_LIST (varlist);
861 while (CONSP (varlist))
862 { 860 {
863 QUIT; 861 QUIT;
864 862
@@ -894,9 +892,8 @@ usage: (let* VARLIST BODY...) */)
894 } 892 }
895 else 893 else
896 specbind (var, val); 894 specbind (var, val);
897
898 varlist = XCDR (varlist);
899 } 895 }
896 CHECK_LIST_END (varlist, XCAR (args));
900 897
901 val = Fprogn (XCDR (args)); 898 val = Fprogn (XCDR (args));
902 return unbind_to (count, val); 899 return unbind_to (count, val);
@@ -3098,7 +3095,7 @@ lambda_arity (Lisp_Object fun)
3098 if (EQ (XCAR (fun), Qclosure)) 3095 if (EQ (XCAR (fun), Qclosure))
3099 { 3096 {
3100 fun = XCDR (fun); /* Drop `closure'. */ 3097 fun = XCDR (fun); /* Drop `closure'. */
3101 CHECK_LIST_CONS (fun, fun); 3098 CHECK_CONS (fun);
3102 } 3099 }
3103 syms_left = XCDR (fun); 3100 syms_left = XCDR (fun);
3104 if (CONSP (syms_left)) 3101 if (CONSP (syms_left))
diff --git a/src/fns.c b/src/fns.c
index 00fa65886f0..c65a731f325 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -89,12 +89,6 @@ enum { QUIT_COUNT_HEURISTIC = 1 << 16 };
89 89
90/* Random data-structure functions. */ 90/* Random data-structure functions. */
91 91
92static void
93CHECK_LIST_END (Lisp_Object x, Lisp_Object y)
94{
95 CHECK_TYPE (NILP (x), Qlistp, y);
96}
97
98DEFUN ("length", Flength, Slength, 1, 1, 0, 92DEFUN ("length", Flength, Slength, 1, 1, 0,
99 doc: /* Return the length of vector, list or string SEQUENCE. 93 doc: /* Return the length of vector, list or string SEQUENCE.
100A byte-code function object is also allowed. 94A byte-code function object is also allowed.
@@ -1202,17 +1196,12 @@ are shared, however.
1202Elements of ALIST that are not conses are also shared. */) 1196Elements of ALIST that are not conses are also shared. */)
1203 (Lisp_Object alist) 1197 (Lisp_Object alist)
1204{ 1198{
1205 register Lisp_Object tem;
1206
1207 CHECK_LIST (alist);
1208 if (NILP (alist)) 1199 if (NILP (alist))
1209 return alist; 1200 return alist;
1210 alist = concat (1, &alist, Lisp_Cons, 0); 1201 alist = concat (1, &alist, Lisp_Cons, false);
1211 for (tem = alist; CONSP (tem); tem = XCDR (tem)) 1202 for (Lisp_Object tem = alist; !NILP (tem); tem = XCDR (tem))
1212 { 1203 {
1213 register Lisp_Object car; 1204 Lisp_Object car = XCAR (tem);
1214 car = XCAR (tem);
1215
1216 if (CONSP (car)) 1205 if (CONSP (car))
1217 XSETCAR (tem, Fcons (XCAR (car), XCDR (car))); 1206 XSETCAR (tem, Fcons (XCAR (car), XCDR (car)));
1218 } 1207 }
@@ -1356,16 +1345,20 @@ DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0,
1356 doc: /* Take cdr N times on LIST, return the result. */) 1345 doc: /* Take cdr N times on LIST, return the result. */)
1357 (Lisp_Object n, Lisp_Object list) 1346 (Lisp_Object n, Lisp_Object list)
1358{ 1347{
1359 EMACS_INT i, num;
1360 CHECK_NUMBER (n); 1348 CHECK_NUMBER (n);
1361 num = XINT (n); 1349 EMACS_INT num = XINT (n);
1362 for (i = 0; i < num && !NILP (list); i++) 1350 Lisp_Object tail = list;
1351 for (EMACS_INT i = 0; i < num; i++)
1363 { 1352 {
1353 if (! CONSP (tail))
1354 {
1355 CHECK_LIST_END (tail, list);
1356 return Qnil;
1357 }
1358 tail = XCDR (tail);
1364 QUIT; 1359 QUIT;
1365 CHECK_LIST_CONS (list, list);
1366 list = XCDR (list);
1367 } 1360 }
1368 return list; 1361 return tail;
1369} 1362}
1370 1363
1371DEFUN ("nth", Fnth, Snth, 2, 2, 0, 1364DEFUN ("nth", Fnth, Snth, 2, 2, 0,
@@ -1392,66 +1385,52 @@ DEFUN ("elt", Felt, Selt, 2, 2, 0,
1392DEFUN ("member", Fmember, Smember, 2, 2, 0, 1385DEFUN ("member", Fmember, Smember, 2, 2, 0,
1393 doc: /* Return non-nil if ELT is an element of LIST. Comparison done with `equal'. 1386 doc: /* Return non-nil if ELT is an element of LIST. Comparison done with `equal'.
1394The value is actually the tail of LIST whose car is ELT. */) 1387The value is actually the tail of LIST whose car is ELT. */)
1395 (register Lisp_Object elt, Lisp_Object list) 1388 (Lisp_Object elt, Lisp_Object list)
1396{ 1389{
1397 register Lisp_Object tail; 1390 Lisp_Object tail;
1398 for (tail = list; !NILP (tail); tail = XCDR (tail)) 1391 for (tail = list; CONSP (tail); tail = XCDR (tail))
1399 { 1392 {
1400 register Lisp_Object tem; 1393 if (! NILP (Fequal (elt, XCAR (tail))))
1401 CHECK_LIST_CONS (tail, list);
1402 tem = XCAR (tail);
1403 if (! NILP (Fequal (elt, tem)))
1404 return tail; 1394 return tail;
1405 QUIT; 1395 QUIT;
1406 } 1396 }
1397 CHECK_LIST_END (tail, list);
1407 return Qnil; 1398 return Qnil;
1408} 1399}
1409 1400
1410DEFUN ("memq", Fmemq, Smemq, 2, 2, 0, 1401DEFUN ("memq", Fmemq, Smemq, 2, 2, 0,
1411 doc: /* Return non-nil if ELT is an element of LIST. Comparison done with `eq'. 1402 doc: /* Return non-nil if ELT is an element of LIST. Comparison done with `eq'.
1412The value is actually the tail of LIST whose car is ELT. */) 1403The value is actually the tail of LIST whose car is ELT. */)
1413 (register Lisp_Object elt, Lisp_Object list) 1404 (Lisp_Object elt, Lisp_Object list)
1414{ 1405{
1415 while (1) 1406 Lisp_Object tail;
1407 for (tail = list; CONSP (tail); tail = XCDR (tail))
1416 { 1408 {
1417 if (!CONSP (list) || EQ (XCAR (list), elt)) 1409 if (EQ (XCAR (tail), elt))
1418 break; 1410 return tail;
1419
1420 list = XCDR (list);
1421 if (!CONSP (list) || EQ (XCAR (list), elt))
1422 break;
1423
1424 list = XCDR (list);
1425 if (!CONSP (list) || EQ (XCAR (list), elt))
1426 break;
1427
1428 list = XCDR (list);
1429 QUIT; 1411 QUIT;
1430 } 1412 }
1431 1413 CHECK_LIST_END (tail, list);
1432 CHECK_LIST (list); 1414 return Qnil;
1433 return list;
1434} 1415}
1435 1416
1436DEFUN ("memql", Fmemql, Smemql, 2, 2, 0, 1417DEFUN ("memql", Fmemql, Smemql, 2, 2, 0,
1437 doc: /* Return non-nil if ELT is an element of LIST. Comparison done with `eql'. 1418 doc: /* Return non-nil if ELT is an element of LIST. Comparison done with `eql'.
1438The value is actually the tail of LIST whose car is ELT. */) 1419The value is actually the tail of LIST whose car is ELT. */)
1439 (register Lisp_Object elt, Lisp_Object list) 1420 (Lisp_Object elt, Lisp_Object list)
1440{ 1421{
1441 register Lisp_Object tail;
1442
1443 if (!FLOATP (elt)) 1422 if (!FLOATP (elt))
1444 return Fmemq (elt, list); 1423 return Fmemq (elt, list);
1445 1424
1446 for (tail = list; !NILP (tail); tail = XCDR (tail)) 1425 Lisp_Object tail;
1426 for (tail = list; CONSP (tail); tail = XCDR (tail))
1447 { 1427 {
1448 register Lisp_Object tem; 1428 Lisp_Object tem = XCAR (tail);
1449 CHECK_LIST_CONS (tail, list);
1450 tem = XCAR (tail);
1451 if (FLOATP (tem) && internal_equal (elt, tem, 0, 0, Qnil)) 1429 if (FLOATP (tem) && internal_equal (elt, tem, 0, 0, Qnil))
1452 return tail; 1430 return tail;
1453 QUIT; 1431 QUIT;
1454 } 1432 }
1433 CHECK_LIST_END (tail, list);
1455 return Qnil; 1434 return Qnil;
1456} 1435}
1457 1436
@@ -1461,44 +1440,27 @@ The value is actually the first element of LIST whose car is KEY.
1461Elements of LIST that are not conses are ignored. */) 1440Elements of LIST that are not conses are ignored. */)
1462 (Lisp_Object key, Lisp_Object list) 1441 (Lisp_Object key, Lisp_Object list)
1463{ 1442{
1464 while (1) 1443 Lisp_Object tail;
1444 for (tail = list; CONSP (tail); tail = XCDR (tail))
1465 { 1445 {
1466 if (!CONSP (list) 1446 if (CONSP (XCAR (tail)) && EQ (XCAR (XCAR (tail)), key))
1467 || (CONSP (XCAR (list)) 1447 return XCAR (tail);
1468 && EQ (XCAR (XCAR (list)), key)))
1469 break;
1470
1471 list = XCDR (list);
1472 if (!CONSP (list)
1473 || (CONSP (XCAR (list))
1474 && EQ (XCAR (XCAR (list)), key)))
1475 break;
1476
1477 list = XCDR (list);
1478 if (!CONSP (list)
1479 || (CONSP (XCAR (list))
1480 && EQ (XCAR (XCAR (list)), key)))
1481 break;
1482
1483 list = XCDR (list);
1484 QUIT; 1448 QUIT;
1485 } 1449 }
1486 1450 CHECK_LIST_END (tail, list);
1487 return CAR (list); 1451 return Qnil;
1488} 1452}
1489 1453
1490/* Like Fassq but never report an error and do not allow quits. 1454/* Like Fassq but never report an error and do not allow quits.
1491 Use only on lists known never to be circular. */ 1455 Use only on objects known to be non-circular lists. */
1492 1456
1493Lisp_Object 1457Lisp_Object
1494assq_no_quit (Lisp_Object key, Lisp_Object list) 1458assq_no_quit (Lisp_Object key, Lisp_Object list)
1495{ 1459{
1496 while (CONSP (list) 1460 for (; ! NILP (list); list = XCDR (list))
1497 && (!CONSP (XCAR (list)) 1461 if (CONSP (XCAR (list)) && EQ (XCAR (XCAR (list)), key))
1498 || !EQ (XCAR (XCAR (list)), key))) 1462 return XCAR (list);
1499 list = XCDR (list); 1463 return Qnil;
1500
1501 return CAR_SAFE (list);
1502} 1464}
1503 1465
1504DEFUN ("assoc", Fassoc, Sassoc, 2, 2, 0, 1466DEFUN ("assoc", Fassoc, Sassoc, 2, 2, 0,
@@ -1506,81 +1468,49 @@ DEFUN ("assoc", Fassoc, Sassoc, 2, 2, 0,
1506The value is actually the first element of LIST whose car equals KEY. */) 1468The value is actually the first element of LIST whose car equals KEY. */)
1507 (Lisp_Object key, Lisp_Object list) 1469 (Lisp_Object key, Lisp_Object list)
1508{ 1470{
1509 Lisp_Object car; 1471 Lisp_Object tail;
1510 1472 for (tail = list; CONSP (tail); tail = XCDR (tail))
1511 while (1)
1512 { 1473 {
1513 if (!CONSP (list) 1474 Lisp_Object car = XCAR (tail);
1514 || (CONSP (XCAR (list)) 1475 if (CONSP (car)
1515 && (car = XCAR (XCAR (list)), 1476 && (EQ (XCAR (car), key) || !NILP (Fequal (XCAR (car), key))))
1516 EQ (car, key) || !NILP (Fequal (car, key))))) 1477 return car;
1517 break;
1518
1519 list = XCDR (list);
1520 if (!CONSP (list)
1521 || (CONSP (XCAR (list))
1522 && (car = XCAR (XCAR (list)),
1523 EQ (car, key) || !NILP (Fequal (car, key)))))
1524 break;
1525
1526 list = XCDR (list);
1527 if (!CONSP (list)
1528 || (CONSP (XCAR (list))
1529 && (car = XCAR (XCAR (list)),
1530 EQ (car, key) || !NILP (Fequal (car, key)))))
1531 break;
1532
1533 list = XCDR (list);
1534 QUIT; 1478 QUIT;
1535 } 1479 }
1536 1480 CHECK_LIST_END (tail, list);
1537 return CAR (list); 1481 return Qnil;
1538} 1482}
1539 1483
1540/* Like Fassoc but never report an error and do not allow quits. 1484/* Like Fassoc but never report an error and do not allow quits.
1541 Use only on lists known never to be circular. */ 1485 Use only on objects known to be non-circular lists. */
1542 1486
1543Lisp_Object 1487Lisp_Object
1544assoc_no_quit (Lisp_Object key, Lisp_Object list) 1488assoc_no_quit (Lisp_Object key, Lisp_Object list)
1545{ 1489{
1546 while (CONSP (list) 1490 for (; ! NILP (list); list = XCDR (list))
1547 && (!CONSP (XCAR (list)) 1491 {
1548 || (!EQ (XCAR (XCAR (list)), key) 1492 Lisp_Object car = XCAR (list);
1549 && NILP (Fequal (XCAR (XCAR (list)), key))))) 1493 if (CONSP (car)
1550 list = XCDR (list); 1494 && (EQ (XCAR (car), key) || !NILP (Fequal (XCAR (car), key))))
1551 1495 return car;
1552 return CONSP (list) ? XCAR (list) : Qnil; 1496 }
1497 return Qnil;
1553} 1498}
1554 1499
1555DEFUN ("rassq", Frassq, Srassq, 2, 2, 0, 1500DEFUN ("rassq", Frassq, Srassq, 2, 2, 0,
1556 doc: /* Return non-nil if KEY is `eq' to the cdr of an element of LIST. 1501 doc: /* Return non-nil if KEY is `eq' to the cdr of an element of LIST.
1557The value is actually the first element of LIST whose cdr is KEY. */) 1502The value is actually the first element of LIST whose cdr is KEY. */)
1558 (register Lisp_Object key, Lisp_Object list) 1503 (Lisp_Object key, Lisp_Object list)
1559{ 1504{
1560 while (1) 1505 Lisp_Object tail;
1506 for (tail = list; CONSP (tail); tail = XCDR (tail))
1561 { 1507 {
1562 if (!CONSP (list) 1508 if (CONSP (XCAR (tail)) && EQ (XCDR (XCAR (tail)), key))
1563 || (CONSP (XCAR (list)) 1509 return XCAR (tail);
1564 && EQ (XCDR (XCAR (list)), key)))
1565 break;
1566
1567 list = XCDR (list);
1568 if (!CONSP (list)
1569 || (CONSP (XCAR (list))
1570 && EQ (XCDR (XCAR (list)), key)))
1571 break;
1572
1573 list = XCDR (list);
1574 if (!CONSP (list)
1575 || (CONSP (XCAR (list))
1576 && EQ (XCDR (XCAR (list)), key)))
1577 break;
1578
1579 list = XCDR (list);
1580 QUIT; 1510 QUIT;
1581 } 1511 }
1582 1512 CHECK_LIST_END (tail, list);
1583 return CAR (list); 1513 return Qnil;
1584} 1514}
1585 1515
1586DEFUN ("rassoc", Frassoc, Srassoc, 2, 2, 0, 1516DEFUN ("rassoc", Frassoc, Srassoc, 2, 2, 0,
@@ -1588,35 +1518,17 @@ DEFUN ("rassoc", Frassoc, Srassoc, 2, 2, 0,
1588The value is actually the first element of LIST whose cdr equals KEY. */) 1518The value is actually the first element of LIST whose cdr equals KEY. */)
1589 (Lisp_Object key, Lisp_Object list) 1519 (Lisp_Object key, Lisp_Object list)
1590{ 1520{
1591 Lisp_Object cdr; 1521 Lisp_Object tail;
1592 1522 for (tail = list; CONSP (tail); tail = XCDR (tail))
1593 while (1)
1594 { 1523 {
1595 if (!CONSP (list) 1524 Lisp_Object car = XCAR (tail);
1596 || (CONSP (XCAR (list)) 1525 if (CONSP (car)
1597 && (cdr = XCDR (XCAR (list)), 1526 && (EQ (XCDR (car), key) || !NILP (Fequal (XCDR (car), key))))
1598 EQ (cdr, key) || !NILP (Fequal (cdr, key))))) 1527 return car;
1599 break;
1600
1601 list = XCDR (list);
1602 if (!CONSP (list)
1603 || (CONSP (XCAR (list))
1604 && (cdr = XCDR (XCAR (list)),
1605 EQ (cdr, key) || !NILP (Fequal (cdr, key)))))
1606 break;
1607
1608 list = XCDR (list);
1609 if (!CONSP (list)
1610 || (CONSP (XCAR (list))
1611 && (cdr = XCDR (XCAR (list)),
1612 EQ (cdr, key) || !NILP (Fequal (cdr, key)))))
1613 break;
1614
1615 list = XCDR (list);
1616 QUIT; 1528 QUIT;
1617 } 1529 }
1618 1530 CHECK_LIST_END (tail, list);
1619 return CAR (list); 1531 return Qnil;
1620} 1532}
1621 1533
1622DEFUN ("delq", Fdelq, Sdelq, 2, 2, 0, 1534DEFUN ("delq", Fdelq, Sdelq, 2, 2, 0,
@@ -1756,10 +1668,8 @@ changing the value of a sequence `foo'. */)
1756 { 1668 {
1757 Lisp_Object tail, prev; 1669 Lisp_Object tail, prev;
1758 1670
1759 for (tail = seq, prev = Qnil; !NILP (tail); tail = XCDR (tail)) 1671 for (tail = seq, prev = Qnil; CONSP (tail); tail = XCDR (tail))
1760 { 1672 {
1761 CHECK_LIST_CONS (tail, seq);
1762
1763 if (!NILP (Fequal (elt, XCAR (tail)))) 1673 if (!NILP (Fequal (elt, XCAR (tail))))
1764 { 1674 {
1765 if (NILP (prev)) 1675 if (NILP (prev))
@@ -1771,6 +1681,7 @@ changing the value of a sequence `foo'. */)
1771 prev = tail; 1681 prev = tail;
1772 QUIT; 1682 QUIT;
1773 } 1683 }
1684 CHECK_LIST_END (tail, seq);
1774 } 1685 }
1775 1686
1776 return seq; 1687 return seq;
@@ -1790,14 +1701,14 @@ This function may destructively modify SEQ to produce the value. */)
1790 { 1701 {
1791 Lisp_Object prev, tail, next; 1702 Lisp_Object prev, tail, next;
1792 1703
1793 for (prev = Qnil, tail = seq; !NILP (tail); tail = next) 1704 for (prev = Qnil, tail = seq; CONSP (tail); tail = next)
1794 { 1705 {
1795 QUIT; 1706 QUIT;
1796 CHECK_LIST_CONS (tail, tail);
1797 next = XCDR (tail); 1707 next = XCDR (tail);
1798 Fsetcdr (tail, prev); 1708 Fsetcdr (tail, prev);
1799 prev = tail; 1709 prev = tail;
1800 } 1710 }
1711 CHECK_LIST_END (tail, seq);
1801 seq = prev; 1712 seq = prev;
1802 } 1713 }
1803 else if (VECTORP (seq)) 1714 else if (VECTORP (seq))
@@ -2498,14 +2409,15 @@ usage: (nconc &rest LISTS) */)
2498 2409
2499 if (argnum + 1 == nargs) break; 2410 if (argnum + 1 == nargs) break;
2500 2411
2501 CHECK_LIST_CONS (tem, tem); 2412 CHECK_CONS (tem);
2502 2413
2503 while (CONSP (tem)) 2414 do
2504 { 2415 {
2505 tail = tem; 2416 tail = tem;
2506 tem = XCDR (tail); 2417 tem = XCDR (tail);
2507 QUIT; 2418 QUIT;
2508 } 2419 }
2420 while (CONSP (tem));
2509 2421
2510 tem = args[argnum + 1]; 2422 tem = args[argnum + 1];
2511 Fsetcdr (tail, tem); 2423 Fsetcdr (tail, tem);
diff --git a/src/fontset.c b/src/fontset.c
index 33d1d24e5b3..850558b08a0 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1677,11 +1677,10 @@ FONT-SPEC is a vector, a cons, or a string. See the documentation of
1677`set-fontset-font' for the meaning. */) 1677`set-fontset-font' for the meaning. */)
1678 (Lisp_Object name, Lisp_Object fontlist) 1678 (Lisp_Object name, Lisp_Object fontlist)
1679{ 1679{
1680 Lisp_Object fontset; 1680 Lisp_Object fontset, tail;
1681 int id; 1681 int id;
1682 1682
1683 CHECK_STRING (name); 1683 CHECK_STRING (name);
1684 CHECK_LIST (fontlist);
1685 1684
1686 name = Fdowncase (name); 1685 name = Fdowncase (name);
1687 id = fs_query_fontset (name, 0); 1686 id = fs_query_fontset (name, 0);
@@ -1714,11 +1713,11 @@ FONT-SPEC is a vector, a cons, or a string. See the documentation of
1714 Fset_char_table_range (fontset, Qt, Qnil); 1713 Fset_char_table_range (fontset, Qt, Qnil);
1715 } 1714 }
1716 1715
1717 for (; CONSP (fontlist); fontlist = XCDR (fontlist)) 1716 for (tail = fontlist; CONSP (tail); tail = XCDR (tail))
1718 { 1717 {
1719 Lisp_Object elt, script; 1718 Lisp_Object elt, script;
1720 1719
1721 elt = XCAR (fontlist); 1720 elt = XCAR (tail);
1722 script = Fcar (elt); 1721 script = Fcar (elt);
1723 elt = Fcdr (elt); 1722 elt = Fcdr (elt);
1724 if (CONSP (elt) && (NILP (XCDR (elt)) || CONSP (XCDR (elt)))) 1723 if (CONSP (elt) && (NILP (XCDR (elt)) || CONSP (XCDR (elt))))
@@ -1727,6 +1726,7 @@ FONT-SPEC is a vector, a cons, or a string. See the documentation of
1727 else 1726 else
1728 Fset_fontset_font (name, script, elt, Qnil, Qappend); 1727 Fset_fontset_font (name, script, elt, Qnil, Qappend);
1729 } 1728 }
1729 CHECK_LIST_END (tail, fontlist);
1730 return name; 1730 return name;
1731} 1731}
1732 1732
diff --git a/src/frame.c b/src/frame.c
index 2c2c1e150d4..d0f653fc762 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -2691,9 +2691,7 @@ list, but are otherwise ignored. */)
2691 (Lisp_Object frame, Lisp_Object alist) 2691 (Lisp_Object frame, Lisp_Object alist)
2692{ 2692{
2693 struct frame *f = decode_live_frame (frame); 2693 struct frame *f = decode_live_frame (frame);
2694 register Lisp_Object prop, val; 2694 Lisp_Object prop, val;
2695
2696 CHECK_LIST (alist);
2697 2695
2698 /* I think this should be done with a hook. */ 2696 /* I think this should be done with a hook. */
2699#ifdef HAVE_WINDOW_SYSTEM 2697#ifdef HAVE_WINDOW_SYSTEM
@@ -3142,6 +3140,7 @@ x_set_frame_parameters (struct frame *f, Lisp_Object alist)
3142 3140
3143 for (size = 0, tail = alist; CONSP (tail); tail = XCDR (tail)) 3141 for (size = 0, tail = alist; CONSP (tail); tail = XCDR (tail))
3144 size++; 3142 size++;
3143 CHECK_LIST_END (tail, alist);
3145 3144
3146 USE_SAFE_ALLOCA; 3145 USE_SAFE_ALLOCA;
3147 SAFE_ALLOCA_LISP (parms, 2 * size); 3146 SAFE_ALLOCA_LISP (parms, 2 * size);
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 6ec5c642825..285a253733d 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -178,20 +178,18 @@ will be reported only in case of the `moved' event. */)
178 if (NILP (Ffile_exists_p (file))) 178 if (NILP (Ffile_exists_p (file)))
179 report_file_error ("File does not exist", file); 179 report_file_error ("File does not exist", file);
180 180
181 CHECK_LIST (flags);
182
183 if (!FUNCTIONP (callback)) 181 if (!FUNCTIONP (callback))
184 wrong_type_argument (Qinvalid_function, callback); 182 wrong_type_argument (Qinvalid_function, callback);
185 183
186 /* Create GFile name. */
187 gfile = g_file_new_for_path (SSDATA (ENCODE_FILE (file)));
188
189 /* Assemble flags. */ 184 /* Assemble flags. */
190 if (!NILP (Fmember (Qwatch_mounts, flags))) 185 if (!NILP (Fmember (Qwatch_mounts, flags)))
191 gflags |= G_FILE_MONITOR_WATCH_MOUNTS; 186 gflags |= G_FILE_MONITOR_WATCH_MOUNTS;
192 if (!NILP (Fmember (Qsend_moved, flags))) 187 if (!NILP (Fmember (Qsend_moved, flags)))
193 gflags |= G_FILE_MONITOR_SEND_MOVED; 188 gflags |= G_FILE_MONITOR_SEND_MOVED;
194 189
190 /* Create GFile name. */
191 gfile = g_file_new_for_path (SSDATA (ENCODE_FILE (file)));
192
195 /* Enable watch. */ 193 /* Enable watch. */
196 monitor = g_file_monitor (gfile, gflags, NULL, &gerror); 194 monitor = g_file_monitor (gfile, gflags, NULL, &gerror);
197 g_object_unref (gfile); 195 g_object_unref (gfile);
diff --git a/src/lisp.h b/src/lisp.h
index e7747563085..7e918249935 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -310,7 +310,6 @@ error !;
310# define lisp_h_XLI(o) (o) 310# define lisp_h_XLI(o) (o)
311# define lisp_h_XIL(i) (i) 311# define lisp_h_XIL(i) (i)
312#endif 312#endif
313#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (CONSP (x), Qlistp, y)
314#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGERP (x), Qintegerp, x) 313#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGERP (x), Qintegerp, x)
315#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP (x), Qsymbolp, x) 314#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP (x), Qsymbolp, x)
316#define lisp_h_CHECK_TYPE(ok, predicate, x) \ 315#define lisp_h_CHECK_TYPE(ok, predicate, x) \
@@ -367,7 +366,6 @@ error !;
367#if DEFINE_KEY_OPS_AS_MACROS 366#if DEFINE_KEY_OPS_AS_MACROS
368# define XLI(o) lisp_h_XLI (o) 367# define XLI(o) lisp_h_XLI (o)
369# define XIL(i) lisp_h_XIL (i) 368# define XIL(i) lisp_h_XIL (i)
370# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_CONS (x, y)
371# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x) 369# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)
372# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x) 370# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)
373# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x) 371# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x)
@@ -2751,9 +2749,9 @@ CHECK_LIST (Lisp_Object x)
2751} 2749}
2752 2750
2753INLINE void 2751INLINE void
2754(CHECK_LIST_CONS) (Lisp_Object x, Lisp_Object y) 2752CHECK_LIST_END (Lisp_Object x, Lisp_Object y)
2755{ 2753{
2756 lisp_h_CHECK_LIST_CONS (x, y); 2754 CHECK_TYPE (NILP (x), Qlistp, y);
2757} 2755}
2758 2756
2759INLINE void 2757INLINE void