ID (4)

ID は 229 = 約 500M と言ったな、あれは嘘だ。というわけで、4 bit フラグで使っていたので、228 = 268,435,456 = 約 250M 個でした。

下 1 ビットは、ID_STATIC_SYM というフラグを埋め込むためのものみたいだけど、知らないなあ。今度調べます。

ID の種類の話。これは 3bit = 最大 8 通り。ID は、パーサで使うことがあるので、この ID で表されるシンボルが、どのような種類であるかがわかっていると便利。というわけで、id_type(ID) を使う。

さらに、こんな感じのマクロで情報が取れる。

#define is_local_id(id) (id_type(id)==ID_LOCAL)
#define is_global_id(id) (id_type(id)==ID_GLOBAL)
#define is_instance_id(id) (id_type(id)==ID_INSTANCE)
#define is_attrset_id(id) ((id)==idASET||id_type(id)==ID_ATTRSET)
#define is_const_id(id) (id_type(id)==ID_CONST)
#define is_class_id(id) (id_type(id)==ID_CLASS)
#define is_junk_id(id) (id_type(id)==ID_JUNK)

ローカル変数だったり、グローバル変数だったり、インスタンス変数だったりが、ID 値に埋め込まれている。 しかし、この辺、パーサはさっと取れると、そりゃいいだろうけど、別の構造に入れてもいいよなぁ。その分、ID の数を増やした方が良いと思うのだが...。