控え
どうも最近 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) も理解が微妙。