… | |
… | |
3923 | |
3923 | |
3924 | case OP_REAL_APPLY: |
3924 | case OP_REAL_APPLY: |
3925 | #endif |
3925 | #endif |
3926 | if (is_proc (SCHEME_V->code)) |
3926 | if (is_proc (SCHEME_V->code)) |
3927 | s_goto (procnum (SCHEME_V->code)); /* PROCEDURE */ |
3927 | s_goto (procnum (SCHEME_V->code)); /* PROCEDURE */ |
3928 | else if (is_foreign (SCHEME_V->code)) |
|
|
3929 | { |
|
|
3930 | /* Keep nested calls from GC'ing the arglist */ |
|
|
3931 | push_recent_alloc (SCHEME_A_ args, NIL); |
|
|
3932 | x = CELL(SCHEME_V->code)->object.ff (SCHEME_A_ args); |
|
|
3933 | |
|
|
3934 | s_return (x); |
|
|
3935 | } |
|
|
3936 | else if (is_closure (SCHEME_V->code) || is_macro (SCHEME_V->code) || is_promise (SCHEME_V->code)) /* CLOSURE */ |
3928 | else if (is_closure (SCHEME_V->code) || is_macro (SCHEME_V->code) || is_promise (SCHEME_V->code)) /* CLOSURE */ |
3937 | { |
3929 | { |
3938 | /* Should not accept promise */ |
3930 | /* Should not accept promise */ |
3939 | /* make environment */ |
3931 | /* make environment */ |
3940 | new_frame_in_env (SCHEME_A_ closure_env (SCHEME_V->code)); |
3932 | new_frame_in_env (SCHEME_A_ closure_env (SCHEME_V->code)); |
… | |
… | |
3966 | } |
3958 | } |
3967 | else if (is_continuation (SCHEME_V->code)) /* CONTINUATION */ |
3959 | else if (is_continuation (SCHEME_V->code)) /* CONTINUATION */ |
3968 | { |
3960 | { |
3969 | ss_set_cont (SCHEME_A_ cont_dump (SCHEME_V->code)); |
3961 | ss_set_cont (SCHEME_A_ cont_dump (SCHEME_V->code)); |
3970 | s_return (args != NIL ? car (args) : NIL); |
3962 | s_return (args != NIL ? car (args) : NIL); |
|
|
3963 | } |
|
|
3964 | else if (is_foreign (SCHEME_V->code)) |
|
|
3965 | { |
|
|
3966 | /* Keep nested calls from GC'ing the arglist */ |
|
|
3967 | push_recent_alloc (SCHEME_A_ args, NIL); |
|
|
3968 | x = CELL(SCHEME_V->code)->object.ff (SCHEME_A_ args); |
|
|
3969 | |
|
|
3970 | s_return (x); |
3971 | } |
3971 | } |
3972 | |
3972 | |
3973 | Error_0 ("illegal function"); |
3973 | Error_0 ("illegal function"); |
3974 | |
3974 | |
3975 | case OP_DOMACRO: /* do macro */ |
3975 | case OP_DOMACRO: /* do macro */ |