控え
どうも最近 gdgd 傾向がナニ。いかんなぁ。読み方が微妙なんでしょうか。
と、言いつつ今日も gdgd な深夜なのでメモのみ。
ぢつは
gencomp の compile-toplevel-form 手続きの核心部分で、ちょっと長いですが以下なソレにひっカカり。
(('define (? symbol? name) ('lambda args . body)) (let* ((closure (compile-toplevel-lambda form name args body (compile-module))) (code (cgen-literal (closure-code closure))) (var (cgen-literal name))) (cgen-init (format " Scm_Define(mod, SCM_SYMBOL(~a), Scm_MakeClosure(~a, NULL));" (cgen-cexpr var) (cgen-cexpr code)))) seed) (else (let1 compiled-code (compile form (compile-module)) ;; We exclude a compiled code with only CONSTU-RET, which appears ;; as the result of macro expansion sometimes. (if (toplevel-constu-ret-code? compiled-code) seed (cons (cgen-literal (compile form (compile-module))) seed)))) )))
cgen-cexpr か cgen-literal とか。あと closure にナニしてる手続きとか。
あと、上記 else にヒッカカるナニをきちんと確認しておきたいです。
もう少し
getter-with-setter も。
(define (getter-with-setter get set) (let ((proc (lambda x (apply get x)))) (set! (setter proc) set) proc))
get に束縛されるのは ref する手続き。
gosh> (ref ref 'methods) (#<method (ref <string> <integer>)> #<method (ref <vector> <integer>)> #<method (ref <list> <integer>)> #<method (ref <hash-table> <top> <top>)> #<method (ref <hash-table> <top>)> #<method (ref <top> <symbol>)>) gosh>
あるいは setter って何か
gosh> setter #<subr setter> gosh> (d setter) #<subr setter> is an instance of class <procedure> slots: required : 1 optional : #f locked : #t info : "setter" setter : #<subr (setter setter)> gosh>
locked という属性 (slot) も理解が微妙。