Skip to main content

Module static_array_emitter

Module static_array_emitter 

Source
Expand description

GlobalConstDict の静的 const 配列を Rust の static 配列定義として 出力する。

典型例: sv_inline.hbodies_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§

EmittedStaticArrays
出力結果と、正常に emit できた static 配列名の集合。 名前集合は下流の codegen で .as_ptr() 減衰判定 (is_array_like_expr) などに使う。

Functions§

emit_static_arrays
GlobalConstDict の全エントリを Rust ソースとして出力する。 要素型の StructDef が見つからない、bindings.rs に既存等の場合はスキップ。