From 60f525346f0da2b6760dc74217c0bd7a36eff4e6 Mon Sep 17 00:00:00 2001 From: uz Date: Mon, 23 Feb 2009 22:19:23 +0000 Subject: [PATCH] Fixed asm code to source line relation in switch statements. The switch code was incorrectly attributed to the line following the switch statement. git-svn-id: svn://svn.cc65.org/cc65/trunk@3957 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/cc65/swstmt.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index b5c4b2b8f..2823ae118 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -93,6 +93,7 @@ void SwitchStatement (void) unsigned ExitLabel; /* Exit label */ unsigned SwitchCodeLabel;/* Label for the switch code */ int HaveBreak = 0; /* True if the last statement had a break */ + int RCurlyBrace; /* True if last token is right curly brace */ SwitchCtrl* OldSwitch; /* Pointer to old switch control data */ SwitchCtrl SwitchData; /* New switch data */ @@ -151,7 +152,7 @@ void SwitchStatement (void) /* Parse the following statement, which will actually be a compound * statement because of the curly brace at the current input position */ - HaveBreak = Statement (0); + HaveBreak = Statement (&RCurlyBrace); /* Check if we had any labels */ if (CollCount (SwitchData.Nodes) == 0 && SwitchData.DefaultLabel == 0) { @@ -188,7 +189,7 @@ void SwitchStatement (void) /* Define the exit label */ g_defcodelabel (ExitLabel); - + /* Exit the loop */ DelLoop (); @@ -197,6 +198,13 @@ void SwitchStatement (void) /* Free the case value tree */ FreeCaseNodeColl (SwitchData.Nodes); + + /* If the case statement was (correctly) terminated by a closing curly + * brace, skip it now. + */ + if (RCurlyBrace) { + NextToken (); + } } -- 2.39.5