- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#v191128f]
#backlinks
*説明 [#e9165748]
-パス: [[gcc-8.3/gcc/target-hooks-macros.h]]
-FIXME: これは何?
--説明
--HOOK_VECTOR_1(), HOOKSTRUCT の定義により結果が全く違う。非常にわかりにくい。
---[[gcc-8.3/gcc/HOOK_VECTOR1()]]
---[[gcc-8.3/gcc/HOOKSTRUCT()]]
**引数 [#qb03cedb]
-INIT_NAME
--
-SNAME
--構造体の名前
**返り値 [#e608fbe1]
-なし、関数ではない
**参考 [#r7f08caf]
** target.h の場合 [#z7072a92]
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 {
-target.h 版: [[gcc-8.3/gcc/HOOK_VECTOR1()(target)]]
** genhooks.c の場合 [#u5863d8c]
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要素を定義するために使っている。
-genhooks.c 版: [[gcc-8.3/gcc/HOOK_VECTOR1()(genhooks)]]
*実装 [#af1c8ee3]
#define HOOK_VECTOR(INIT_NAME, SNAME) HOOK_VECTOR_1 (INIT_NAME, struct SNAME {)
-
--[[gcc-8.3/gcc/HOOK_VECTOR1()]]
*コメント [#oc5d16d8]