Added Cyc_rt_raise2()

This commit is contained in:
Justin Ethier 2015-06-03 22:06:31 -04:00
parent 9d34f94c3f
commit 433832b5c8
2 changed files with 16 additions and 9 deletions

View file

@ -189,6 +189,17 @@ void Cyc_rt_raise(object err) {
fprintf(stderr, "Internal error in Cyc_rt_raise\n"); fprintf(stderr, "Internal error in Cyc_rt_raise\n");
exit(1); 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) { void Cyc_rt_raise_msg(const char *err) {
make_string(s, err); make_string(s, err);
Cyc_rt_raise(&s); Cyc_rt_raise(&s);
@ -1197,9 +1208,7 @@ object apply(object cont, object func, object args){
//Cyc_display(args); //Cyc_display(args);
//printf("\n"); //printf("\n");
if (!is_object_type(func)) { if (!is_object_type(func)) {
printf("Call of non-procedure: "); Cyc_rt_raise2("Call of non-procedure: ", func);
Cyc_display(func);
exit(1);
} }
switch(type_of(func)) { switch(type_of(func)) {
@ -1219,18 +1228,15 @@ object apply(object cont, object func, object args){
case cons_tag: case cons_tag:
{ {
make_cons(c, cadr(func), args);
// TODO: would be better to compare directly against symbol here, // TODO: would be better to compare directly against symbol here,
// but need a way of looking up this symbol ahead of time. // but need a way of looking up this symbol ahead of time.
// maybe a libinit() or such is required. // maybe a libinit() or such is required.
if (strncmp(((symbol)car(func))->pname, "primitive", 10) == 0) { 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); ((closure)__glo_eval)->fn(3, __glo_eval, cont, &c, nil);
} else { } else {
printf("Unable to evaluate: "); make_cons(c, func, args);
Cyc_display(&c); Cyc_rt_raise2("Unable to evaluate: ", &c);
printf("\n");
exit(1);
} }
} }

View file

@ -341,6 +341,7 @@ extern object Cyc_exception_handler_stack;
object Cyc_default_exception_handler(int argc, closure _, object err); object Cyc_default_exception_handler(int argc, closure _, object err);
object Cyc_current_exception_handler(); object Cyc_current_exception_handler();
void Cyc_rt_raise(object err); void Cyc_rt_raise(object err);
void Cyc_rt_raise2(const char *msg, object err);
void Cyc_rt_raise_msg(const char *err); void Cyc_rt_raise_msg(const char *err);
/* END exception handler */ /* END exception handler */