projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
依存関係を整理
[YACASL2.git]
/
src
/
label.c
diff --git
a/src/label.c
b/src/label.c
index
1b9b806
..
2c4214e
100644
(file)
--- a/
src/label.c
+++ b/
src/label.c
@@
-1,10
+1,25
@@
-#include "casl2.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "cerr.h"
+#include "cmem.h"
+#include "hash.h"
#include "assemble.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];
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);
}
return hash(i+1, keys, LABELTABSIZE);
}
-/* ラベル表からアドレスを検索する */
+/**
+ * ラベル表からアドレスを検索する
+ */
WORD getlabel(const char *prog, const char *label)
{
assert(label != NULL);
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;
}
return 0xFFFF;
}
-/* プログラム名、ラベル、アドレスをラベル表に追加する */
+/**
+ * プログラム名、ラベル、アドレスをラベル表に追加する
+ */
bool addlabel(const char *prog, const char *label, WORD adr)
{
assert(label != NULL);
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;
}
return true;
}
+/**
+ * ラベルを比較した結果を返す
+ */
int compare_adr(const void *a, const void *b)
{
return (**(LABELARRAY **)a).adr - (**(LABELARRAY **)b).adr;
}
int compare_adr(const void *a, const void *b)
{
return (**(LABELARRAY **)a).adr - (**(LABELARRAY **)b).adr;
}
-/* ラベル表を表示する */
+/**
+ * ラベル表を表示する
+ */
void printlabel()
{
int i, asize = 0;
void printlabel()
{
int i, asize = 0;
@@
-105,7
+129,9
@@
void printlabel()
}
}
}
}
-/* ラベル表を解放する */
+/**
+ * ラベル表を解放する
+ */
void freelabel()
{
int i;
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) {
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");
}
free_chk(np->label, "np.label");
free_chk(np, "np");