~ chicken-r7rs (master) /scheme.process-context.scm
Trap1(module scheme.process-context (command-line2 emergency-exit3 exit4 get-environment-variable5 get-environment-variables)6 (import scheme7 chicken.process-context8 chicken.type9 (rename chicken.base (exit chicken-exit)))1011;;;12;;; 6.14. System interface.13;;;1415(: command-line (-> (list-of string)))16(: exit (#!optional * -> noreturn))17(: emergency-exit (#!optional * -> noreturn))1819(define (command-line)20 ;; Don't cache these; they may be parameterized at any time!21 (cons (program-name) (command-line-arguments)))2223(define (->exit-status obj)24 (cond ((integer? obj) obj)25 ((eq? obj #f) 1)26 (else 0)))2728(define exit29 (case-lambda30 (()31 (exit 0))32 ((obj)33 ;; ##sys#dynamic-unwind is hidden, have to unwind manually.34 ; (##sys#dynamic-unwind '() (length ##sys#dynamic-winds))35 (let unwind ()36 (unless (null? ##sys#dynamic-winds)37 (let ((after (cdar ##sys#dynamic-winds)))38 (set! ##sys#dynamic-winds (cdr ##sys#dynamic-winds))39 (after)40 (unwind))))41 ;; The built-in exit runs cleanup handlers for us.42 (chicken-exit (->exit-status obj)))))4344)