parser: Detect function declaration (#580)

This commit is contained in:
MS 2024-02-19 10:00:48 -05:00 committed by GitHub
parent 21f80c825a
commit ba8f2b1c0f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 0 deletions

View file

@ -78,6 +78,11 @@ class ParserError(Enum):
# they annotate are different. # they annotate are different.
WRONG_STRING = 205 WRONG_STRING = 205
# ERROR: This lineref FUNCTION marker is next to a function declaration or
# forward reference. The correct place for the marker is where the function
# is implemented so we can match with the PDB.
NO_IMPLEMENTATION = 206
@dataclass @dataclass
class ParserAlert: class ParserAlert:

View file

@ -487,6 +487,9 @@ def read_line(self, line: str):
): ):
self._function_starts_here() self._function_starts_here()
self._function_done() self._function_done()
elif self.function_sig.endswith(");"):
# Detect forward reference or declaration
self._syntax_error(ParserError.NO_IMPLEMENTATION)
else: else:
self.state = ReaderState.WANT_CURLY self.state = ReaderState.WANT_CURLY

View file

@ -695,3 +695,19 @@ def test_static_variable_incomplete_coverage(parser):
# Failed for TEST module # Failed for TEST module
assert len(parser.alerts) == 1 assert len(parser.alerts) == 1
assert parser.alerts[0].code == ParserError.ORPHANED_STATIC_VARIABLE assert parser.alerts[0].code == ParserError.ORPHANED_STATIC_VARIABLE
def test_header_function_declaration(parser):
"""This is either a forward reference or a declaration in a header file.
Meaning: The implementation is not here. This is not the correct place
for the FUNCTION marker and it will probably not match anything."""
parser.read_lines(
[
"// FUNCTION: HELLO 0x1234",
"void sample_function(int);",
]
)
assert len(parser.alerts) == 1
assert parser.alerts[0].code == ParserError.NO_IMPLEMENTATION