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");
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue