1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-09 16:29:09 +00:00

Don't run into an internal error in case of a duplicate switch label.

git-svn-id: svn://svn.cc65.org/cc65/trunk@1029 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2001-10-11 13:45:46 +00:00
parent 8546ab22cc
commit e17b0a0aac

View File

@ -60,7 +60,7 @@ CaseNode* NewCaseNode (unsigned char Value)
/* Initialize the fields */
N->Value = Value;
N->Label = GetLocalLabel ();
N->Label = 0;
N->Nodes = 0;
/* Return the new node */
@ -138,14 +138,16 @@ unsigned InsertCaseValue (Collection* Nodes, unsigned long Val, unsigned Depth)
*/
{
CaseNode* N = 0;
unsigned CaseLabel = GetLocalLabel (); /* Code label */
while (Depth--) {
int Index;
/* Get the key */
unsigned char Key = (Val >> (Depth * CHAR_BIT)) & 0xFF;
/* Search for the node in the collection */
int Index;
if (SearchCaseNode (Nodes, Key, &Index) == 0) {
/* Node not found - insert one */
@ -153,10 +155,12 @@ unsigned InsertCaseValue (Collection* Nodes, unsigned long Val, unsigned Depth)
CollInsert (Nodes, N, Index);
/* If this is not the last round, create the collection for
* the subnodes.
* the subnodes, otherwise get a label for the code.
*/
if (Depth > 0) {
N->Nodes = NewCollection ();
N->Nodes = NewCollection ();
} else {
N->Label = CaseLabel;
}
} else {
@ -167,7 +171,7 @@ unsigned InsertCaseValue (Collection* Nodes, unsigned long Val, unsigned Depth)
* duplicate case label in a switch.
*/
if (Depth == 0) {
Error ("Duplicate case label");
Error ("Duplicate case label");
}
}
@ -176,7 +180,7 @@ unsigned InsertCaseValue (Collection* Nodes, unsigned long Val, unsigned Depth)
}
/* Return the label of the node we found/created */
return N->Label;
return CaseLabel;
}