ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/microscheme/scheme.c
(Generate patch)

Comparing microscheme/scheme.c (file contents):
Revision 1.67 by root, Mon Dec 7 19:49:35 2015 UTC vs.
Revision 1.68 by root, Mon Dec 7 21:12:56 2015 UTC

3394 BOP_DEFINE, 3394 BOP_DEFINE,
3395 BOP_MACRO, 3395 BOP_MACRO,
3396 BOP_SET, 3396 BOP_SET,
3397 BOP_BEGIN, 3397 BOP_BEGIN,
3398 BOP_LAMBDA, 3398 BOP_LAMBDA,
3399 BOP_DELAY,
3399 BOP_OP, 3400 BOP_OP,
3400}; 3401};
3401 3402
3402ecb_cold static void compile_expr (SCHEME_P_ stream s, pointer x); 3403ecb_cold static void compile_expr (SCHEME_P_ stream s, pointer x);
3403 3404
3522 { 3523 {
3523 pointer head = car (x); 3524 pointer head = car (x);
3524 3525
3525 if (is_syntax (head)) 3526 if (is_syntax (head))
3526 { 3527 {
3528 int syn = syntaxnum (head);
3527 x = cdr (x); 3529 x = cdr (x);
3528 3530
3529 switch (syntaxnum (head)) 3531 switch (syntaxnum (head))
3530 { 3532 {
3531 case OP_IF0: /* if */ 3533 case OP_IF0: /* if */
3554 break; 3556 break;
3555 3557
3556 case OP_LET0: /* let */ 3558 case OP_LET0: /* let */
3557 case OP_LET0AST: /* let* */ 3559 case OP_LET0AST: /* let* */
3558 case OP_LET0REC: /* letrec */ 3560 case OP_LET0REC: /* letrec */
3559 switch (syntaxnum (head)) 3561 switch (syn)
3560 { 3562 {
3561 case OP_LET0: stream_put (s, BOP_LET ); break; 3563 case OP_LET0: stream_put (s, BOP_LET ); break;
3562 case OP_LET0AST: stream_put (s, BOP_LETAST); break; 3564 case OP_LET0AST: stream_put (s, BOP_LETAST); break;
3563 case OP_LET0REC: stream_put (s, BOP_LETREC); break; 3565 case OP_LET0REC: stream_put (s, BOP_LETREC); break;
3564 } 3566 }
3603 case OP_BEGIN: /* begin */ 3605 case OP_BEGIN: /* begin */
3604 stream_put (s, BOP_BEGIN); 3606 stream_put (s, BOP_BEGIN);
3605 compile_list (SCHEME_A_ s, x); 3607 compile_list (SCHEME_A_ s, x);
3606 return; 3608 return;
3607 3609
3608 case OP_DELAY: /* delay */
3609 abort ();
3610 break;
3611
3612 case OP_QUOTE: /* quote */ 3610 case OP_QUOTE: /* quote */
3613 stream_put_tv (s, BOP_DATUM, cell_id (SCHEME_A_ x)); 3611 stream_put_tv (s, BOP_DATUM, cell_id (SCHEME_A_ x));
3614 break; 3612 break;
3615 3613
3614 case OP_DELAY: /* delay */
3616 case OP_LAMBDA: /* lambda */ 3615 case OP_LAMBDA: /* lambda */
3617 { 3616 {
3618 pointer formals = car (x); 3617 pointer formals = car (x);
3619 pointer body = cadr (x); 3618 pointer body = cadr (x);
3620 3619
3621 stream_put (s, BOP_LAMBDA); 3620 stream_put (s, syn == OP_LAMBDA ? BOP_LAMBDA : BOP_DELAY);
3622 3621
3623 for (; is_pair (formals); formals = cdr (formals)) 3622 for (; is_pair (formals); formals = cdr (formals))
3624 stream_put_v (s, symbol_id (SCHEME_A_ car (formals))); 3623 stream_put_v (s, symbol_id (SCHEME_A_ car (formals)));
3625 3624
3626 stream_put_v (s, 0); 3625 stream_put_v (s, 0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines