mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-10 22:37:38 +02:00
Added Cyc_rt_raise2()
This commit is contained in:
parent
9d34f94c3f
commit
433832b5c8
2 changed files with 16 additions and 9 deletions
24
runtime.c
24
runtime.c
|
@ -189,6 +189,17 @@ void Cyc_rt_raise(object err) {
|
|||
fprintf(stderr, "Internal error in Cyc_rt_raise\n");
|
||||
exit(1);
|
||||
}
|
||||
void Cyc_rt_raise2(const char *msg, object err) {
|
||||
make_string(s, err);
|
||||
make_cons(c3, err, nil);
|
||||
make_cons(c2, &s, &c3);
|
||||
make_cons(c1, boolean_f, &c2);
|
||||
make_cons(c0, &c1, nil);
|
||||
apply(nil, Cyc_current_exception_handler(), &c0);
|
||||
// Should never get here
|
||||
fprintf(stderr, "Internal error in Cyc_rt_raise2\n");
|
||||
exit(1);
|
||||
}
|
||||
void Cyc_rt_raise_msg(const char *err) {
|
||||
make_string(s, err);
|
||||
Cyc_rt_raise(&s);
|
||||
|
@ -1197,9 +1208,7 @@ object apply(object cont, object func, object args){
|
|||
//Cyc_display(args);
|
||||
//printf("\n");
|
||||
if (!is_object_type(func)) {
|
||||
printf("Call of non-procedure: ");
|
||||
Cyc_display(func);
|
||||
exit(1);
|
||||
Cyc_rt_raise2("Call of non-procedure: ", func);
|
||||
}
|
||||
|
||||
switch(type_of(func)) {
|
||||
|
@ -1219,18 +1228,15 @@ object apply(object cont, object func, object args){
|
|||
|
||||
case cons_tag:
|
||||
{
|
||||
make_cons(c, cadr(func), args);
|
||||
|
||||
// TODO: would be better to compare directly against symbol here,
|
||||
// but need a way of looking up this symbol ahead of time.
|
||||
// maybe a libinit() or such is required.
|
||||
if (strncmp(((symbol)car(func))->pname, "primitive", 10) == 0) {
|
||||
make_cons(c, cadr(func), args);
|
||||
((closure)__glo_eval)->fn(3, __glo_eval, cont, &c, nil);
|
||||
} else {
|
||||
printf("Unable to evaluate: ");
|
||||
Cyc_display(&c);
|
||||
printf("\n");
|
||||
exit(1);
|
||||
make_cons(c, func, args);
|
||||
Cyc_rt_raise2("Unable to evaluate: ", &c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -341,6 +341,7 @@ extern object Cyc_exception_handler_stack;
|
|||
object Cyc_default_exception_handler(int argc, closure _, object err);
|
||||
object Cyc_current_exception_handler();
|
||||
void Cyc_rt_raise(object err);
|
||||
void Cyc_rt_raise2(const char *msg, object err);
|
||||
void Cyc_rt_raise_msg(const char *err);
|
||||
/* END exception handler */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue