CCTData クラス
フィルタが C、C++両方の言語をサポートしている場合、通常1つの基底クラスとそれを継承する2つのクラス(CとC++にひとつづつ)があります。クラスは filter_init
関数によりシステムに渡されます。
例えば、最小限の宣言は以下のようになります。
class TICCTData(CCTData):
def __init__(self):
super(TICCTData, self).__init__()
class TICCTDataC(TICCTData):
def __init__(self):
super(TICCTDataC, self).__init__()
class TICCTDataCPP(TICCTData):
def __init__(self):
super(TICCTDataCPP, self).__init__()
これらのクラスの情報はそのコンパイラ特有の静的なものになる傾向があり、通常はオプションによって変化しません。
オーバーライド可能な関数
以下の関数または、プロパティは所定のフィルタに対しオーバーライドが可能です。最初の3つ(parser_extensions、compiler_behavior、 extra_defines
) の戻り値はCCTの特定のセクションに追加されます。
CCTの実施に関しては、CCTのどのセクションにテキストが現れるかは関係がありません。このように別々になっているのはCCTの可読性を増すためです。
parser_extensions
コンパイラに対するCCT設定のリストを返します。例:
@property
def parser_extensions(self):
extensions = super(TICCTDataCPP, self).parser_extensions + [
["-dpft+"],
["-duc99dilt+"],
["* special handling for __complex__."],
[
r'-coderegex'
r' "s/__complex__\s+(float|(long\s+)*double(\s+long)*)/__complex__(\1)/"'
],
compiler_behavior
コンパイラに関する様々なCCT設定を表示します。例:
extra_defines
さらなるマクロ定義を追加することができます。例:
def extra_defines(self, defines):
extra = super(TICCTDataC, self).extra_defines(defines)
extra += [
['__interrupt', ''],
['_XKEYCHECK', '1'],
['__assume(a)', None],
['_NATIVE_NULLPTR_SUPPORTED', True],
]
return extra
上記の例の値の ‘None’はマクロが空白値を持っていることを示しており、'True'は等号なしでCCTにマクロを追加することに留意してください。上記の設定は次に示す行を持つCCTを生成します。
type_mappings
GNUを使用する場合の関数の記述は以下です。
@property
def type_mappings(self):
return (
("__WCHAR_TYPE__", "wchar_t"),
("__PTRDIFF_TYPE__", "ptrdiff_t"),
("__SIZE_TYPE__", "size_t"),
)
これらのタイプに対しどの定義済みのコンパイラマクロを使用するかをシステムに示します。
additional_includes
この関数の戻り値はCCTの ADDITIONAL_INCLUDES
の値です。解析に使用されたインクルードファイルのフォルダを明示します。一般的にはサブフォルダです。
masterscript_include
この関数の戻り値はCCTのMasterScript
に対する INCLUDE_VALUE
の値です。これは、 CIP 生成スクリプトとして知られています。例えば、このCCTの戻り値は以下に示す "DATA/autocct/Script/master_script.py
" です。
* "INCLUDE_LIST" : [
* {"INCLUDE_STRUCTURE": {
* "INCLUDE_TYPE": "MasterScript",
* "INCLUDE_VALUE": "DATA/autocct/Script/master_script.py"
* }
* }],
helperscript_include
および helperscript_include2
masterscript_include
と同様に、これら2つの関数は HelperScript INCLUDE_TYPE
の値を指定します。ほとんどのCCTにはヘルパースクリプトが1つだけ用意されていますが、2つめが必要な場合は helperscript_include2
関数で記述することができます。
get_settings_file_options
CCTの同期に関する SETTINGS_FILE_OPTIONS
部分で使用される値を返します。 AUTO CCT はこの設定なしで同期を実行しますが、他の設定が用意されている場合、生成されたCCTはその同期法を使用している可能性があります。例:
@property
def get_settings_file_options(self):
return {'EXTENSION': ',', 'FLAG': '-@,--cmd_file=', 'LITERAL_QUOTES': ','}
これはファイル内で --cmd_file
を使用してオプションを指定する同期の方法です。AUTO CCT は filter_init
関数に渡された値を使用します。詳細については filter_init 関数 と filterの設定 を参照してください。
include_flags
get_settings_file_options
と同様、この設定は他の同期法に関するものです。CCTで INCLUDE_FLAGS
値を設定します。
signed_char_defines
および unsigned_char_defines
CCTにおける -u 設定(符号無しchar型)は通常定義済みのマクロ値により決定されます。このプロパティにより返された define はchar 型が符号付きかどうかを知るために使用されます。例:
unsigned_char_defines に関しては、返された define が存在し値 1を持つ場合、CCT内で -u フラグは ’true ‘と設定されます(-u+)。 コンパイラがこのように動作する define を持たない場合、オプションを処理するために Visitor クラスに プロセスを追加する必要があります。
詳細については、Visitor クラス (オプションの処理)を参照してください。
signed_bits_defines および unsigned_bits_defines
-bits 設定 (signed型ビットフィールド)は通常コマンドラインオプションをチェックすることにより実装されますが、define をチェックすることも可能です。詳細についてはVisitor クラス (オプションの処理)を参照してください。 例:
@property
def unsigned_bits_defines(self):
return ['__UBIT']
@property
def signed_bits_defines(self):
return ['__SBIT']
上記の例では、define__SBIT
が値1を持つ場合、 -bits
が有効になります。__UBIT
が値1を持つ場合、-bits
は無効になります。
size_type_map
これは、Configurator クラス の custom_size_map
と非常に類似している関数ですが、コンパイル環境へのアクセスは少ないです。CCTData の値は通常固定値でコンパイラオプションに依存しません。
この例では、コンパイラはコンパイラヘッダの型を定義するので2種類のみCCTに追加する必要があります。
@property
def size_type_map(self):
return {
"codeptr": "__SIZEOF_POINTER__",
"dataptr": "__SIZEOF_POINTER__",
}