Skip to content

struct 型の変数の宣言時にenv->tagsに2回同じtag定義がpushされる #28

@programmerkgit

Description

@programmerkgit

コンパイラの学習のためこちらのプロジェクトを長い間読ませていただいています。
とても勉強になり助かっております。

読んでいるるなかで、少し自信がないのですが、もしかしたら多少の間違いかもと思った点があったので上げてみます。
(動作上の問題を起こさない些細な点であり、またすでに新しいプロジェクトに移行している中で申し訳ありませんが、もし学習のために疑問が解消できると大変助かります)

該当ファイル: 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;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions