*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
- COMET2CMD *cmd; /**<命令コード表の項目 */
+ const COMET2CMD *cmd; /**<命令コード表の項目 */
} CMDTAB;
/**
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;
}
}
asfin:
- freelabel(); /* ラベルハッシュ表を解放 */
- free_cmdtype_code(); /* 命令の名前とタイプがキーのハッシュ表を解放 */
- FREE(asptr->prog); /* アセンブル時のプロパティを解放 */
+ freelabel(); /* ラベルハッシュ表を解放 */
+ FREE(asptr->prog); /* アセンブル時のプロパティを解放 */
FREE(asptr);
}
freecerr(); /* エラーの解放 */
exit(1);
}
+ create_cmdtype_code(); /* 命令の名前とタイプがキーのハッシュ表を作成 */
reset(memsize, clocks); /* 仮想マシンCOMET IIのリセット */
for(i = 0; i < argc - optind; i++) { /* 引数からファイル名配列を取得 */
af[i] = argv[optind + i];
}
casl2fin:
shutdown(); /* 仮想マシンCOMET IIのシャットダウン */
+ free_cmdtype_code();
stat = (cerr->num == 0) ? 0 : 1;
freecerr(); /* エラーの解放 */
return stat;
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;
FREE(p->label->prog);
FREE(p->label->label);
FREE(p->label);
+ if(p == labels[i]) {
+ labels[i] = NULL;
+ }
FREE(p);
}
}
/**
* システム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 },