命令ハッシュ表の構造を変更
[YACASL2.git] / src / assemble.c
index ecfe900..c9dd43b 100644 (file)
@@ -441,11 +441,9 @@ void assemble_start(const CMDLINE *cmdl, PASS pass)
     }
     /* プログラム名の設定 */
     strcpy(asptr->prog, cmdl->label);
-    /* オペランドがある場合、実行開始アドレスを設定 */
-    if(pass == SECOND && cmdl->opd->opdv[0] != NULL) {
-        if((execptr->start = getlabel(asptr->prog, cmdl->opd->opdv[0])) == 0xFFFF) {
-            setcerr(103, cmdl->opd->opdv[0]);    /* label not found */
-        }
+    /* オペランドがある場合、書き込みと実行の開始アドレスを設定 */
+    if(cmdl->opd->opdv[0] != NULL) {
+        asptr->ptr = execptr->start = getadr(asptr->prog, cmdl->opd->opdv[0], pass);
     }
 }
 
@@ -755,7 +753,6 @@ void assemble(int filec, char *filev[], WORD adr)
     PASS pass;
     WORD bp[filec];
 
-    create_cmdtype_code();                         /* 命令の名前とタイプがキーのハッシュ表を作成 */
     asptr = malloc_chk(sizeof(ASPTR), "asptr");    /* アセンブル時のプロパティ用の領域確保 */
     asptr->prog = malloc_chk(LABELSIZE + 1, "asptr.prog");
     asptr->ptr = adr;
@@ -787,9 +784,8 @@ void assemble(int filec, char *filev[], WORD adr)
         }
     }
 asfin:
-    freelabel();                                  /* ラベルハッシュ表を解放 */
-    free_cmdtype_code();                          /* 命令の名前とタイプがキーのハッシュ表を解放 */
-    FREE(asptr->prog);                            /* アセンブル時のプロパティを解放 */
+    freelabel();                              /* ラベルハッシュ表を解放 */
+    FREE(asptr->prog);                        /* アセンブル時のプロパティを解放 */
     FREE(asptr);
 }