diff options
| author | Paul Eggert | 2011-09-25 22:50:37 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-09-25 22:50:37 -0700 |
| commit | 856bbc8152110a354293411eac5c629da9f4f74f (patch) | |
| tree | 6d41b20dbcf11043c2976a9b331d26775bce116c /src | |
| parent | 60b5d3ca2bf381f450da02e3936f7b43b7ca2dab (diff) | |
| download | emacs-856bbc8152110a354293411eac5c629da9f4f74f.tar.gz emacs-856bbc8152110a354293411eac5c629da9f4f74f.zip | |
* eval.c (Fprog1, Fprog2): Don't assume list length fits in int. Simplify.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 3 | ||||
| -rw-r--r-- | src/eval.c | 42 |
2 files changed, 9 insertions, 36 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index ff76a9a8c78..9a2590eb54e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | 2011-09-25 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2011-09-26 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 2 | ||
| 3 | * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): | 3 | * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): |
| 4 | (allocate_vectorlike, buffer_memory_full, struct sdata, SDATA_SIZE) | 4 | (allocate_vectorlike, buffer_memory_full, struct sdata, SDATA_SIZE) |
| @@ -269,6 +269,7 @@ | |||
| 269 | Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. | 269 | Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. |
| 270 | (Fapply, apply_lambda): Don't assume ptrdiff_t can hold fixnum. | 270 | (Fapply, apply_lambda): Don't assume ptrdiff_t can hold fixnum. |
| 271 | (grow_specpdl): Simplify allocation by using xpalloc. | 271 | (grow_specpdl): Simplify allocation by using xpalloc. |
| 272 | (Fprog1, Fprog2): Don't assume list length fits in int. Simplify. | ||
| 272 | * fileio.c (Ffind_file_name_handler, Fcopy_file, Frename_file) | 273 | * fileio.c (Ffind_file_name_handler, Fcopy_file, Frename_file) |
| 273 | (Finsert_file_contents, Fwrite_region, Fdo_auto_save): | 274 | (Finsert_file_contents, Fwrite_region, Fdo_auto_save): |
| 274 | Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. | 275 | Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. |
diff --git a/src/eval.c b/src/eval.c index b4ef785b3c7..257b878395e 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -373,23 +373,14 @@ usage: (prog1 FIRST BODY...) */) | |||
| 373 | Lisp_Object val; | 373 | Lisp_Object val; |
| 374 | register Lisp_Object args_left; | 374 | register Lisp_Object args_left; |
| 375 | struct gcpro gcpro1, gcpro2; | 375 | struct gcpro gcpro1, gcpro2; |
| 376 | register int argnum = 0; | ||
| 377 | |||
| 378 | if (NILP (args)) | ||
| 379 | return Qnil; | ||
| 380 | 376 | ||
| 381 | args_left = args; | 377 | args_left = args; |
| 382 | val = Qnil; | 378 | val = Qnil; |
| 383 | GCPRO2 (args, val); | 379 | GCPRO2 (args, val); |
| 384 | 380 | ||
| 385 | do | 381 | val = eval_sub (XCAR (args_left)); |
| 386 | { | 382 | while (CONSP (args_left = XCDR (args_left))) |
| 387 | Lisp_Object tem = eval_sub (XCAR (args_left)); | 383 | eval_sub (XCAR (args_left)); |
| 388 | if (!(argnum++)) | ||
| 389 | val = tem; | ||
| 390 | args_left = XCDR (args_left); | ||
| 391 | } | ||
| 392 | while (CONSP (args_left)); | ||
| 393 | 384 | ||
| 394 | UNGCPRO; | 385 | UNGCPRO; |
| 395 | return val; | 386 | return val; |
| @@ -402,31 +393,12 @@ remaining args, whose values are discarded. | |||
| 402 | usage: (prog2 FORM1 FORM2 BODY...) */) | 393 | usage: (prog2 FORM1 FORM2 BODY...) */) |
| 403 | (Lisp_Object args) | 394 | (Lisp_Object args) |
| 404 | { | 395 | { |
| 405 | Lisp_Object val; | 396 | struct gcpro gcpro1; |
| 406 | register Lisp_Object args_left; | ||
| 407 | struct gcpro gcpro1, gcpro2; | ||
| 408 | register int argnum = -1; | ||
| 409 | |||
| 410 | val = Qnil; | ||
| 411 | |||
| 412 | if (NILP (args)) | ||
| 413 | return Qnil; | ||
| 414 | |||
| 415 | args_left = args; | ||
| 416 | val = Qnil; | ||
| 417 | GCPRO2 (args, val); | ||
| 418 | 397 | ||
| 419 | do | 398 | GCPRO1 (args); |
| 420 | { | ||
| 421 | Lisp_Object tem = eval_sub (XCAR (args_left)); | ||
| 422 | if (!(argnum++)) | ||
| 423 | val = tem; | ||
| 424 | args_left = XCDR (args_left); | ||
| 425 | } | ||
| 426 | while (CONSP (args_left)); | ||
| 427 | 399 | ||
| 428 | UNGCPRO; | 400 | eval_sub (XCAR (args)); |
| 429 | return val; | 401 | RETURN_UNGCPRO (Fprog1 (XCDR (args))); |
| 430 | } | 402 | } |
| 431 | 403 | ||
| 432 | DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0, | 404 | DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0, |