Use CppParser C# bindings for linux when compiling on Linux.
Note: this always uses 64 bit version for now.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
Fix error:
../../../src/CppParser/AST.cpp:566:21: error: ‘MacroLocation’ is not a
class, namespace, or enumeration
MacroLocation(MacroLocation::Unknown) {}
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
The path for generated windows bindings has changed to i686-pc-win32-msvc, but
the existing files and the build system has not been changed.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
This works around the following parse issue which would trigger an subsequent assert when handling source locations:
RecordDecl 0x848e5c00 <<invalid sloc>> <invalid sloc> implicit struct __va_list definition
`-FieldDecl 0x848e5c60 <<invalid sloc>> <invalid sloc> __ap 'void *'
Clang now models different Windows environments in the triple and we need to explicitly request the "MSVC" environment to get proper behavior when parsing MSVC headers.
As enum PrimitiveType is supposed to represent C++ types, having Int32
and UInt32 there is not correct.
This patch renames those values to Int and UInt.
This doesn't change the behavior, but makes it clearer that the types
for 'int' and 'unsigned int' are not necessarily 32 bits.
As enum PrimitiveType is supposed to represent C++ types, having Int64
and UInt64 there is not correct.
This patch renames those values to LongLong and ULongLong.
This doesn't change the behavior, but makes it clearer that the types
for 'long long' and 'unsigned long long' are not necessarily 64 bits.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
As enum PrimitiveType is supposed to represent C++ types, having Int16
and UInt16 there is not correct.
This patch renames those values to Short and UShort.
This doesn't change the behavior, but makes it clearer that the types
for 'short' and 'unsigned short' are not necessarily 16 bits.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
As enum PrimitiveType is supposed to represent C++ types, having Int8
and UInt8 there is not correct.
This patch removes those values. As Int8 and UInt8 were set to be
equivalent to Char and UChar, we can just change all references to Int8
and UInt8 to Char and UChar.
This doesn't change the behavior, but makes it clearer that the types
for 'char' and 'unsigned char' are not necessarily 8 bits.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
The enum PrimitiveType represents, according to the comment, "the C++
built-in types.". However, it does not contain values for C++'s "long"
or "unsigned long", and the parser converts long to int. This is not
correct, and is a problem with 64bit support.
This patch adds Long and ULong values to PrimitiveType, and adds those
to all the switch-cases all around the code. For now Long and ULong are
handled exactly like Int and UInt, so this patch does not change
behavior.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
Fix the following warning by renaming ParserResult::Parser to
CodeParser.
In file included from ../../../src/CppParser/Parser.h:16:0,
from ../../../src/CppParser/Comments.cpp:8:
../../../src/CppParser/CppParser.h:86:13: warning: declaration of ‘CppSharp::CppParser::Parser* CppSharp::CppParser::ParserResult::Parser’ [-fpermissive]
Parser* Parser;
^
../../../src/CppParser/CppParser.h:73:8: warning: changes meaning of ‘Parser’ from ‘struct CppSharp::CppParser::Parser’ [-fpermissive]
struct Parser;
^
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
Fix the following warning by renaming RawComment::FullComment to
FullCommentBlock.
In file included from ../../../src/CppParser/AST.cpp:8:0:
../../../src/CppParser/AST.h:783:18: warning: declaration of ‘CppSharp::CppParser::AST::FullComment* CppSharp::CppParser::AST::RawComment::FullComment’ [-fpermissive]
FullComment* FullComment;
^
../../../src/CppParser/AST.h:760:15: warning: changes meaning of ‘FullComment’ from ‘struct CppSharp::CppParser::AST::FullComment’ [-fpermissive]
struct CS_API FullComment : public Comment
^
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
Fix the following warning by renaming RawComment::RawCommentKind to
Kind.
In file included from ../../../src/CppParser/AST.cpp:8:0:
../../../src/CppParser/AST.h:780:20: warning: declaration of ‘CppSharp::CppParser::AST::RawCommentKind CppSharp::CppParser::AST::RawComment::RawCommentKind’ [-fpermissive]
RawCommentKind RawCommentKind;
^
../../../src/CppParser/AST.h:765:13: warning: changes meaning of ‘RawCommentKind’ from ‘enum class CppSharp::CppParser::AST::RawCommentKind’ [-fpermissive]
enum struct RawCommentKind
^
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
There are multiple places in the parser which do something similar to
this:
Foo *ptr = 0;
if (...) {
Foo val = ...;
ptr = &val;
}
func(ptr);
In other words, the code takes a pointer to a local variable, and the
pointer is used even after the local variable's scope has ended.
This causes a crash on Linux. For some reason this works fine on Windows
+ Visual studio.
This patchs moves the variable ("val" in the above example) to outer
scopes, so that its life time is extended to cover the use.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>