WIP - move Cyc-current-exception-handler to runtime

This commit is contained in:
Justin Ethier 2015-04-15 22:58:39 -04:00
parent 01b33d0227
commit 388d0c3017
4 changed files with 23 additions and 4 deletions

View file

@ -415,6 +415,7 @@
((eq? p '%halt) "__halt") ((eq? p '%halt) "__halt")
((eq? p 'exit) "__halt") ((eq? p 'exit) "__halt")
((eq? p 'Cyc-default-exception-handler) "Cyc_default_exception_handler") ((eq? p 'Cyc-default-exception-handler) "Cyc_default_exception_handler")
((eq? p 'Cyc-current-exception-handler) "Cyc_current_exception_handler")
((eq? p 'current-input-port) "Cyc_io_current_input_port") ((eq? p 'current-input-port) "Cyc_io_current_input_port")
((eq? p 'open-input-file) "Cyc_io_open_input_file") ((eq? p 'open-input-file) "Cyc_io_open_input_file")
((eq? p 'close-input-port) "Cyc_io_close_input_port") ((eq? p 'close-input-port) "Cyc_io_close_input_port")

View file

@ -189,6 +189,8 @@
(list 'Cyc-set-cvar! Cyc-set-cvar!) (list 'Cyc-set-cvar! Cyc-set-cvar!)
(list 'Cyc-cvar? Cyc-cvar?) (list 'Cyc-cvar? Cyc-cvar?)
(list 'Cyc-has-cycle? Cyc-has-cycle?) (list 'Cyc-has-cycle? Cyc-has-cycle?)
(list 'Cyc-default-exception-handler Cyc-default-exception-handler)
(list 'Cyc-current-exception-handler Cyc-current-exception-handler)
(list '+ +) (list '+ +)
(list '- -) (list '- -)
(list '* *) (list '* *)

View file

@ -198,6 +198,14 @@ static object Cyc_default_exception_handler(int argc, closure _, object err) {
printf("\n"); printf("\n");
exit(1); exit(1);
return nil; return nil;
// TODO: need to avoid using a global here, or add a define to shadow it for libcyclone
object Cyc_current_exception_handler() {
if (nil(__glo__85exception_91handler_91stack_85)) {
return primitive_Cyc_91default_91exception_91handler;
} else {
return __glo__85exception_91handler_91stack_85;
}
} }
/* Provide the ability to raise an exception from the C runtime. /* Provide the ability to raise an exception from the C runtime.
@ -1108,6 +1116,8 @@ static void _string_91_125number(object cont, object args) {
//static void _error(object cont, object args) { //static void _error(object cont, object args) {
// integer_type argc = Cyc_length(args); // integer_type argc = Cyc_length(args);
// dispatch_va(argc.value, dispatch_error, cont, cont, args); } // dispatch_va(argc.value, dispatch_error, cont, cont, args); }
static void _Cyc_91current_91exception_91handler(object cont, object args) {
return_funcall1(cont, Cyc_current_exception_handler()); }
static void _Cyc_91default_91exception_91handler(object cont, object args) { static void _Cyc_91default_91exception_91handler(object cont, object args) {
// TODO: this is a quick-and-dirty implementation, may be a better way to write this // TODO: this is a quick-and-dirty implementation, may be a better way to write this
Cyc_default_exception_handler(1, args, car(args)); Cyc_default_exception_handler(1, args, car(args));
@ -1172,6 +1182,10 @@ defprimitive(apply, apply, &_apply); /* apply */
defprimitive(_75halt, %halt, &__75halt); /* %halt */ defprimitive(_75halt, %halt, &__75halt); /* %halt */
defprimitive(exit, exit, &_cyc_exit); /* exit */ defprimitive(exit, exit, &_cyc_exit); /* exit */
//defprimitive(error, error, &_error); /* error */ //defprimitive(error, error, &_error); /* error */
defprimitive(
Cyc_91current_91exception_91handler,
Cyc_current_exception_handler,
&_Cyc_91current_91exception_91handler); /* Cyc-current-exception-handler */
defprimitive( defprimitive(
Cyc_91default_91exception_91handler, Cyc_91default_91exception_91handler,
Cyc_default_exception_handler, Cyc_default_exception_handler,

View file

@ -214,10 +214,10 @@
(define (Cyc-remove-exception-handler) (define (Cyc-remove-exception-handler)
(if (not (null? *exception-handler-stack*)) (if (not (null? *exception-handler-stack*))
(set! *exception-handler-stack* (cdr *exception-handler-stack*)))) (set! *exception-handler-stack* (cdr *exception-handler-stack*))))
(define (Cyc-current-exception-handler) ; (define (Cyc-current-exception-handler)
(if (null? *exception-handler-stack*) ; (if (null? *exception-handler-stack*)
Cyc-default-exception-handler ; Cyc-default-exception-handler
(car *exception-handler-stack*))) ; (car *exception-handler-stack*)))
)) ))
;; Built-in macros ;; Built-in macros
@ -699,6 +699,7 @@
%halt %halt
exit exit
Cyc-default-exception-handler Cyc-default-exception-handler
Cyc-current-exception-handler
cons cons
cell-get cell-get
set-global! set-global!
@ -766,6 +767,7 @@
%halt %halt
exit exit
Cyc-default-exception-handler Cyc-default-exception-handler
Cyc-current-exception-handler
cell-get cell-get
set-global! set-global!
set-cell! set-cell!