参照元

説明

引数

返り値

参考

target.h の場合

HOOK_VECTOR は構造体の定義を宣言するために使われる。

/* The target structure.  This holds all the backend hooks.  */
#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS;
#define DEFHOOK_UNDOC DEFHOOK
#define HOOKSTRUCT(FRAGMENT) FRAGMENT        //★★★★(2)

#include "target.def"

HOOK_VECTOR_1 は未定義のまま target.def をインクルードする。

target.def

#include "target-hooks-macros.h"

#undef HOOK_TYPE
#define HOOK_TYPE "Target Hook"

HOOK_VECTOR (TARGET_INITIALIZER, gcc_target)

target-hooks-macros.h

/* HOOK_VECTOR: Start a struct declaration, which then gets its own initializer.
   HOOK_VECTOR_END: Close a struct declaration, providing a member declarator
                    name for nested use.  */
#ifndef HOOK_VECTOR_1
#define HOOK_VECTOR_1(NAME, FRAGMENT) HOOKSTRUCT (FRAGMENT)        //★★★★(1)
#endif

となっているため、

HOOK_VECTOR (TARGET_INITIALIZER, gcc_target)
↓ 定義より
HOOK_VECTOR_1(TARGET_INITIALIZER, struct gcc_target {)
↓ (1) より
HOOKSTRUCT (struct gcc_target{)
↓ (2) より
struct gcc_target {

genhooks.c の場合

HOOK_VECTOR は static struct hook_desc hook_array[] の 1要素を定義するために使われる。

#define HOOK_VECTOR_1(NAME, FRAGMENT)	\
  { 0, 0, #NAME, 0, 0, HOOK_TYPE },        //★★★★(1)

//...

#include "target.def"

target.def

#include "target-hooks-macros.h"

#undef HOOK_TYPE
#define HOOK_TYPE "Target Hook"

HOOK_VECTOR (TARGET_INITIALIZER, gcc_target)

となっているため、

HOOK_VECTOR (TARGET_INITIALIZER, gcc_target)
↓ 定義より
HOOK_VECTOR_1(TARGET_INITIALIZER, struct gcc_target {)
↓ (1) より
{ 0, 0, "TARGET_INITIALIZER", 0, 0, HOOK_TYPE },

となる。target.def の周りはこのような構造体の定義になっているため、

struct hook_desc { const char *doc, *type, *name, *param, *init, *docname; };
static struct hook_desc hook_array[] = {

//...

#include "target.def"
#include "c-family/c-target.def"
#include "common/common-target.def"
#undef DEFHOOK
};

HOOK_VECTOR は hook_array の 1要素を定義するために使っている。

実装

#define HOOK_VECTOR(INIT_NAME, SNAME) HOOK_VECTOR_1 (INIT_NAME, struct SNAME {)

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-10 (金) 17:59:36