diff --git a/src/AST/ASTVisitor.cs b/src/AST/ASTVisitor.cs index 4d716547..2d016559 100644 --- a/src/AST/ASTVisitor.cs +++ b/src/AST/ASTVisitor.cs @@ -95,8 +95,8 @@ namespace CppSharp.AST function.ReturnType.Visit(this); if (Options.VisitFunctionParameters) - foreach (var arg in function.Arguments) - arg.Visit(this); + foreach (var param in function.Parameters) + param.Visit(this); return true; } diff --git a/src/AST/Function.cs b/src/AST/Function.cs index ea467e02..32d2ded4 100644 --- a/src/AST/Function.cs +++ b/src/AST/Function.cs @@ -187,8 +187,8 @@ namespace CppSharp.AST CallingConvention = this.CallingConvention, ReturnType = this.ReturnType }; - var argTypes = Parameters.Select(parameter => parameter.QualifiedType); - functionType.Arguments.AddRange(argTypes); + functionType.Parameters.AddRange(Parameters); + ReplaceIndirectReturnParamWithRegular(functionType); var pointerType = new PointerType { QualifiedPointee = new QualifiedType(functionType) }; return new QualifiedType(pointerType); } diff --git a/src/AST/Type.cs b/src/AST/Type.cs index 4847a138..f9edad52 100644 --- a/src/AST/Type.cs +++ b/src/AST/Type.cs @@ -313,15 +313,12 @@ namespace CppSharp.AST public QualifiedType ReturnType; // Argument types. - public List Arguments; - public List Parameters; public CallingConvention CallingConvention { get; set; } public FunctionType() { - Arguments = new List(); Parameters = new List(); } diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp index 856321a5..0a5129b0 100644 --- a/src/CppParser/Bindings/CLI/AST.cpp +++ b/src/CppParser/Bindings/CLI/AST.cpp @@ -226,19 +226,6 @@ CppSharp::Parser::AST::FunctionType::FunctionType(System::IntPtr native) auto __native = (::CppSharp::CppParser::AST::FunctionType*)native.ToPointer(); } -CppSharp::Parser::AST::QualifiedType^ CppSharp::Parser::AST::FunctionType::getArguments(unsigned int i) -{ - auto __ret = ((::CppSharp::CppParser::AST::FunctionType*)NativePtr)->getArguments(i); - auto ____ret = new ::CppSharp::CppParser::AST::QualifiedType(__ret); - return gcnew CppSharp::Parser::AST::QualifiedType((::CppSharp::CppParser::AST::QualifiedType*)____ret); -} - -unsigned int CppSharp::Parser::AST::FunctionType::getArgumentsCount() -{ - auto __ret = ((::CppSharp::CppParser::AST::FunctionType*)NativePtr)->getArgumentsCount(); - return __ret; -} - CppSharp::Parser::AST::Parameter^ CppSharp::Parser::AST::FunctionType::getParameters(unsigned int i) { auto __ret = ((::CppSharp::CppParser::AST::FunctionType*)NativePtr)->getParameters(i); @@ -278,29 +265,6 @@ void CppSharp::Parser::AST::FunctionType::CallingConvention::set(CppSharp::Parse ((::CppSharp::CppParser::AST::FunctionType*)NativePtr)->CallingConvention = (::CppSharp::CppParser::AST::CallingConvention)value; } -System::Collections::Generic::List^ CppSharp::Parser::AST::FunctionType::Arguments::get() -{ - auto _tmpArguments = gcnew System::Collections::Generic::List(); - for(auto _element : ((::CppSharp::CppParser::AST::FunctionType*)NativePtr)->Arguments) - { - auto ___element = new ::CppSharp::CppParser::AST::QualifiedType(_element); - auto _marshalElement = gcnew CppSharp::Parser::AST::QualifiedType((::CppSharp::CppParser::AST::QualifiedType*)___element); - _tmpArguments->Add(_marshalElement); - } - return _tmpArguments; -} - -void CppSharp::Parser::AST::FunctionType::Arguments::set(System::Collections::Generic::List^ value) -{ - auto _tmpvalue = std::vector<::CppSharp::CppParser::AST::QualifiedType>(); - for each(CppSharp::Parser::AST::QualifiedType^ _element in value) - { - auto _marshalElement = *(::CppSharp::CppParser::AST::QualifiedType*)_element->NativePtr; - _tmpvalue.push_back(_marshalElement); - } - ((::CppSharp::CppParser::AST::FunctionType*)NativePtr)->Arguments = _tmpvalue; -} - System::Collections::Generic::List^ CppSharp::Parser::AST::FunctionType::Parameters::get() { auto _tmpParameters = gcnew System::Collections::Generic::List(); diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h index 9e0c2a43..6304ea4b 100644 --- a/src/CppParser/Bindings/CLI/AST.h +++ b/src/CppParser/Bindings/CLI/AST.h @@ -359,20 +359,11 @@ namespace CppSharp CppSharp::Parser::AST::CallingConvention get(); void set(CppSharp::Parser::AST::CallingConvention); } - property System::Collections::Generic::List^ Arguments - { - System::Collections::Generic::List^ get(); - void set(System::Collections::Generic::List^); - } property System::Collections::Generic::List^ Parameters { System::Collections::Generic::List^ get(); void set(System::Collections::Generic::List^); } - CppSharp::Parser::AST::QualifiedType^ getArguments(unsigned int i); - - unsigned int getArgumentsCount(); - CppSharp::Parser::AST::Parameter^ getParameters(unsigned int i); unsigned int getParametersCount(); diff --git a/src/CppParser/Bindings/CSharp/AST.cs b/src/CppParser/Bindings/CSharp/AST.cs index 2f84710e..1162df40 100644 --- a/src/CppParser/Bindings/CSharp/AST.cs +++ b/src/CppParser/Bindings/CSharp/AST.cs @@ -632,9 +632,6 @@ namespace CppSharp [FieldOffset(12)] public CppSharp.Parser.AST.CallingConvention CallingConvention; - [FieldOffset(16)] - public Std.Vector Arguments; - [FieldOffset(28)] public Std.Vector Parameters; @@ -648,16 +645,6 @@ namespace CppSharp EntryPoint="??0FunctionType@AST@CppParser@CppSharp@@QAE@ABU0123@@Z")] internal static extern global::System.IntPtr FunctionType_2(global::System.IntPtr instance, global::System.IntPtr _0); - [SuppressUnmanagedCodeSecurity] - [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, - EntryPoint="?getArguments@FunctionType@AST@CppParser@CppSharp@@QAE?AUQualifiedType@234@I@Z")] - internal static extern void getArguments_0(global::System.IntPtr instance, global::System.IntPtr __return, uint i); - - [SuppressUnmanagedCodeSecurity] - [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, - EntryPoint="?getArgumentsCount@FunctionType@AST@CppParser@CppSharp@@QAEIXZ")] - internal static extern uint getArgumentsCount_0(global::System.IntPtr instance); - [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, EntryPoint="?getParameters@FunctionType@AST@CppParser@CppSharp@@QAEPAUParameter@234@I@Z")] @@ -709,21 +696,6 @@ namespace CppSharp base.Dispose(disposing); } - public CppSharp.Parser.AST.QualifiedType getArguments(uint i) - { - var __ret = new CppSharp.Parser.AST.QualifiedType.Internal(); - Internal.getArguments_0(__Instance, new IntPtr(&__ret), i); - var __instance = Marshal.AllocHGlobal(8); - CppSharp.Runtime.Helpers.memcpy(__instance, new IntPtr(&__ret), new UIntPtr(8)); - return new CppSharp.Parser.AST.QualifiedType(__instance); - } - - public uint getArgumentsCount() - { - var __ret = Internal.getArgumentsCount_0(__Instance); - return __ret; - } - public CppSharp.Parser.AST.Parameter getParameters(uint i) { var __ret = Internal.getParameters_0(__Instance, i); @@ -770,21 +742,6 @@ namespace CppSharp } } - public Std.Vector Arguments - { - get - { - var __ptr = (Internal*)__Instance.ToPointer(); - return new Std.Vector(__ptr->Arguments); - } - - set - { - var __ptr = (Internal*)__Instance.ToPointer(); - __ptr->Arguments = value.Internal; - } - } - public Std.Vector Parameters { get diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 013cdaa3..6974b58f 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1270,34 +1270,29 @@ Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL, WalkType(FP->getResultType(), &RL)); F->CallingConvention = ConvertCallConv(FP->getCallConv()); - for (auto I = FP->arg_type_begin(), E = FP->arg_type_end(); I != E; - ++I) - { - auto Arg = *I; - auto Ty = GetQualifiedType(Arg, WalkType(Arg)); - F->Arguments.push_back(Ty); - } - - if (!FTL) - goto SkipParameters; - for (unsigned i = 0; i < FP->getNumArgs(); ++i) { - auto PVD = FTL.getArg(i); - auto FA = new Parameter(); - HandleDeclaration(PVD, FA); + if (FTL) + { + auto PVD = FTL.getArg(i); - auto PTL = PVD->getTypeSourceInfo()->getTypeLoc(); + HandleDeclaration(PVD, FA); - FA->Name = PVD->getNameAsString(); - FA->QualifiedType = GetQualifiedType(PVD->getType(), - WalkType(PVD->getType(), &PTL)); + auto PTL = PVD->getTypeSourceInfo()->getTypeLoc(); - F->Parameters.push_back(FA); + FA->Name = PVD->getNameAsString(); + FA->QualifiedType = GetQualifiedType(PVD->getType(), WalkType(PVD->getType(), &PTL)); + } + else + { + auto Arg = FP->getArgType(i); + FA->Name = ""; + FA->QualifiedType = GetQualifiedType(Arg, WalkType(Arg)); + } } - SkipParameters: + return F; Ty = F; break; diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs index 2c714058..22e16ac2 100644 --- a/src/Generator/Generators/CLI/CLITypePrinter.cs +++ b/src/Generator/Generators/CLI/CLITypePrinter.cs @@ -58,7 +58,7 @@ namespace CppSharp.Generators.CLI public string VisitFunctionType(FunctionType function, TypeQualifiers quals) { - var arguments = function.Arguments; + var arguments = function.Parameters; var returnType = function.ReturnType; var args = string.Empty; diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs index dbe77df5..fe009928 100644 --- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs +++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs @@ -129,7 +129,7 @@ namespace CppSharp.Generators.CSharp public CSharpTypePrinterResult VisitFunctionType(FunctionType function, TypeQualifiers quals) { - var arguments = function.Arguments; + var arguments = function.Parameters; var returnType = function.ReturnType; var args = string.Empty; diff --git a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs index 4672c9dd..6c7ab372 100644 --- a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs +++ b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs @@ -71,14 +71,6 @@ namespace CppSharp.Passes return base.VisitFunctionDecl(function); } - public override bool VisitFunctionType(FunctionType function, TypeQualifiers quals) - { - foreach (var arg in function.Parameters) - arg.Visit(this); - - return base.VisitFunctionType(function, quals); - } - public override bool VisitTypedefDecl(TypedefDecl typedef) { var @class = typedef.Namespace.FindClass(typedef.Name); diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index a5f4f11a..20e4f56c 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -1382,34 +1382,29 @@ CppSharp::AST::Type^ Parser::WalkType(clang::QualType QualType, clang::TypeLoc* WalkType(FP->getResultType(), &RL)); F->CallingConvention = ConvertCallConv(FP->getCallConv()); - for (auto I = FP->arg_type_begin(), E = FP->arg_type_end(); I != E; - ++I) - { - auto Arg = *I; - auto Ty = GetQualifiedType(Arg, WalkType(Arg)); - F->Arguments->Add(Ty); - } - - if (!FTL) - goto SkipParameters; - for (unsigned i = 0; i < FP->getNumArgs(); ++i) { - auto PVD = FTL.getArg(i); - auto FA = gcnew CppSharp::AST::Parameter(); - HandleDeclaration(PVD, FA); + if (FTL) + { + auto PVD = FTL.getArg(i); - auto PTL = PVD->getTypeSourceInfo()->getTypeLoc(); + HandleDeclaration(PVD, FA); - FA->Name = marshalString(PVD->getNameAsString()); - FA->QualifiedType = GetQualifiedType(PVD->getType(), WalkType(PVD->getType(), &PTL)); + auto PTL = PVD->getTypeSourceInfo()->getTypeLoc(); + FA->Name = marshalString(PVD->getNameAsString()); + FA->QualifiedType = GetQualifiedType(PVD->getType(), WalkType(PVD->getType(), &PTL)); + } + else + { + auto Arg = FP->getArgType(i); + FA->Name = ""; + FA->QualifiedType = GetQualifiedType(Arg, WalkType(Arg)); + } F->Parameters->Add(FA); } - SkipParameters: - Ty = F; break; } diff --git a/tests/Basic/Basic.Tests.cs b/tests/Basic/Basic.Tests.cs index 4b825e49..2b22b1d7 100644 --- a/tests/Basic/Basic.Tests.cs +++ b/tests/Basic/Basic.Tests.cs @@ -111,7 +111,7 @@ public class BasicTests { var returnsAbstractFoo = new ReturnsAbstractFoo(); var abstractFoo = returnsAbstractFoo.getFoo(); - Assert.AreEqual(abstractFoo.pureFunction(), 5); + Assert.AreEqual(abstractFoo.pureFunction(1), 5); Assert.AreEqual(abstractFoo.pureFunction1(), 10); Assert.AreEqual(abstractFoo.pureFunction2(), 15); } diff --git a/tests/Basic/Basic.cpp b/tests/Basic/Basic.cpp index fc951cc8..056e1dd4 100644 --- a/tests/Basic/Basic.cpp +++ b/tests/Basic/Basic.cpp @@ -168,7 +168,7 @@ Bar indirectReturn() return Bar(); } -int ImplementsAbstractFoo::pureFunction() +int ImplementsAbstractFoo::pureFunction(int i) { return 5; } diff --git a/tests/Basic/Basic.cs b/tests/Basic/Basic.cs index 1739df90..af8a76fc 100644 --- a/tests/Basic/Basic.cs +++ b/tests/Basic/Basic.cs @@ -11,6 +11,15 @@ namespace CppSharp.Tests public Basic(GeneratorKind kind) : base("Basic", kind) { + + } + + public override void SetupPasses(Driver driver) + { + if (driver.Options.IsCSharpGenerator) + { + driver.Options.GenerateAbstractImpls = true; + } } public override void Preprocess(Driver driver, ASTContext lib) diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index b1b45707..47436670 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -111,7 +111,7 @@ public: class DLL_API AbstractFoo { public: - virtual int pureFunction() = 0; + virtual int pureFunction(int i) = 0; virtual int pureFunction1() = 0; virtual int pureFunction2() = 0; typedef void (*QTextStreamFunction)(int &); @@ -120,7 +120,7 @@ public: class DLL_API ImplementsAbstractFoo : public AbstractFoo { public: - virtual int pureFunction(); + virtual int pureFunction(int i); virtual int pureFunction1(); virtual int pureFunction2(); };