入出力時のエラー条件を変更
[YACASL2.git] / src / assemble.c
index 8b3aa61..fc7aed1 100644 (file)
@@ -394,9 +394,7 @@ bool cometcmd(const CMDLINE *cmdl, PASS pass)
         /* オペランド数2または3。第2オペランドはアドレス、 */
         /* 第3オペランドは指標レジスタとして用いる汎用レジスタ */
         else if(cmdl->opd->opdc == 2 || cmdl->opd->opdc == 3) {
-            if((cmd = getcmdcode(cmdl->cmd, R_ADR_X_)) == 0xFFFF &&
-               (cmd = getcmdcode(cmdl->cmd, R_ADR_X)) == 0xFFFF)
-            {
+            if((cmd = getcmdcode(cmdl->cmd, R_ADR_X)) == 0xFFFF) {
                 setcerr(110, cmdl->cmd);    /* not command of operand "r,adr[,x]" */
                 return false;
             }
@@ -636,19 +634,20 @@ void addcerrlist_assemble()
 
 /**
  * 指定された名前のファイルをアセンブル
- * 2回実行される
+ * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
+ * アセンブル完了時はtrue、エラー発生時はfalseを返す
  */
-bool assemble(const char *file, PASS pass)
+bool assemblefile(const char *file, PASS pass)
 {
     int lineno = 0;
-    bool status = true;
-    char *line = malloc_chk(LINESIZE + 1, "assemble.line");
+    char *line;
     FILE *fp;
 
     if((fp = fopen(file, "r")) == NULL) {
         perror(file);
         return false;
     }
+    line = malloc_chk(LINESIZE + 1, "assemble.line");
     while(fgets(line, LINESIZE, fp)) {
         lineno++;
         if((pass == FIRST && asmode.src == true) ||
@@ -663,11 +662,10 @@ bool assemble(const char *file, PASS pass)
     if(cerr->num > 0) {
         fprintf(stderr, "Assemble error - %d: %s\n", cerr->num, cerr->msg);
         printline(stderr, file, lineno, line);
-        status = false;
     }
     FREE(line);
     fclose(fp);
-    return status;
+    return (cerr->num == 0) ? true : false;
 }
 
 /**