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/eval.c | |
| 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/eval.c')
| -rw-r--r-- | src/eval.c | 42 |
1 files changed, 7 insertions, 35 deletions
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, |