Visitor クラス (オプションの処理)
すべての関数はOptionクラスのインスタンスであるオプションパラメータを取得します。 このクラスのfilterで使用されるプロパティは以下です。
- txt: オプションすべてを文字列で表します。
- args: オプションの引数を一覧表示します。多くの場合、最初の項目のみを検索します。
visitor のフィルタは QAVisitor
または、GNUベースの場合、GNU機能を使用したい場合はQAGNUVisitor
のいずれかから継承します。
デフォルトのパーサオプション
visitor クラスのコンストラクタにいくつかのデフォルトオプションを指定することができます。例えば、このクラスはGNU Visitor
から継承し、値のリストをこのコンパイラ用に修正します。
class QAWindRiverVisitor(QAGnuVisitor):
def __init__(self):
debug("QAWindRiverVisitor::__init__()")
super(QAWindRiverVisitor, self).__init__()
# GNUと同じ parser_options だが、 -ex dollar -なし
self._qac_parser_options = {'bits': False, 'u': False}
後に更新される場合の除き、このCCTはCCTで生成された以下の行を持ちます。
-u のデフォルト値が -u+ になるはずである場合、False は True に置換されます。
この例は、C言語のCCTに対するオプションのみのリストを生成します。その他のメンバ変数は C++ CCTを生成するのに使用される _qacpp_parser_options
です。
オプションの処理
オプションに処理を加えるには、'visit' を名前に使いその後にアンダースコアを続けて記述を始める関数をVisitorクラスに追加します。 オプションの先頭に使用されているマイナスサインを除き、その他のマイナスサインはアンダースコアに置換してください。
例えば、--signed-bitfields
オプションを処理するには GNUの visitor は以下のように記述します。
使用中の言語のオプションリストに _set_option
がある場合、このオプションへの呼出しはオプションを有効にします。
デフォルトの初期値のないオプションの設定には、以下の例に示すように _set_option_always
オプションを使用します。
ファイル名の入力および、ファイルの無視
コマンドラインにインプットしたファイル名すべてに対し関数 visit_input_file_name
が呼出されます。通常、CCTジェネレータにアセンブラ処理を無視させるために使用します。例:
def visit_input_file_name(self, option):
if option.txt.upper().endswith('.S'):
# armclang の例にはアセンブラ用の .S ファイルがある
debug("ArmClang filter stopping for assembly file: " + option.txt)
self.visit_stop_after_preprocess(option)
else:
super(QAArmClangVisitor, self).visit_input_file_name(option)
関数 visit_stop_after_preprocess
はこの関数以降のコマンドラインのプロセスを停止します。
オプションのエイリアス
QAVistorから継承するときのエイリアスのリストの設定法は以下です。
class _QARenesasVisitor(QAVisitor):
_aliases = {
# cc-rh は Xpreincludeを使用。 cc-rl は preincludeを使用。
'preinclude': ['Xpreinclude'],
}
visitor クラスのフィルタが QAGNUVisitor
から継承する場合、add_alias
関数を使用してデフォルトリストを追加することができます。
このフィルタは -Xbit-fields-signed
オプションがある時に visit_signed_bitfields
コードを実行します。
使用するオプションはすべて non_gnu_options
パラメータの filter_init
関数に加える必要がることに留意してください。
filter_init(
"DIAB",
non_gnu_options={
'Xbit-fields-signed': [0],
'Xdollar-in-ident': [0],
'Xpreprocess-assembly': [0],
},
)
visitor クラスが GNU Visitor
から継承しない場合、オプションを指定する代わりに compiler_options
設定を使用することができます。その場合、デフォルトのGNUオプションへの追加ではなくオプションの完全なリストが使用可能です。