X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fassemble.c;h=d8d8bc61be4fe83061e556dc49d61efee28cfc27;hp=aff53809399c3e3fb006bd4e9dea191749e7b0a3;hb=7b6d89e7273b49e335af425cbb1ecb2258bf15df;hpb=7bcf04ca8bb891da3922776fbb0aa62a0030043c diff --git a/src/assemble.c b/src/assemble.c index aff5380..d8d8bc6 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -112,7 +112,7 @@ WORD getliteral(const char *str, PASS pass) /** * アセンブラ命令をメモリに書込 - * 実行に成功した場合はtrue、それ以外の場合はfalseを返す + * アセンブラ命令の場合はtrue、それ以外の場合はfalseを返す */ bool assemblecmd(const CMDLINE *cmdl, PASS pass) { @@ -130,7 +130,7 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) if(strcmp(cmdl->cmd, ascmd[i].cmd) == 0) { if(cmdl->opd->opdc < ascmd[i].opdc_min || cmdl->opd->opdc > ascmd[i].opdc_max) { setcerr(106, NULL); /* operand count mismatch */ - return false; + return true; } cmdid = ascmd[i].cmdid; break; @@ -142,7 +142,7 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) case START: if(cmdl->label == NULL) { setcerr(107, NULL); /* no label in START */ - return false; + return true; } /* プログラム名の設定 */ asptr->prog = strdup_chk(cmdl->label, "asptr.prog"); @@ -183,13 +183,13 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) default: return false; } - return (cerr->num == 0) ? true : false; + return true; } /** * macrocmd - * マクロ命令をメモリに書込 - * 書込に成功した場合はtrue、それ以外の場合はfalseを返す + * マクロ命令をメモリに書込 + * マクロ命令の場合はtrue、それ以外の場合はfalseを返す */ bool macrocmd(const CMDLINE *cmdl, PASS pass) { @@ -209,7 +209,7 @@ bool macrocmd(const CMDLINE *cmdl, PASS pass) cmdl->opd->opdc > macrocmd[i].opdc_max) { setcerr(106, NULL); /* operand count mismatch */ - return false; + return true; } cmdid = macrocmd[i].cmdid; break; @@ -219,19 +219,20 @@ bool macrocmd(const CMDLINE *cmdl, PASS pass) { case IN: writeIN(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass); - return true; + break; case OUT: writeOUT(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass); - return true; + break; case RPUSH: writeRPUSH(pass); - return true; + break; case RPOP: writeRPOP(pass); - return true; + break; default: return false; } + return true; } /** @@ -502,32 +503,18 @@ void writeDC(const char *str, PASS pass) */ bool assembletok(const CMDLINE *cmdl, PASS pass) { - bool status = false; - /* 命令がない場合 */ if(cmdl->cmd == NULL){ - ; - } - /* アセンブラ命令の処理 */ - else if(cerr->num == 0 && assemblecmd(cmdl, pass) == true) { - ; - } - /* マクロ命令の書込 */ - else if(cerr->num == 0 && macrocmd(cmdl, pass) == true) { - ; - } - /* 機械語命令の書込 */ - else if(cerr->num == 0 && cometcmd(cmdl, pass) == true) { - ; - } - else if(cerr->num == 0) { - setcerr(113, cmdl->cmd); /* operand too many in COMET II command */ + return true; } - /* エラーが発生していないか確認 */ - if(cerr->num == 0) { - status = true; + /* アセンブラ命令またはマクロ命令の書込 */ + if(assemblecmd(cmdl, pass) == false && macrocmd(cmdl, pass) == false) { + /* COMET II命令の書込 */ + if(cometcmd(cmdl, pass) == false && cerr->num == 0) { + setcerr(113, cmdl->cmd); /* operand too many in COMET II command */ + } } - return status; + return (cerr->num == 0) ? true : false; } /**