From 9f54a56b4d6a4c2e09529a5e71ad0d84afa1ce45 Mon Sep 17 00:00:00 2001 From: j8takagi Date: Thu, 9 Aug 2018 12:47:50 +0900 Subject: [PATCH] =?utf8?q?=E3=83=9E=E3=82=B7=E3=83=B3=E3=82=B3=E3=83=BC?= =?utf8?q?=E3=83=89=E3=83=A2=E3=83=8B=E3=82=BF=E3=83=BC=E3=81=A72=E5=9B=9E?= =?utf8?q?=E3=82=A2=E3=82=BB=E3=83=B3=E3=83=96=E3=83=AB=E3=81=99=E3=82=8B?= =?utf8?q?=E3=81=A8=E7=95=B0=E5=B8=B8=E7=B5=82=E4=BA=86=E3=81=99=E3=82=8B?= =?utf8?q?=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/struct.h | 2 +- src/assemble.c | 6 ++---- src/casl2.c | 2 ++ src/comet2monitor.c | 3 +++ src/label.c | 3 +++ src/struct.c | 2 +- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/include/struct.h b/include/struct.h index e36c13f..ed58762 100644 --- a/include/struct.h +++ b/include/struct.h @@ -111,7 +111,7 @@ typedef struct { */ typedef struct _CMDTAB { struct _CMDTAB *next; /**<リスト次項目へのポインタ */ - COMET2CMD *cmd; /**<命令コード表の項目 */ + const COMET2CMD *cmd; /**<命令コード表の項目 */ } CMDTAB; /** diff --git a/src/assemble.c b/src/assemble.c index de255b1..c9dd43b 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -753,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; @@ -785,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); } diff --git a/src/casl2.c b/src/casl2.c index fb4290a..36d5703 100644 --- a/src/casl2.c +++ b/src/casl2.c @@ -145,6 +145,7 @@ int main(int argc, char *argv[]) freecerr(); /* エラーの解放 */ exit(1); } + create_cmdtype_code(); /* 命令の名前とタイプがキーのハッシュ表を作成 */ reset(memsize, clocks); /* 仮想マシンCOMET IIのリセット */ for(i = 0; i < argc - optind; i++) { /* 引数からファイル名配列を取得 */ af[i] = argv[optind + i]; @@ -164,6 +165,7 @@ int main(int argc, char *argv[]) } casl2fin: shutdown(); /* 仮想マシンCOMET IIのシャットダウン */ + free_cmdtype_code(); stat = (cerr->num == 0) ? 0 : 1; freecerr(); /* エラーの解放 */ return stat; diff --git a/src/comet2monitor.c b/src/comet2monitor.c index 830bd66..b961711 100644 --- a/src/comet2monitor.c +++ b/src/comet2monitor.c @@ -52,11 +52,14 @@ int main(int argc, char *argv[]) addcerrlist_load(); addcerrlist_exec(); + create_cmdtype_code(); reset(memsize, clocks); /* COMET II仮想マシンのリセット */ execptr->start = 0; execmode.monitor = true; exec(); /* プログラム実行 */ + shutdown(); + free_cmdtype_code(); stat = (cerr->num == 0) ? 0 : 1; freecerr(); /* エラーの解放 */ return stat; diff --git a/src/label.c b/src/label.c index cbb27b8..63b6fe5 100644 --- a/src/label.c +++ b/src/label.c @@ -166,6 +166,9 @@ void freelabel() FREE(p->label->prog); FREE(p->label->label); FREE(p->label); + if(p == labels[i]) { + labels[i] = NULL; + } FREE(p); } } diff --git a/src/struct.c b/src/struct.c index 12caf87..4e38f2e 100644 --- a/src/struct.c +++ b/src/struct.c @@ -14,7 +14,7 @@ EXECPTR *execptr; /** * システムCOMET IIの命令表 */ -static COMET2CMD comet2cmd[] = { +static const COMET2CMD comet2cmd[] = { { "NOP", NONE, 0x0, nop }, { "LD", R_ADR_X, 0x1000, ld_r_adr_x }, { "ST", R_ADR_X, 0x1100, st }, -- 2.18.0