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 の数を増やした方が良いと思うのだが...。