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

テストステ論

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

pycparserへの提案と実装

pycparserの開発者とは時差があるので「起きてるうちに返事くれー!」という思いが焦りを生み, タイトルからして文法が間違ってるのだが, 以下を提案しておいた. 要旨は, 「インライン関数をマクロにする処理をAST上で行いたい. マクロをパースすることは出来なくてもいいので, 書き出すことは出来て欲しい. そのためのノードが見つからないのでノードを追加したい」である.

Node to writing out macro · Issue #42 · eliben/pycparser · GitHub

1Hくらいで出来るかなと思ったのでささっとやってみた. 以下は, 昨日私が提供したAST書換に関するexampleを拡張したものの出力結果である. Afterでは, 関数内部の書換のみならず, マクロやコメントが書かれている. うん, いい.

プルリクを出してしまって議論した方がいいかな.

Before:
void func(void)
{
  x = 1;
}


FileAST:
  FuncDef:
    Decl: func, [], [], []
      FuncDecl:
        ParamList:
          Typename: []
            TypeDecl: None, []
              IdentifierType: ['void']
        TypeDecl: func, []
          IdentifierType: ['void']
    Compound:
      Assignment: =
        ID: x
        Constant: int, 1
After:
#define f(a) ((a) * 2)
/* rewrited function */
void func(void)
{
  y = 2;
}


FileAST:
  Any: #define f(a) ((a) * 2)
  Any: /* rewrited function */
  FuncDef:
    Decl: func, [], [], []
      FuncDecl:
        ParamList:
          Typename: []
            TypeDecl: None, []
              IdentifierType: ['void']
        TypeDecl: func, []
          IdentifierType: ['void']
    Compound:
      Assignment: =
        ID: y
        Constant: int, 2