読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(macro-of-inline) 与えられたファイルに対してインライン関数をマクロ化することに成功

usage: macro-of-inline [-h] [-i I] [-o O]

optional arguments:
  -h, --help  show this help message and exit
  -i I        input (default:-)
  -o O        output (default:-)

プロトタイプから, 整理しました. macro-of-inlineというコマンド, あとはrewrite_file, rewrite_funというモジュールに分割.

ファイルへの適用は, 以下のようにしました. FileAST以下のものがインライン関数ならば, RewriteFunに変換させて, 結果によってノードを置換する.

               parser = c_parser.CParser()
                ast = parser.parse(self.text)

                for i, n in enumerate(ast.ext):
                        if isinstance(n, c_ast.FuncDef):
                                if 'inline' in n.decl.funcspec:
                                        runner = rewrite_fun.RewriteFun(n)
                                        runner.run()
                                        ast.ext[i] = runner.returnAST()
  • inlineじゃないものは展開しない.
  • void返しじゃないものは展開しない.

という感じで動作しているのだと思います. 提案中のノードクラスに依存していますから, 心地よくマージされるのを祈るしかないです.