-
Notifications
You must be signed in to change notification settings - Fork 25
Open
Description
The Problem
When NsiqCppStyle parses the following code snippet:
Event& Event::operator=(OUT Event& other)
{
}
The internal token list (accessed via the lexer.tokenlist member variable) looks like this:
tokenlist = {list: 19}
00 = {LexToken} LexToken(ID,'Event',1,1,0, False, None)
01 = {LexToken} LexToken(AND,'&',1,6,5, False, None)
02 = {LexToken} LexToken(SPACE,' ',1,7,6, False, None)
03 = {LexToken} LexToken(ID,'Event',1,8,7, False, None)
04 = {LexToken} LexToken(DOUBLECOLON,'::',1,13,12, False, None)
05 = {LexToken} LexToken(FUNCTION,'operator',1,15,14, False, None)
06 = {LexToken} LexToken(EQUALS,'=',1,23,22, False, None)
07 = {LexToken} LexToken(LPAREN,'(',1,24,23, False, None)
08 = {LexToken} LexToken(ID,'OUT',1,25,24, False, None)
09 = {LexToken} LexToken(SPACE,' ',1,28,27, False, None)
10 = {LexToken} LexToken(ID,'Event',1,29,28, False, None)
11 = {LexToken} LexToken(AND,'&',1,34,33, False, None)
12 = {LexToken} LexToken(SPACE,' ',1,35,34, False, None)
13 = {LexToken} LexToken(ID,'other',1,36,35, False, None)
14 = {LexToken} LexToken(RPAREN,')',1,41,40, False, None)
15 = {LexToken} LexToken(LINEFEED,'\n',1,42,41, False, None)
16 = {LexToken} LexToken(LBRACE,'{',2,1,42, False, None)
17 = {LexToken} LexToken(LINEFEED,'\n',2,2,43, False, None)
18 = {LexToken} LexToken(RBRACE,'}',3,1,44, False, None)
The problem is that NsiqCppStyle returns the overloaded operator function name ("operator=") as two tokens, i.e., a FUNCTION ("operator" at offset 5) and an EQUALS ("=" at offset 6). This is incorrect - the overloaded operator function name should be returned as one FUNCTION token with a value of "operator=":
tokenlist = {list: 18}
00 = {LexToken} LexToken(ID,'Event',1,1,0, False, None)
01 = {LexToken} LexToken(AND,'&',1,6,5, False, None)
02 = {LexToken} LexToken(SPACE,' ',1,7,6, False, None)
03 = {LexToken} LexToken(ID,'Event',1,8,7, False, None)
04 = {LexToken} LexToken(DOUBLECOLON,'::',1,13,12, False, None)
05 = {LexToken} LexToken(FUNCTION,'operator=',1,15,14, False, None)
06 = {LexToken} LexToken(LPAREN,'(',1,24,23, False, None)
07 = {LexToken} LexToken(ID,'OUT',1,25,24, False, None)
08 = {LexToken} LexToken(SPACE,' ',1,28,27, False, None)
09 = {LexToken} LexToken(ID,'Event',1,29,28, False, None)
10 = {LexToken} LexToken(SPACE,' ',1,34,33, False, None)
11 = {LexToken} LexToken(AND,'&',1,35,34, False, None)
12 = {LexToken} LexToken(ID,'other',1,36,35, False, None)
13 = {LexToken} LexToken(RPAREN,')',1,41,40, False, None)
14 = {LexToken} LexToken(LINEFEED,'\n',1,42,41, False, None)
15 = {LexToken} LexToken(LBRACE,'{',2,1,42, False, None)
16 = {LexToken} LexToken(LINEFEED,'\n',2,2,43, False, None)
17 = {LexToken} LexToken(RBRACE,'}',3,1,44, False, None)
This is the correct way to parse the overloaded operator function name - tokenlist[5] shows the FUNCTION token with a value of "operator=".
Metadata
Metadata
Assignees
Labels
No labels