- いままでは scheme プログラムをリストのリストに変換していたが、フラットな構造だと扱い辛いので gauche の CLOS 風オブジェクトシステムを使うことにした。
- 今のところ単なる入れ物としか使っていないけど、以下のようになった。ただの hashtable とか alist でもできるけど、やっぱりオブジェクトがあると気持ち的に楽だ。
- コンストラクタをとりあえず手続きとして定義。
- 表示のために write-object をとりあえず上書き。CL の print-unreadable-object は存在しない様子なので自分で#を書く。
(define-class <llvm-module> ()
((global-variables :init-value () :accessor global-variables-of)
(functions :init-value () :accessor functions-of)
(symbol-table-entries :init-value () :accessor symbol-table-entries-of)))
(define (make-llvm-module)
(make <llvm-module>))
(define-method write-object ((llvm-module <llvm-module>) port)
(format port "#<llvm-module: ~a>" (length (global-variables-of llvm-module))))