-
Notifications
You must be signed in to change notification settings - Fork 157
Open
Description
コンパイラの学習のためこちらのプロジェクトを長い間読ませていただいています。
とても勉強になり助かっております。
読んでいるるなかで、少し自信がないのですが、もしかしたら多少の間違いかもと思った点があったので上げてみます。
(動作上の問題を起こさない些細な点であり、またすでに新しいプロジェクトに移行している中で申し訳ありませんが、もし学習のために疑問が解消できると大変助かります)
該当ファイル: parse.c
行: 201 ~ 202
parse.cのdecl_specifiers()201~202行目のtag定義の追加に関する部分です。
新しくstructを定義した場合だでなく、既存のstruct型の変数を宣言した場合にも env->tagsにtagが追加され、同じ定義のtagが二度env->tagsにpushされることになるように思います。動作には問題ないはずですが、意図したものか気になりました。
コード
static Type *decl_specifiers() {
Token *t = tokens->data[pos++];
....省略...
if (t->ty == TK_STRUCT) {
Token *t = tokens->data[pos];
Type *ty = NULL;
char *tag = NULL;
if (t->ty == TK_IDENT) {
pos++;
tag = t->name;
ty = find_tag(tag);
}
....省略...
if (tag) // <= 201行目: ここの条件に、初の定義であることのような条件が必要なように思っています
map_put(env->tags, tag, ty);
return ty;
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels