Skip to content
y2q-actionman edited this page Sep 24, 2014 · 10 revisions

仕様 (stub)

storage-class の実装

auto
lexical に bind. ポインタが取られていた場合は、 progv で dynamic に bind しなおす。(auto の意味的には、 dynamic-extent が欲しいが、警告が出まくるので保留。)
register
auto と同様だが、ポインタが取られていると 警告 を出す。 (現状、エラーにはしてない)。 dynamic-extent が付く。
extern
何にも展開しない。 自然にサポートされてるはず。
(global)
defvar する。
static
内部の記憶域として、 gensymdefvar する。 static 変 数の名前は、この gensym へと symbol-macrolet される。

関数の宣言は、 extern と同様の扱いとする。つまり、何もしない。

qualifier の実装

const
状況に応じて実装中。
構造体メンバ
未実装。slot の writer 関数を定義しないことで行っていたが、 slot-value にしたために出来なくなった。
普通の変数
未実装。なんとかして、コンパイル時検査で発見 するか、 closure に symbol-macrolet するか。
ポインタの指す先
未実装。 writer 関数を与えないように?
volatile
何もしていない。意味を再現するなら、処理系拡張に潜る必要 がある。そこまでする価値が見い出せない。

展開による副作用一覧

  • make-psendo-pointer による、ポインタ環境の変更
  • 関数定義すると defun される。
  • global な変数を作ると defvar される。
  • 構造体定義すると、外の関数を見に行こうとする。
Clone this wiki locally