comparison src/bytecode.c @ 5307:c096d8051f89

Have NATNUMP give t for positive bignums; check limits appropriately. src/ChangeLog addition: 2010-11-20 Aidan Kehoe <kehoea@parhasard.net> * abbrev.c (Fexpand_abbrev): * alloc.c: * alloc.c (Fmake_list): * alloc.c (Fmake_vector): * alloc.c (Fmake_bit_vector): * alloc.c (Fmake_byte_code): * alloc.c (Fmake_string): * alloc.c (vars_of_alloc): * bytecode.c (UNUSED): * bytecode.c (Fbyte_code): * chartab.c (decode_char_table_range): * cmds.c (Fself_insert_command): * data.c (check_integer_range): * data.c (Fnatnump): * data.c (Fnonnegativep): * data.c (Fstring_to_number): * elhash.c (hash_table_size_validate): * elhash.c (decode_hash_table_size): * eval.c (Fbacktrace_frame): * event-stream.c (lisp_number_to_milliseconds): * event-stream.c (Faccept_process_output): * event-stream.c (Frecent_keys): * event-stream.c (Fdispatch_event): * events.c (Fmake_event): * events.c (Fevent_timestamp): * events.c (Fevent_timestamp_lessp): * events.h: * events.h (struct command_builder): * file-coding.c (gzip_putprop): * fns.c: * fns.c (check_sequence_range): * fns.c (Frandom): * fns.c (Fnthcdr): * fns.c (Flast): * fns.c (Fnbutlast): * fns.c (Fbutlast): * fns.c (Fmember): * fns.c (Ffill): * fns.c (Freduce): * fns.c (replace_string_range_1): * fns.c (Freplace): * font-mgr.c (Ffc_pattern_get): * frame-msw.c (msprinter_set_frame_properties): * glyphs.c (check_valid_xbm_inline): * indent.c (Fmove_to_column): * intl-win32.c (mswindows_multibyte_to_unicode_putprop): * lisp.h: * lisp.h (ARRAY_DIMENSION_LIMIT): * lread.c (decode_mode_1): * mule-ccl.c (ccl_get_compiled_code): * number.h: * process-unix.c (unix_open_multicast_group): * process.c (Fset_process_window_size): * profile.c (Fstart_profiling): * unicode.c (Funicode_to_char): Change NATNUMP to return 1 for positive bignums; changes uses of it and of CHECK_NATNUM appropriately, usually by checking for an integer in an appropriate range. Add array-dimension-limit and use it in #'make-vector, #'make-string. Add array-total-size-limit, array-rank-limit while we're at it, for the sake of any Common Lisp-oriented code that uses these limits. Rename check_int_range to check_integer_range, have it take Lisp_Objects (and thus bignums) instead. Remove bignum_butlast(), just set int_n to an appropriately large integer if N is a bignum. Accept bignums in check_sequence_range(), change the functions that use check_sequence_range() appropriately. Move the definition of NATNUMP() to number.h; document why it's a reasonable name, contradicting an old comment. tests/ChangeLog addition: 2010-11-20 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: * automated/lisp-tests.el (featurep): * automated/lisp-tests.el (wrong-type-argument): * automated/mule-tests.el (featurep): Check for args-out-of-range errors instead of wrong-type-argument errors in various places when code is handed a large bignum instead of a fixnum. Also check for the wrong-type-argument errors when giving the same code a non-integer value.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 20 Nov 2010 16:49:11 +0000
parents 9f738305f80f
children 4c4b96b13f70 8d29f1c4bb98
comparison
equal deleted inserted replaced
5306:cde1608596d0 5307:c096d8051f89
1729 1729
1730 case Bbind_multiple_value_limits: 1730 case Bbind_multiple_value_limits:
1731 { 1731 {
1732 Lisp_Object upper = POP, first = TOP, speccount; 1732 Lisp_Object upper = POP, first = TOP, speccount;
1733 1733
1734 CHECK_NATNUM (upper); 1734 check_integer_range (upper, Qzero,
1735 CHECK_NATNUM (first); 1735 make_integer (Vmultiple_values_limit));
1736 check_integer_range (first, Qzero, upper);
1736 1737
1737 speccount = make_int (bind_multiple_value_limits (XINT (first), 1738 speccount = make_int (bind_multiple_value_limits (XINT (first),
1738 XINT (upper))); 1739 XINT (upper)));
1739 PUSH (upper); 1740 PUSH (upper);
1740 PUSH (speccount); 1741 PUSH (speccount);
2755 Elemcount program_length; 2756 Elemcount program_length;
2756 Opbyte *program; 2757 Opbyte *program;
2757 2758
2758 CHECK_STRING (instructions); 2759 CHECK_STRING (instructions);
2759 CHECK_VECTOR (constants); 2760 CHECK_VECTOR (constants);
2760 CHECK_NATNUM (stack_depth); 2761 check_integer_range (stack_depth, Qzero, make_int (USHRT_MAX));
2761 2762
2762 /* Optimize the `instructions' string, just like when executing a 2763 /* Optimize the `instructions' string, just like when executing a
2763 regular compiled function, but don't save it for later since this is 2764 regular compiled function, but don't save it for later since this is
2764 likely to only be executed once. */ 2765 likely to only be executed once. */
2765 program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (instructions)); 2766 program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (instructions));