This commit is contained in:
Justin Ethier 2015-03-24 17:56:52 -04:00
parent e3a0aa7dfa
commit 28cbab2644
2 changed files with 35 additions and 63 deletions

2
TODO
View file

@ -6,6 +6,8 @@ Working TODO list:
- Error handling - Error handling
need to perform much more error handling of input code. one of the biggest is to report if a function is passed the wrong number of arguments, as this will result in segfauls, bad transport errors, etc downstream if it is allowed. need to perform much more error handling of input code. one of the biggest is to report if a function is passed the wrong number of arguments, as this will result in segfauls, bad transport errors, etc downstream if it is allowed.
- Add unit tests for exception handlers, and new constructs added to lib
- Reduction in size of generated code - Reduction in size of generated code
is there anything we can do? is there anything we can do?
are closures being packed/unpacked unnecessarily? are closures being packed/unpacked unnecessarily?

View file

@ -1,34 +1,4 @@
;;; Temporary testing, delete this once it works ;;; Temporary testing, delete this once it works
;(define (call2 fn x y)
; (write
; (fn x y)))
;
;(define (call fn a)
; (fn a))
;
;(call write 'hello)
;
;;; Demonstrate sending an interpreted function to compiled code
;;; I think in order for this to work, the compiled code would have to
;;; detect an interpreted proc, and use eval to execute it
;
;;; TODO: to debug this, may try placing printfs in runtime's apply
;(eval '(call2 (lambda (x y) (+ y x)) 2 3))
;;(eval '(call (lambda (x) (+ 1 x)) (display (+ 1 1))))
;;(eval '(call write 1))
;;(eval '(call mywrite 1))
;
;(eval '(define (a x) x))
;(eval '(a 1))
;(eval '(a 1))
;(eval '(begin (define (a z) z) (a 1) (a 1)))
; TODO: demonstrates problem of using call/cc within a global.
; all globals are created with a k parameter, EG:
; ((lambda (call/cc)
; (define test
; (lambda (k$104)
;
; Need to rewrite the code to use this, and preserve the global def ; Need to rewrite the code to use this, and preserve the global def
(define (test) (define (test)
(call/cc (call/cc
@ -36,39 +6,39 @@
(return #t)))) (return #t))))
(write (test)) (write (test))
;(write (write
; (with-exception-handler (with-exception-handler
; (lambda (con) (lambda (con)
; (cond (cond
; ((string? con) ((string? con)
; (display con)) (display con))
; (else (else
; (display "a warning has been issued"))) (display "a warning has been issued")))
; 42) 42)
; (lambda () (lambda ()
; (+ (raise-continuable "should be a number") 23) (+ (raise-continuable "should be a number") 23)
; ))) )))
;;prints: should be a number ;prints: should be a number
;;=> 65 ;=> 65
;
;(write (write
; (call/cc (call/cc
; (lambda (k) (lambda (k)
; (with-exception-handler (with-exception-handler
; (lambda (x) (lambda (x)
; (display "condition: ") (display "condition: ")
; (write x) (write x)
; ;(newline) ;(newline)
; (k 'exception)) (k 'exception))
; (lambda () (lambda ()
; (+ 1 (raise 'an-error))))))) (+ 1 (raise 'an-error)))))))
;
;(with-exception-handler (with-exception-handler
; (lambda (x) (lambda (x)
; (display "something went wrong\n")) (display "something went wrong\n"))
; (lambda () (lambda ()
; (+ 1 (raise 'an-error)))) (+ 1 (raise 'an-error))))
;
;(define test '(a b)) ;(define test '(a b))
;(set-car! test '(1 2 3)) ;(set-car! test '(1 2 3))
;(write test) ;(write test)