X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Flabel.c;fp=src%2Flabel.c;h=2c4214e087d6bd86ccf97efd355f1516a9dbf8b5;hp=1b9b806d4e4d2ee96eb1d8f8291917e5c8c7d8ed;hb=d1f82970bf7d41db2fea11b08cd8e308f6cb8138;hpb=bd1ff7ff1d0c87b079abf0b9c59f27783e3cad07 diff --git a/src/label.c b/src/label.c index 1b9b806..2c4214e 100644 --- a/src/label.c +++ b/src/label.c @@ -1,10 +1,25 @@ -#include "casl2.h" +#include +#include +#include +#include + +#include "cerr.h" +#include "cmem.h" +#include "hash.h" #include "assemble.h" -int labelcnt = 0; /* ラベル数 */ -LABELTAB *labels[LABELTABSIZE]; /* ラベル表 */ +static int labelcnt = 0; /* ラベル数 */ +static LABELTAB *labels[LABELTABSIZE]; /* ラベル表 */ + +#ifndef UNITTEST +static unsigned labelhash(const char *prog, const char *label); + +static int compare_adr(const void *a, const void *b); +#endif -/* プログラム名とラベルに対応するハッシュ値を返す */ +/** + * プログラム名とラベルに対応するハッシュ値を返す + */ unsigned labelhash(const char *prog, const char *label) { HKEY *keys[2]; @@ -22,7 +37,9 @@ unsigned labelhash(const char *prog, const char *label) return hash(i+1, keys, LABELTABSIZE); } -/* ラベル表からアドレスを検索する */ +/** + * ラベル表からアドレスを検索する + */ WORD getlabel(const char *prog, const char *label) { assert(label != NULL); @@ -38,7 +55,9 @@ WORD getlabel(const char *prog, const char *label) return 0xFFFF; } -/* プログラム名、ラベル、アドレスをラベル表に追加する */ +/** + * プログラム名、ラベル、アドレスをラベル表に追加する + */ bool addlabel(const char *prog, const char *label, WORD adr) { assert(label != NULL); @@ -71,12 +90,17 @@ bool addlabel(const char *prog, const char *label, WORD adr) return true; } +/** + * ラベルを比較した結果を返す + */ int compare_adr(const void *a, const void *b) { return (**(LABELARRAY **)a).adr - (**(LABELARRAY **)b).adr; } -/* ラベル表を表示する */ +/** + * ラベル表を表示する + */ void printlabel() { int i, asize = 0; @@ -105,7 +129,9 @@ void printlabel() } } -/* ラベル表を解放する */ +/** + * ラベル表を解放する + */ void freelabel() { int i; @@ -115,7 +141,7 @@ void freelabel() for(np = labels[i]; np != NULL; np = nq) { nq = np->next; if(np->prog != NULL) { - free(np->prog); + free_chk(np->prog, "np.prog"); } free_chk(np->label, "np.label"); free_chk(np, "np");