;;;; symbol-access.scm -*- Scheme -*- ;;;; Kon Lovett, Jul '18 (declare (bound-to-procedure ##sys#symbol-has-toplevel-binding?)) (module symbol-access (;export ; global-symbol-bound? global-symbol-ref ; *toplevel-module-symbol* split-prefixed-symbol) (import scheme (chicken base) (chicken fixnum) (chicken type) (only (srfi 13) string-drop string-take string-index)) ;;; Raw Access Renames (define (global-symbol-bound? sym) (##sys#symbol-has-toplevel-binding? sym)) (define (global-symbol-ref sym) (##sys#slot sym 0)) ;;; Toplevel Symbols (define *toplevel-module-symbol* '||) (define *toplevel-module-string* (symbol->string *toplevel-module-symbol*)) (: split-prefixed-symbol (symbol --> string string)) ; (define (split-prefixed-symbol sym) (let* ( (str (symbol->string sym)) ;assume # not part of module name (-right would mean # not part of symbol) ;so cannot handle qualified symbols (idx (string-index str #\#)) (mod (if idx (string-take str idx) *toplevel-module-string*)) (nam (if idx (string-drop str (fx+ 1 idx)) str)) ) ; (values mod nam) ) ) ) ;module symbol-access