Scheme Compiler の勉強(32)

  • いままでは 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))))