diff options
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 71 |
1 files changed, 17 insertions, 54 deletions
diff --git a/src/data.c b/src/data.c index 8b8015bb002..0b46fceb298 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -113,18 +113,13 @@ Lisp_Object | |||
| 113 | wrong_type_argument (predicate, value) | 113 | wrong_type_argument (predicate, value) |
| 114 | register Lisp_Object predicate, value; | 114 | register Lisp_Object predicate, value; |
| 115 | { | 115 | { |
| 116 | register Lisp_Object tem; | 116 | /* If VALUE is not even a valid Lisp object, abort here |
| 117 | do | 117 | where we can get a backtrace showing where it came from. */ |
| 118 | { | 118 | if ((unsigned int) XGCTYPE (value) >= Lisp_Type_Limit) |
| 119 | /* If VALUE is not even a valid Lisp object, abort here | 119 | abort (); |
| 120 | where we can get a backtrace showing where it came from. */ | 120 | |
| 121 | if ((unsigned int) XGCTYPE (value) >= Lisp_Type_Limit) | 121 | Fsignal (Qwrong_type_argument, list2 (predicate, value)); |
| 122 | abort (); | ||
| 123 | 122 | ||
| 124 | value = Fsignal (Qwrong_type_argument, Fcons (predicate, Fcons (value, Qnil))); | ||
| 125 | tem = call1 (predicate, value); | ||
| 126 | } | ||
| 127 | while (NILP (tem)); | ||
| 128 | /* This function is marked as NO_RETURN, gcc would warn if it has a | 123 | /* This function is marked as NO_RETURN, gcc would warn if it has a |
| 129 | return statement or if falls off the function. Other compilers | 124 | return statement or if falls off the function. Other compilers |
| 130 | warn if no return statement is present. */ | 125 | warn if no return statement is present. */ |
| @@ -394,8 +389,7 @@ DEFUN ("arrayp", Farrayp, Sarrayp, 1, 1, 0, | |||
| 394 | (object) | 389 | (object) |
| 395 | Lisp_Object object; | 390 | Lisp_Object object; |
| 396 | { | 391 | { |
| 397 | if (VECTORP (object) || STRINGP (object) | 392 | if (ARRAYP (object)) |
| 398 | || CHAR_TABLE_P (object) || BOOL_VECTOR_P (object)) | ||
| 399 | return Qt; | 393 | return Qt; |
| 400 | return Qnil; | 394 | return Qnil; |
| 401 | } | 395 | } |
| @@ -405,8 +399,7 @@ DEFUN ("sequencep", Fsequencep, Ssequencep, 1, 1, 0, | |||
| 405 | (object) | 399 | (object) |
| 406 | register Lisp_Object object; | 400 | register Lisp_Object object; |
| 407 | { | 401 | { |
| 408 | if (CONSP (object) || NILP (object) || VECTORP (object) || STRINGP (object) | 402 | if (CONSP (object) || NILP (object) || ARRAYP (object)) |
| 409 | || CHAR_TABLE_P (object) || BOOL_VECTOR_P (object)) | ||
| 410 | return Qt; | 403 | return Qt; |
| 411 | return Qnil; | 404 | return Qnil; |
| 412 | } | 405 | } |
| @@ -536,15 +529,7 @@ Lisp concepts such as car, cdr, cons cell and list. */) | |||
| 536 | (list) | 529 | (list) |
| 537 | register Lisp_Object list; | 530 | register Lisp_Object list; |
| 538 | { | 531 | { |
| 539 | while (1) | 532 | return CAR (list); |
| 540 | { | ||
| 541 | if (CONSP (list)) | ||
| 542 | return XCAR (list); | ||
| 543 | else if (EQ (list, Qnil)) | ||
| 544 | return Qnil; | ||
| 545 | else | ||
| 546 | list = wrong_type_argument (Qlistp, list); | ||
| 547 | } | ||
| 548 | } | 533 | } |
| 549 | 534 | ||
| 550 | DEFUN ("car-safe", Fcar_safe, Scar_safe, 1, 1, 0, | 535 | DEFUN ("car-safe", Fcar_safe, Scar_safe, 1, 1, 0, |
| @@ -552,10 +537,7 @@ DEFUN ("car-safe", Fcar_safe, Scar_safe, 1, 1, 0, | |||
| 552 | (object) | 537 | (object) |
| 553 | Lisp_Object object; | 538 | Lisp_Object object; |
| 554 | { | 539 | { |
| 555 | if (CONSP (object)) | 540 | return CAR_SAFE (object); |
| 556 | return XCAR (object); | ||
| 557 | else | ||
| 558 | return Qnil; | ||
| 559 | } | 541 | } |
| 560 | 542 | ||
| 561 | DEFUN ("cdr", Fcdr, Scdr, 1, 1, 0, | 543 | DEFUN ("cdr", Fcdr, Scdr, 1, 1, 0, |
| @@ -567,15 +549,7 @@ Lisp concepts such as cdr, car, cons cell and list. */) | |||
| 567 | (list) | 549 | (list) |
| 568 | register Lisp_Object list; | 550 | register Lisp_Object list; |
| 569 | { | 551 | { |
| 570 | while (1) | 552 | return CDR (list); |
| 571 | { | ||
| 572 | if (CONSP (list)) | ||
| 573 | return XCDR (list); | ||
| 574 | else if (EQ (list, Qnil)) | ||
| 575 | return Qnil; | ||
| 576 | else | ||
| 577 | list = wrong_type_argument (Qlistp, list); | ||
| 578 | } | ||
| 579 | } | 553 | } |
| 580 | 554 | ||
| 581 | DEFUN ("cdr-safe", Fcdr_safe, Scdr_safe, 1, 1, 0, | 555 | DEFUN ("cdr-safe", Fcdr_safe, Scdr_safe, 1, 1, 0, |
| @@ -583,10 +557,7 @@ DEFUN ("cdr-safe", Fcdr_safe, Scdr_safe, 1, 1, 0, | |||
| 583 | (object) | 557 | (object) |
| 584 | Lisp_Object object; | 558 | Lisp_Object object; |
| 585 | { | 559 | { |
| 586 | if (CONSP (object)) | 560 | return CDR_SAFE (object); |
| 587 | return XCDR (object); | ||
| 588 | else | ||
| 589 | return Qnil; | ||
| 590 | } | 561 | } |
| 591 | 562 | ||
| 592 | DEFUN ("setcar", Fsetcar, Ssetcar, 2, 2, 0, | 563 | DEFUN ("setcar", Fsetcar, Ssetcar, 2, 2, 0, |
| @@ -594,9 +565,7 @@ DEFUN ("setcar", Fsetcar, Ssetcar, 2, 2, 0, | |||
| 594 | (cell, newcar) | 565 | (cell, newcar) |
| 595 | register Lisp_Object cell, newcar; | 566 | register Lisp_Object cell, newcar; |
| 596 | { | 567 | { |
| 597 | if (!CONSP (cell)) | 568 | CHECK_CONS (cell); |
| 598 | cell = wrong_type_argument (Qconsp, cell); | ||
| 599 | |||
| 600 | CHECK_IMPURE (cell); | 569 | CHECK_IMPURE (cell); |
| 601 | XSETCAR (cell, newcar); | 570 | XSETCAR (cell, newcar); |
| 602 | return newcar; | 571 | return newcar; |
| @@ -607,9 +576,7 @@ DEFUN ("setcdr", Fsetcdr, Ssetcdr, 2, 2, 0, | |||
| 607 | (cell, newcdr) | 576 | (cell, newcdr) |
| 608 | register Lisp_Object cell, newcdr; | 577 | register Lisp_Object cell, newcdr; |
| 609 | { | 578 | { |
| 610 | if (!CONSP (cell)) | 579 | CHECK_CONS (cell); |
| 611 | cell = wrong_type_argument (Qconsp, cell); | ||
| 612 | |||
| 613 | CHECK_IMPURE (cell); | 580 | CHECK_IMPURE (cell); |
| 614 | XSETCDR (cell, newcdr); | 581 | XSETCDR (cell, newcdr); |
| 615 | return newcdr; | 582 | return newcdr; |
| @@ -764,8 +731,7 @@ function with `&rest' args, or `unevalled' for a special form. */) | |||
| 764 | Lisp_Object subr; | 731 | Lisp_Object subr; |
| 765 | { | 732 | { |
| 766 | short minargs, maxargs; | 733 | short minargs, maxargs; |
| 767 | if (!SUBRP (subr)) | 734 | CHECK_SUBR (subr); |
| 768 | wrong_type_argument (Qsubrp, subr); | ||
| 769 | minargs = XSUBR (subr)->min_args; | 735 | minargs = XSUBR (subr)->min_args; |
| 770 | maxargs = XSUBR (subr)->max_args; | 736 | maxargs = XSUBR (subr)->max_args; |
| 771 | if (maxargs == MANY) | 737 | if (maxargs == MANY) |
| @@ -783,8 +749,7 @@ SUBR must be a built-in function. */) | |||
| 783 | Lisp_Object subr; | 749 | Lisp_Object subr; |
| 784 | { | 750 | { |
| 785 | const char *name; | 751 | const char *name; |
| 786 | if (!SUBRP (subr)) | 752 | CHECK_SUBR (subr); |
| 787 | wrong_type_argument (Qsubrp, subr); | ||
| 788 | name = XSUBR (subr)->symbol_name; | 753 | name = XSUBR (subr)->symbol_name; |
| 789 | return make_string (name, strlen (name)); | 754 | return make_string (name, strlen (name)); |
| 790 | } | 755 | } |
| @@ -2116,9 +2081,7 @@ bool-vector. IDX starts at 0. */) | |||
| 2116 | 2081 | ||
| 2117 | CHECK_NUMBER (idx); | 2082 | CHECK_NUMBER (idx); |
| 2118 | idxval = XINT (idx); | 2083 | idxval = XINT (idx); |
| 2119 | if (!VECTORP (array) && !STRINGP (array) && !BOOL_VECTOR_P (array) | 2084 | CHECK_ARRAY (array, Qarrayp); |
| 2120 | && ! CHAR_TABLE_P (array)) | ||
| 2121 | array = wrong_type_argument (Qarrayp, array); | ||
| 2122 | CHECK_IMPURE (array); | 2085 | CHECK_IMPURE (array); |
| 2123 | 2086 | ||
| 2124 | if (VECTORP (array)) | 2087 | if (VECTORP (array)) |