… | |
… | |
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 | |
3402 | ecb_cold static void compile_expr (SCHEME_P_ stream s, pointer x); |
3403 | ecb_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); |