diff --git a/src/AST/Method.cs b/src/AST/Method.cs index 286eb01a..1898510c 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -94,10 +94,12 @@ namespace CppSharp.AST { Access = method.Access; IsVirtual = method.IsVirtual; + IsStatic = method.IsStatic; IsConst = method.IsConst; + IsExplicit = method.IsExplicit; + IsVolatile = method.IsVolatile; IsFinal = method.IsFinal; IsProxy = method.IsProxy; - IsStatic = method.IsStatic; Kind = method.Kind; IsDefaultConstructor = method.IsDefaultConstructor; IsCopyConstructor = method.IsCopyConstructor; @@ -119,6 +121,7 @@ namespace CppSharp.AST public bool IsStatic { get; set; } public bool IsConst { get; set; } public bool IsExplicit { get; set; } + public bool IsVolatile { get; set; } public bool IsOverride { diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp index 2e677598..b01cb8de 100644 --- a/src/CppParser/AST.cpp +++ b/src/CppParser/AST.cpp @@ -674,6 +674,7 @@ Method::Method() , isStatic(false) , isConst(false) , isExplicit(false) + , isVolatile(false) , isDefaultConstructor(false) , isCopyConstructor(false) , isMoveConstructor(false) diff --git a/src/CppParser/Bindings/CLI/Decl.cpp b/src/CppParser/Bindings/CLI/Decl.cpp index 36772ac7..6afab65e 100644 --- a/src/CppParser/Bindings/CLI/Decl.cpp +++ b/src/CppParser/Bindings/CLI/Decl.cpp @@ -2028,6 +2028,16 @@ void CppSharp::Parser::AST::Method::IsExplicit::set(bool value) ((class ::CppSharp::CppParser::AST::Method*)NativePtr)->isExplicit = value; } +bool CppSharp::Parser::AST::Method::IsVolatile::get() +{ + return ((class ::CppSharp::CppParser::AST::Method*)NativePtr)->isVolatile; +} + +void CppSharp::Parser::AST::Method::IsVolatile::set(bool value) +{ + ((class ::CppSharp::CppParser::AST::Method*)NativePtr)->isVolatile = value; +} + CppSharp::Parser::AST::CXXMethodKind CppSharp::Parser::AST::Method::MethodKind::get() { return (CppSharp::Parser::AST::CXXMethodKind)((class ::CppSharp::CppParser::AST::Method*)NativePtr)->methodKind; diff --git a/src/CppParser/Bindings/CLI/Decl.h b/src/CppParser/Bindings/CLI/Decl.h index 8c9044c7..cfc54e85 100644 --- a/src/CppParser/Bindings/CLI/Decl.h +++ b/src/CppParser/Bindings/CLI/Decl.h @@ -1120,6 +1120,12 @@ namespace CppSharp void set(bool); } + property bool IsVolatile + { + bool get(); + void set(bool); + } + property CppSharp::Parser::AST::CXXMethodKind MethodKind { CppSharp::Parser::AST::CXXMethodKind get(); diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs index 71c74eac..fe8c0db5 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -9350,7 +9350,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 372)] + [StructLayout(LayoutKind.Sequential, Size = 376)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -9410,6 +9410,7 @@ namespace CppSharp internal byte isStatic; internal byte isConst; internal byte isExplicit; + internal byte isVolatile; internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; internal byte isDefaultConstructor; internal byte isCopyConstructor; @@ -9592,6 +9593,19 @@ namespace CppSharp } } + public bool IsVolatile + { + get + { + return ((__Internal*)__Instance)->isVolatile != 0; + } + + set + { + ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0); + } + } + public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs index b83d0f97..076c7153 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs @@ -9350,7 +9350,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 440)] + [StructLayout(LayoutKind.Sequential, Size = 444)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -9410,6 +9410,7 @@ namespace CppSharp internal byte isStatic; internal byte isConst; internal byte isExplicit; + internal byte isVolatile; internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; internal byte isDefaultConstructor; internal byte isCopyConstructor; @@ -9592,6 +9593,19 @@ namespace CppSharp } } + public bool IsVolatile + { + get + { + return ((__Internal*)__Instance)->isVolatile != 0; + } + + set + { + ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0); + } + } + public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs index fe3ab591..0aee6b45 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -9410,6 +9410,7 @@ namespace CppSharp internal byte isStatic; internal byte isConst; internal byte isExplicit; + internal byte isVolatile; internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; internal byte isDefaultConstructor; internal byte isCopyConstructor; @@ -9592,6 +9593,19 @@ namespace CppSharp } } + public bool IsVolatile + { + get + { + return ((__Internal*)__Instance)->isVolatile != 0; + } + + set + { + ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0); + } + } + public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs index edb1b55c..5c0c7a9d 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs @@ -9410,6 +9410,7 @@ namespace CppSharp internal byte isStatic; internal byte isConst; internal byte isExplicit; + internal byte isVolatile; internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; internal byte isDefaultConstructor; internal byte isCopyConstructor; @@ -9592,6 +9593,19 @@ namespace CppSharp } } + public bool IsVolatile + { + get + { + return ((__Internal*)__Instance)->isVolatile != 0; + } + + set + { + ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0); + } + } + public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs index ec7ffd9e..58d27ea0 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs @@ -9410,6 +9410,7 @@ namespace CppSharp internal byte isStatic; internal byte isConst; internal byte isExplicit; + internal byte isVolatile; internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; internal byte isDefaultConstructor; internal byte isCopyConstructor; @@ -9592,6 +9593,19 @@ namespace CppSharp } } + public bool IsVolatile + { + get + { + return ((__Internal*)__Instance)->isVolatile != 0; + } + + set + { + ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0); + } + } + public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs index f884b3ab..e8e7233f 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs @@ -9410,6 +9410,7 @@ namespace CppSharp internal byte isStatic; internal byte isConst; internal byte isExplicit; + internal byte isVolatile; internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; internal byte isDefaultConstructor; internal byte isCopyConstructor; @@ -9592,6 +9593,19 @@ namespace CppSharp } } + public bool IsVolatile + { + get + { + return ((__Internal*)__Instance)->isVolatile != 0; + } + + set + { + ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0); + } + } + public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get diff --git a/src/CppParser/Decl.h b/src/CppParser/Decl.h index b51929c4..40a2128b 100644 --- a/src/CppParser/Decl.h +++ b/src/CppParser/Decl.h @@ -380,6 +380,7 @@ namespace CppSharp bool isStatic; bool isConst; bool isExplicit; + bool isVolatile; CXXMethodKind methodKind; diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 85be06a1..8821ae03 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1898,6 +1898,7 @@ Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD) Method->isStatic = MD->isStatic(); Method->isVirtual = MD->isVirtual(); Method->isConst = MD->isConst(); + Method->isVolatile = MD->isVolatile(); for (auto OverriddenMethod : MD->overridden_methods()) { auto OM = WalkMethodCXX(OverriddenMethod); diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index 098057e7..b04a6f0c 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -564,5 +564,13 @@ namespace CppSharp.Generator.Tests.AST Assert.NotNull(macro); Assert.AreEqual("(x, y, z) x##y##z", macro.Expression); } + + [Test] + public void TestMethods() + { + var hasMethodsClass = AstContext.FindClass("HasMethods").First(); + var isVolatileMethod = hasMethodsClass.FindMethod("isVolatileMethod"); + Assert.That(isVolatileMethod.IsVolatile, Is.EqualTo(true)); + } } } diff --git a/src/Parser/ASTConverter.cs b/src/Parser/ASTConverter.cs index 8c4a82fb..1c03e939 100644 --- a/src/Parser/ASTConverter.cs +++ b/src/Parser/ASTConverter.cs @@ -1309,6 +1309,7 @@ namespace CppSharp _method.IsConst = decl.IsConst; _method.IsImplicit = decl.IsImplicit; _method.IsExplicit = decl.IsExplicit; + _method.IsVolatile = decl.IsVolatile; switch (decl.RefQualifier) { diff --git a/tests/dotnet/Native/AST.h b/tests/dotnet/Native/AST.h index 8899a5a9..29ff0762 100644 --- a/tests/dotnet/Native/AST.h +++ b/tests/dotnet/Native/AST.h @@ -185,3 +185,9 @@ int non_deprecated_func(int num); TestTemplateClass returnIncompleteTemplateSpecialization(); #define MACRO(x, y, z) x##y##z + +class HasMethods +{ +public: + void isVolatileMethod() volatile {} +}; \ No newline at end of file