/* */
/* */
/* */
-/* (C) 2000 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
+/* (C) 2000-2003 Ullrich von Bassewitz */
+/* Römerstraße 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
#include "check.h"
#include "filepos.h"
#include "xmalloc.h"
-
+
/* ca65 */
#include "error.h"
#include "expr.h"
/* Struct that describes an unnamed label */
-typedef struct ULabel_ ULabel;
-struct ULabel_ {
+typedef struct ULabel ULabel;
+struct ULabel {
ULabel* Prev; /* Pointer to previous node in list */
ULabel* Next; /* Pointer to next node in list */
FilePos Pos; /* Position of the label in the source */
}
if (L == 0) {
/* Label does not exist */
- Error (ERR_UNDEFINED_LABEL);
+ Error ("Undefined label");
/* We must return something valid */
- return CurrentPC();
+ return GenCurrentPC();
} else {
/* Return a copy of the label value */
return CloneExpr (L->Val);
} else {
/* Forward reference. Create labels as needed */
unsigned LabelNum = ULabDefCount + Which - 1;
- while (Which > 0) {
- if (L->Next == 0) {
- NewULabel (0);
- }
- L = L->Next;
- --Which;
- }
- /* Return an unnamed label expression */
- return ULabelExpr (LabelNum);
+ while (LabelNum < ULabCount) {
+ NewULabel (0);
+ }
+
+ /* Return an unnamed label expression */
+ return GenULabelExpr (LabelNum);
}
}
/* Create a new label if needed, or use an existing one */
if (ULabLastDef == 0 || ULabLastDef->Next == 0) {
/* The last label is also the last defined label, we need a new one */
- ULabLastDef = NewULabel (CurrentPC ());
+ ULabLastDef = NewULabel (GenCurrentPC ());
} else {
/* We do already have the label, but it's undefined until now */
ULabLastDef = ULabLastDef->Next;
- ULabLastDef->Val = CurrentPC ();
+ ULabLastDef->Val = GenCurrentPC ();
ULabLastDef->Pos = CurPos;
}
++ULabDefCount;
/* If the label is open (not defined), return some valid value */
if (L->Val == 0) {
- return LiteralExpr (0);
+ return GenLiteralExpr (0);
} else {
return CloneExpr (L->Val);
}
if (ULabLastDef) {
L = ULabLastDef->Next;
while (L) {
- PError (&L->Pos, ERR_UNDEFINED_LABEL);
+ PError (&L->Pos, "Undefined label");
L = L->Next;
}
}