Expand description
GlobalConstDict の静的 const 配列を Rust の static 配列定義として
出力する。
典型例: sv_inline.h の bodies_by_type[] を Perl_newSV_type 等で
参照可能にするため、Rust 側で同じ初期値の static を生成する。
元の C コードでは static const (翻訳単位ローカル) なので、別 TU 相当
として独自にデータを持つことに意味論的な問題はない。
§翻訳ルール
各 initializer エントリ(無名 compound { a, b, c, ... })を struct
literal に変換する。位置順なので、対応する StructDef.members の名前
を順に取り出して body_details { body_size: a, copy: b, ... } の形式に
整形する。
Bitfield 連続グループは値を pack して _bitfield_N: ((v0 as u8) & mask0) | ((v1 as u8) << shift1) | ... の形で 1 つのフィールドにまとめる。
各値の式翻訳は translate_const_expr で行う。マクロは preprocessor
で展開済みのため、+, -, *, ?:, cast, sizeof, __builtin_offsetof
など純粋な C 式のみを扱えば良い。
Structs§
- Emitted
Static Arrays - 出力結果と、正常に emit できた static 配列名の集合。
名前集合は下流の codegen で
.as_ptr()減衰判定 (is_array_like_expr) などに使う。
Functions§
- emit_
static_ arrays GlobalConstDictの全エントリを Rust ソースとして出力する。 要素型の StructDef が見つからない、bindings.rs に既存等の場合はスキップ。