Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[BUG]: #define immediately after a class definition before opening bracket hides the class #83

Open
@alandtse

Description

Problem description

I am parsing a project which uses ifdefs. While using pcpp to test variants of the code, some classes were no longer being detected by cppheaderparser. This is because cppheaderparse will leave behind #line 2 where 2 is the line number wherever a preprocessor directive is processed/replaced.

While I'm not sure if #line is valid cpp syntax, I've determined the existence of the # does break cppheaderparser so a valid #define 1 also causes the behavior.

Specifically, the #define 1 below immediately after the class declaration but before the { will break parsing of the class. While this is a toy example and it won't break if the #define is after the {, this may be valid syntax if the class inheritance is controlled by an ifdef.

This was tested with the command line:

python -m CppHeaderParser.tojson processed_playercharacter.h > test_processed.json

Operating System

MacOS

Installed Python Packages

Package Version
----------------------- ---------
aiocsv 1.2.3
aiofiles 22.1.0
black 23.1.0
bleach 6.0.0
certifi 2022年12月7日
charset-normalizer 3.1.0
click 8.1.3
click-log 0.4.0
colorama 0.4.6
docutils 0.19
dotty-dict 1.3.1
gitdb 4.0.10
GitPython 3.1.31
idna 3.4
importlib-metadata 6.1.0
invoke 1.7.3
jaraco.classes 3.2.3
keyring 23.13.1
more-itertools 9.1.0
mypy 1.1.1
mypy-extensions 1.0.0
numpy 1.24.2
packaging 23.0
pandas 1.5.3
pathspec 0.11.1
pcpp 1.30
pip 22.3.1
pkginfo 1.9.6
platformdirs 3.1.1
ply 3.11
Pygments 2.14.0
python-dateutil 2.8.2
python-gitlab 3.13.0
python-semantic-release 7.33.2
pytz 2023.2
readme-renderer 37.3
requests 2.28.2
requests-toolbelt 0.10.1
rfc3986 2.0.0
robotpy-cppheaderparser 5.1.0
semver 2.13.0
setuptools 65.5.1
six 1.16.0
smmap 5.0.0
tomli 2.0.1
tomlkit 0.11.6
tqdm 4.65.0
twine 3.8.0
typing_extensions 4.5.0
urllib3 1.26.15
webencodings 0.5.1
wheel 0.40.0
zipp 3.15.0

Reproducible example code

namespace RE
{
 class PlayerCharacter
#define 1 // This define breaks the discovery of PlayerCharacter. If this line is commented out, the class will be discovered.
 {
 }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /