Skip to content

Latest commit

 

History

History
1683 lines (832 loc) · 50.2 KB

CHANGELOG.md

File metadata and controls

1683 lines (832 loc) · 50.2 KB

[0.11.1] - 2021-2-3

  • Restore backwards compatibility with .NET Framework

  • Remove looking MSVC headers up with COM

  • Look for the Clang headers along the main entry (#1573)

[0.11.0] - 2021-1-29

  • The NuGet package now supports Linux and macOS as well

  • Upgrade to .NET Core 3.1 and improve build system

  • Make auto-compiling of C# work with .NET Core

  • Adding extract interface pass

  • Add a log for changes per release

  • Fixed alias of signed char cannot be marshaled

  • Add missing quotes to support paths with spaces in build scripts

  • Ignore the still unsupported dependent type names

  • Rewrite GenerateEnumFromMacros helper to also look into enum items.

  • Fix generation of overloads in NAPI by re-ordering final calculated states.

  • Update expression evaluator code from latest upstream.

  • Improve visiting options implementation in CodeGenerator.

  • Clean multiline function signatures in the AST converter.

  • Fix generation of text blocks using NewLineKind.IfNotEmpty.

  • Git ignore IDEA project folders.

  • Change XML comments to be tested at run-time

  • Generate valid C++ for pointers in template args

  • Better detect invalid specialized functions

  • Simplify the marking of invalid functions

  • Generate valid C++ for protected constructors

  • Generate valid C++ for protected destructors

  • Only implement abstract classes in C++ for ctors/dtors

  • Fix test generation for QuickJS generator.

  • Remove unused code in QuickJS module generator.

  • Add enum support to QuickJS generator.

  • Marshaling correctness fix for enum and primitive types in NAPI.

  • Abstract marshaler into overridable method in NAPI sources.

  • Extract NAPI VarPrefix and ArgumentPrefix to base class.

  • Add missing clang headers

  • Create a single nuget package that supports windows / linux / macos

  • Refactor QuickJS generator structure to follow NAPI patterns.

  • Add initial QuickJS primitive type support and test suite.

  • Ensure a tested specialization is really generated

  • Place all output of tests in their own directories

  • Use C++17 in all native projects

  • Disable getter/setter to property pass by default in non-managed backends.

  • Fix forward include collector to consider value class semantics in function returns.

  • Factor VarPrefix and ArgumentPrefix helpers into base marshaler.

  • Implement basic visiting behavior in some CodeGenerator overloads.

  • Normalize visiting overloads to be virtual.

  • Flush Module.ExternalClassTemplateSpecializations to avoid emitting the same specialization in multiple files

  • Add initial Node and N-API testing infrastructure and tests.

  • Big update to NAPI generator with initial support for basic examples.

  • Add DFA/NFA state machine utility code.

  • Replace outdated Clang compiler flags such as std=c++1z and replace it with std=c++17

  • Change GenerateSequentialLayout default value to true

  • Simplify TU.FileRelativeDirectory by using Path.GetDirectoryName.

  • Update driver to only generate system modules for C# generators.

  • Add ILibrary.GenerateCode as a custom code generation callback.

  • Upgrade .NET projects to C# 8.0.

  • Improve generation of type printing declaration names for C language.

  • Rework constructor generation in C++ code generator.

  • Setup include dirs on the module instead of parser options in the CLI.

  • Improve error handling in CLI and avoid defaulting to a generator on unknown option..

  • Add N-API generator support to the CLI.

  • Extract and re-use GetIncludePath across multiple generators.

  • Fix TU.FileRelativeDirectory to be more robust against some paths.

  • Fully resolve include dirs paths in driver option validation.

  • Fix ShouldGenerateClassNativeField to use NeedsBase instead of HasBase.

  • Update Class.HasNonIgnoredBase to use the actual base class.

  • Fix rename pass not handling some declarations due to early return.

  • Manage package versions centrally

  • Add LanguageVersion.CPP20 support

  • Only upload artifacts from master branch

  • Make unit tests independent of the generator

  • Simplify code that regenerates test bindings

  • Only use premake for native projects and improve c# projects.

  • Move GeneratorTestFixture type to its own file.

  • Fix typo and move alignment offsets to cpp file

  • Export or implement accessible functions in tests

  • Export symbols for indirectly accessible constructors

  • Publish artifacts for CI builds (#1533)

  • Fix importing/exporting redeclaration in symbols

  • CI: Add Restore step to make it easier to analyze build times

  • Don't warn repeatedly about an existing LLVM dir

  • Don't download LLVM if its destination exists

  • Fix the expression-generator after changed paths

  • Fix a regressive crash when generating parser bindings

  • Remove redundant overrides from the generated C++/CLI

  • Disable the msvc warning about unexported template specializations

  • Fix naive version comparison

  • Fix GCC version detection

  • Move all LLVM files to /build/llvm

  • Ignore premake5 binaries

  • Remove secondary Zstandard compression from LLVM packages

  • Show a message explaining how to build LLVM when a pre-built package is unavailable.

  • Fix wrong LLVM package name when GCC version is >= 10

  • Add LLVM commands to build.sh

  • Test using a specialization from a dependent module

  • Add install_tools target to build.sh and fix LLVM CI.

  • Deprecate GCC 7 and add GCC 10 build for LLVM CI.

  • Move generated .vcxproj files back to their original place

  • Add missing -configuration option to build.sh script

  • Replace Generate*.bat files with a single generate.sh which uses VS2019 by default

  • Remove DownloadDeps.bat file

  • Add build.sh and test.sh with execute permissions

  • Only search for MSVC toolchain in Windows

  • Generate correct LLVM package name regardless of the current operating system

  • Avoid using "action:vs* filter because there are better ones that are more specific (#1523)

  • Convert the visiting options to an enum

  • Update CanCheckCodeGenInfo to check function types as well.

  • Check for a dependent expression before walking variable initializer.

  • Some Premake robustness fixes for Clang toolchain.

  • Use explicit native type printer kind in CLI headers code.

  • Ignore testing the incorrect marshalling of parameters typed const& to primitives

  • Don't check the unsupported operator= for symbols

  • Add initial NAPI and JS generator.

  • Add initial QuickJS generator.

  • Add C++ generator support to the CLI.

  • Remove artificial limitations for cross-generation in CLI.

  • Simplify target-specific message output code in CLI.

  • Add a new option to set a prefix for generated files in CLI.

  • Improve module naming heuristics and add an option for setting it explicitly.

  • Implement C support as generator kind in CLI.

  • Refactor string.Format calls in CLI.

  • Implement Method.HasSameSignature for signature comparison.

  • Implement Method.ToString() to help with debugging.

  • A temporary hack to deal with a bug in MSVC v142 - VS 2019 build tools

  • Don't wrap trivial constructors and destructors

  • Ensure bindings are regenerated as needed without using DisableFastUpToDateCheck (#1511)

  • Continue implementation of C++ generator.

  • Add pass to fix up pure C++ methods to C++ generator.

  • More robust C++ type printing of incomplete class declarations.

  • Save existing parameter when doing C++ parameter type printing.

  • Add initial C base generator.

  • Check if module exists before using it in C code generator.

  • More robust enum generation for C family languages in C code generator.

  • Fix C generator GenerateMethodSpecifier to support pure and const specifiers.

  • Add set of generated declarations to CLITypeReferences.

  • Add initial block visitor to GeneratorOutputPass.

  • Only add files to module if module is not null.

  • Add per-declaration support for decl maps.

  • Add BlockGenerator.NeedsNewLine helper property.

  • Fix class nested enums to be handled by the rename pass.

  • Document recently added GenerationOutputMode option.

  • Add TypeQualifiersMode to Type and implement in C++ type printer.

  • Add new VisitQualifiedType overload to visitors.

  • Set include path as weell as file path when creating a new TU.

  • Fix IsGeneratedOverride to take virtual methods into account.

  • Add some helper class hierarchy methods.

  • Fix CppMarshal WriteClassInstance to deal with incomplete classes.

  • Rework Generator interface and add GenerationOutputMode option.

  • Improve IsTypeComplete to be more robust.

  • Improve ignored check for decls with explicit generation kinds.

  • Generate acessor methods for C targets in field to property pass..

  • Set the correct enum integer type in GenerateEnumFromMacros.

  • Fix ignored base checking in CheckIgnoredDecls.

  • Be more strict when constructing a regex for parsing macros.

  • Handle enum items in rename pass.

  • Fix code to use BaseClass property instead of first base.

  • Add initial implementation of declaration maps.

  • Remove unsupported Visual Studio versions from generate options

  • Rename GenerateProjects.bat to Generate.bat

  • Add GenerateVS2019.bat shortcut similar to GenerateMake.bat

  • Prevent projects from picking up obj files that are generated sometimes (#1508)

  • Fix all of our warnings in the parser

  • Fix error in Tests.lua by requiring gmake2 module.

  • Add a GCC 9 build to the LLVM CI build matrix.

  • Fix minor issue when invoking Premake without an action.

  • Compress LLVM archives using zstd.

  • Call MSBuild in x86 build with Win32 platform.

  • Pass the target architecture when building LLVM.

  • Publish artifacts after building LLVM.

  • Fix VS environment paths by setting global env variables.

  • Do not use LLD when building LLVM under macOS.

  • Generate C++ for constructors of abstract types

  • Use NUnit3TestAdapter package (#1504)

  • Add a build for LLVM to the CI

  • Use correct C# parser bindings for windows x64 (#1501)

  • Avoid installing NUnit if its already installed. (#1500)

  • Generate code from tests where libraries appear

  • Fix generation of SequentialLayout structures (#1499)

  • Update parser bindings. (#1497)

  • Fix CS0162 warning about unreachable code (#1492)

  • Fix CS0109 warnings about new keyword not being required. (#1493)

  • Enable Multi-processor Compilation (MSVC)

  • Fix C4273 warnings about inconsistent dll linkage (#1491)

  • Fix warnings about unnecessary using directives. (#1489)

  • Fix C4251 warnings (#1487)

  • Avoid generating an interface with a Dispose method if we already inherit from IDisposable. (#1486)

  • Fix finding of symbols for members of templates

  • Always ignore warnings about missing PDB files

  • Reduce number of "download progress" messages. (#1482)

  • Mark variables with constant expressions as found

  • Make the CPP ABI visible only to the STD symbols

  • Generate valid C++ for destructors of nested types

  • Always use the mangled names as reported by Clang

  • Switch CI to GitHub Actions

  • Call the destructor instead of deleting the object in the generated symbols

  • Regenerate the parser bindings with sequential layouts (#1479)

  • Remove dummy variable and use discards instead available since C# 7.0 (#1478)

  • Fallback to LayoutKind.Explicit when a custom alignment is specified. (#1476)

  • Remove Layout.GetSize() method as it's no longer relevant (#1474)

  • Fix String.CSharpSignatureType returning incorrect type when the given type is a pointer or a reference. (#1473)

  • Expose if a variable is a constant expression

  • Fix the generation of sequential layouts

  • Create projects which always build generated code

  • Simplify the marshalling of returned pointers (#1470)

  • VTable: improve codegen & make it thread safe (#1469)

  • Create VTables class to cache delegates pointing to native virtual methods (#1468)

  • Improve UTF32Marshaller performance (#1467)

  • Improve generation of C# (#1466)

  • Reduce calls to ConcurrentDictionary to improve performance (#1464)

  • Ensure expression is a valid float constant before trying to append f suffix (#1465)

  • Fix passing of CMake options to LLVM on Windows

  • Update the kind of completed specializations (#1460)

  • Fix ambiguous conversion functions (#1458)

  • Prevent string destructor from being called twice when its passed by value (#1455)

  • Remove unsupported calling convention usage (#1454)

  • Fix PInvokeStackImbalance when calling C++ methods (#1453)

  • Load symbols at startup to avoid very expensive ResolveSymbol calls everywhere (#1447)

  • Fix IntPtr array marshalling bug and move hard to read code to CppSharp.Runtime (#1446)

  • Fix string marshalling bug and move hard to read code to CppSharp.Runtime (#1445)

  • Add support for const char32_t* and fix const wchar_t* in linux / osx (#1444)

  • Copy arrays of primitive values using System.Buffers.MemoryCopy (#1440)

  • Fix marshalling for bool arrays (#1439)

  • Fix wrong [MarshalAs(UnmanagedType)] for strings (#1438)

  • Remove call argument to fix broken build (#1436)

  • Basic support for static constexpr variables (#1435)

  • Add support for C++ character literals (u, U, L) (#1434)

  • Upgrade premake in preparation for .NET Core (#1298)

  • Use C# 'default literal' to avoid using a type's name that may be renamed (#1432)

  • Add missing Variable.Type null check. (#1430)

  • Fix generated constructor cant use placement new when class overloads operator new (#1431)

  • Fix generation of VS projects under non-Windows platforms.

  • Fix wrong marshalling for static member arrays (#1428)

  • Fix wrong generated destructor

  • Ignore non-const data() method for std types like basic_string [c++17] (#1427)

  • Fix crash when trying to read a CXXRecordDecl that doesn't have a definition (#1426)

  • RemovePass is now generic.

  • Added the ability to remove a built-in pass.

  • Fix anonymous member name colliding with enclosing type name (#1425)

  • Allow the users to overwrite CppSharp type maps.

  • Find libraries even when given with no extensions

  • Add an option for building with Visual Studio 2019

  • Fix GCC path detection for Ubuntu 20.

  • Move libraries to a new class for linking options

  • Fix memory leaks when using the driver

  • Simplify ClangParser by making it static

  • Pack the lld headers as well

  • Import native DLL-s (tests and parser) with MSVC

  • Implement and export all methods in tests

[0.10.5] - 2020-6-27

  • Don't add ABI-specific parameters when wrapping C

  • Prioritize public non-field properties when resolving naming conflicts

  • Fix patching of virtual tables for MSVC with RTTI

  • Free the memory of the patched v-tables

  • Fix parsing of member pointers with MSVC

  • Generate valid C# for constructors taking const&

  • Generate valid C# for returned function pointers

  • Expose returned values of non-void setters

  • Ensure enumerations lack conflicts when renamed

  • Fix generation for fields of type const reference

[0.10.4] - 2020-5-23

  • Simplify the required headers for macOS bindings

  • Option to allow caller to specify it does not want unchanged output files to be modified. This supports incremental build in VS. (#1373) - Ali Alamiri ali.alamiri@sage.com

  • CreateInstance factory overload to pass flag informing wrapper if it should own the native pointer passed to it. - Ali Alamiri ali.alamiri@sage.com

  • force bash use to avoid ./premake5-linux: 3: ./premake5-linux: Bad substitution error if other default shell in the system - Lorenzo Delana lorenzo.delana@gmail.com

  • Made the original virtual tables static too

  • Pass native pointers to bases in the generated C#

  • Check type maps when printing C++ for pointers

  • Do not add type alias templates twice to the AST

  • Fix all leaks of memory in the old expressions

  • Add template functions to their context

  • Fix leaking memory by removing a useless assignment

  • Fix leaking the memory of an entire Clang AST

  • Ignore type maps when printing C++ for symbols

  • Implement more accurate managed type printing in C++ type printer.

  • Use a native type printer context when looking for type maps in CSharpSourcesExtensions.DisableTypeMap.

  • Use explicit type printer when printing types in C# GenerateMethodSpecifier.

  • Refactor CodeGenerator.GenerateMethodSpecifier to allow explicit specifier kind.

  • Do not check declaration access for explicitly generated declarations.

  • Fix TranslationUnit.FileRelativeDirectory to be more robust against null include paths.

  • Fix formatting to of Declaration.GenerationKind to ease debugging.

  • Ignore implicitly deleted copy constructor methods.

  • Correctly marshal constant arrays in C++/CLI (#1346)

  • Marshal pointer to primitive typedefs in C++/CLI (#1355) - Ali Alamiri ali.alamiri@sage.com

  • Fix a regression when renaming classes

  • Fix naming conflicts with nested types and members

  • publish the clang lib folder - Ali Alamiri ali.alamiri@sage.com

  • Implement basic support for parsing function-like macros.

  • Implement TranslationUnit.ToString() to help with debugging.

  • Add debug option and flags to the Premake build and compile scripts.

  • Generate valid C# for parameters typedef-ed to mapped types

  • Update the version of Mono used for builds (CI)

  • Fix the regressed C# marshalling of char*

  • Handle pointer to pointer param (#1343) - Ali Alamiri ali.alamiri@sage.com

  • Handle returned pointers to std::vector in C++/CLI - Ali Alamiri ali.alamiri@sage.com

  • Implement abstract templates to call virtuals

  • Correctly align printed information for debugging

  • Set the render kind of inline command comments

  • Fix all memory leaks in tests

  • Generate by ref parameters of type a pointer to enum

  • Use UnsupportedType description for type name instead of empty string (#1339) - Ali Alamiri ali.alamiri@sage.com

[0.10.3] - 2020-4-9

  • Ensure complete template specializations in AST

  • Add an option and checking for generation of deprecated declarations

  • Implement parsing and AST processing of C++ deprecated attributes

  • Make sure we use a native type printer for symbols code generation

  • Git ignore new include folders for cross generation

  • Fix marshaling for wchar_t in C++ generator mode

  • Fix includes setup for parser bindings generation in macOS host platform

  • Fix generation of field property setters in C++ generator

  • Fix FieldToProperty pass to ignore non-public properties in C++ generator

  • Fix declaration access for generated fields flattened from anonymous types

  • Change standard type maps to be more specific about its supported generators

  • Generate forward ref header for enum defined inside a class in C++/CLI (#1322) - Ali Alamiri

  • Move the GenerateInclude logic to GetTypeReference (#1319) - Ali Alamiri

  • By reference enum param fixes (#1321) - Ali Alamiri

  • Add declaration context as object to function class block - Ali Alamiri

  • Add blocks for ctor, dtor, and finalizer bodies. Add constructor that takes a bool from the caller to indicate if the callee should own the pointer passed to it or not - Ali Alamiri

  • Add generic type map handling methods for later refactoring of generators

  • Fix type printing of typedef qualifiers in C++ type printer

  • Fix C++ parser ambiguity in generation of C++ method identifiers by wrapping them in parens

  • Fix generation of C++ constructor for abstract classes

  • Fix generation of native instance constructors in C++ generator

  • Fix marshaling of C++ references in C++ marshaler

  • Minor refactoring to allow better IDE inspection and debugging

  • Rewrite GenerateEnumFromMacros to search through multiple translation units

  • Fix CppTypePrinter to check for typemaps for tag types and keep track of them

  • Implement a few overloads in CppTypePrinter that trigger the type maps checking code

  • Fix ignore type checking to take type maps into account

  • Fix ignored declaration checking to properties desugar field types

  • Fix GetterSetterToProperty pass heuristic to also detect “on” as a verb

  • CppTypePrinter now takes a BindingContext for further usage in type maps handling

  • Only generate “override” in header files for C++ generator

  • Guard MoveFunctionToClassPass pass registration against CLI and C# generators

  • Ignore generated field method acessors when processing properties in GetterSetterToProperty

  • Add cli namespace to header to ensure the array type does not conflict with other types called array - Ali Alamiri

  • Marshal non primitive fixed arrays (#1311) - Ali Alamiri

  • Ensure typedefs of std::vector are mapped - Ali Alamiri

  • Simplify the structure of the LLVM package

  • Always keep default constructors in the AST

  • Keep copy/move constructors and assignment in AST

  • Move the body of a template function to its header

  • Implement proper array printing with C array name suffix notation

  • Fix CLITypeReferences so it generates regular C++ code in C++ generator mode

  • Add CXXOperatorArityZero enum item for further usage in subsequent code

  • Initial C++ generator backend

[0.10.2] - 2020-3-28

  • Associate getter/setter methods with their associated property in GetterSetterToProperty pass

  • Added optional getter/setter pair creation for fields in FieldToProperty pass

  • Refactor CLI handling of enums to be based on generic C generator

  • Default to .h file extension in C code generator

  • Add helper methods to ignore and generate specific translation units

  • Guard a few more language-specific passes in the driver

  • Fix generation of multiple interfaces in C# for some edge cases

  • Fix templates to be abstract if any specialization is abstract

  • Fix TranslationUnit.FileRelativePath for invalid units

  • Re-use common C++ declaration type printing code in CLITypePrinter

  • Allow changing the default TypePrinterContextKind when creating a type printer

  • Remove needless pointer offsets from generated C#

  • Fix a crash for secondary bases with secondary bases

  • Fix bug related to processing of potential property methods

  • Ensure generated symbols can use placement new

  • Fix Mono not being found on the PATH on recent macOS versions

  • Instantiate exception specifications before reading

  • Update LLVM to the latest version

  • Fix a syntax error in CMake listing Clang modules

  • Enable building lld as part of LLVM

  • Restore modules needed for compiling with Clang

  • Support Visual Studio 2019 for building Clang

  • Update Travis to Ubuntu Xenial 18.04

  • Simplify and optimize the printing of pointers in C++

  • Fix printing of function pointers in C++

  • Don't export symbols for explicit specializations

  • Avoid invalid template specializations in tests

  • Update the printing of comments to the new Clang

  • Work around MSVC 32 crashing reading of exported symbols in Mach-O

  • Improve Xcode toolchain lookup to be more robust

  • Implement logic for -fgnuc-version= argument required by LLVM

  • Update LLVM to the latest version

  • Refactor Clang builtins directory logic and move it to the managed side

  • Escape C# strings correctly

  • Improve CS_INTERNAL so it now applies to all declarations

  • Print the parser target triple in verbose mode

  • Always re-create the Clang resource directory when building

  • Cleanup Clang resource directory lookup logic

  • Remove old workaround for testing issue that does not seem necessary anymore

  • Git ignore .vscode directory

  • Workaround Premake issue when copying the resource include directories at build time

  • Fix warning about #pragma once in source file

  • Update bootstrap tool to run against latest LLVM

  • Update bootstrap tool to find LLVM build directory

  • Add options to disable tests and examples from the build

  • Improve the ignoring of dependent name types

  • Implement UnresolvedUsingType and UnresolvedUsingTypename

  • Fix the tests for exception types

  • Switch to Xcode 11 in Travis CI

  • Extend printing and reading of exception types

  • Fix the check to ignore dependent name types

  • Ignore unused destructors when generating symbols

  • Fix the printing of "noexcept" in C++

  • Make destructors virtual in abstract classes for tests

  • Avoid generating abstract implementations for template classes

  • Fix template type checking in CovariantTypeComparer

  • Git ignore nested temporary obj folders

  • Workaround System.TypeLoad exception when running test-suite on macOS

  • Fix enum with zeros for hex literals

  • Fix the moving of free functions to classes to match by module too

  • Generate valid C# when an external module has an unsupported operator

  • Fix a possible overflown stack when ignoring

  • Force compilation of all functions of specializations

  • Fill in missed values when cloning functions

  • Optimize the moving of functions to classes

  • Delete a custom pass added as standard

  • Fix the C++ printing of function pointers in parameters

  • Eliminate generated symbols for ignored functions

  • Fix printing of type defs in C++

  • Remove the internal C# functions for virtual destructors

  • Give unique names to exported inlined functions

  • Generate symbols for methods of specializations

  • Optimize all passes which visited useless items

  • Make the pass for properties more extendable

  • Simplify overrides of overrides of secondary bases

  • Optimize calls to base getters in properties

  • Fix comparison of char and const char* in overloading

  • Optimize the pass for properties

  • Clarify limitations around exceptions and RTTI

  • Destroy returned by value std::strings

  • Upgrade ANSI marshalling to UTF-8 marshalling

  • Generate valid C# when a renamed override causes conflicts

  • Ensure protected nested types are accessible with multiple inheritance

  • Fix the regressed indentation of printed comments

  • Generate projects for .NET 4.7 to use new features

  • Simplify the generated C# for marshalling strings

[0.10.1] - 2019-7-4

  • Fix the getting of references to pointers in C#

  • Fix the passing of references to pointers in C#

  • Prefer non-mapped types when resolving ambiguous overloads

  • Make indexers use non-trivial copy ctors if any

  • Fix a memory leak when passing an indirect std::string

  • Build the generator before test bindings for easy testing

  • Fix memory leaks in the map for std::string

  • Fix the passing of std::string by value

  • Guard against null for objects passed by value

  • Generate valid C# for implicit conversion to const char*

[0.10.0] - 2019-6-25

  • Generate valid C# when passing a const ref to char

  • Generate valid C# when a secondary base has a public anonymous field

  • Generate valid C# when a method from a secondary base has no native symbol

  • Generate valid C# for typedef-ed type parameters

  • Ensure found type maps always contain the type sought after

  • Flatten anonymous types to avoid empty names

  • Generate valid C# for template parameters with a default value

  • Fix returned objects by value attributed with inalloca

  • Fix default arguments to only map to null if pointers

  • Generate valid C# for returned const void pointers

  • Fix regressions with void pointers and references

  • Generate valid C# for r-values to void pointers

  • Make the default build for Windows 64-bit

  • Sped the LLVM build on Windows up by parallelizing

  • Generate valid C# when a field with an anon type starts with '$'

  • Generate valid C# when a function is named "get"

  • Enable Clang-based look-up for system includes by default

[0.9.2] - 2019-5-8

  • Fix the Windows build by not storing Unicode in std::string

  • Fixed type map support for typedef types

  • Name anonymous types after the fields which use them

  • Generate valid C# when std::string is only used for variables

  • Generate valid C# when std::string is only used for non-private fields

  • Support indirect parameters

  • Add a test for passing by value of structs with copy ctors

  • Add parsing and AST support for RecordArgABI information in class records.

  • Fix the generated C++ for Xcode 10.2

  • Optimize renaming of declarations named after keywords

  • Optimize the cleaning of invalid names

  • Fix a crash when a function pointer takes a function pointer

  • Generate valid C# for returned const char*&

  • Generate valid C# for overloads with types nested in templates

  • Fix the naming of anonymous types when 2+ types are nested 2+ levels

  • Remove ParserOptions.Abi since its misleading as it serves no purpose

  • Improved robustness when parsing C++ ABI kind

[0.9.1] - 2019-4-13

  • Generate valid C# for template indexers taking const char*

  • Restore removed specializations

  • Add a generic pointer to resolve ambiguity

  • Fix a crash when a function pointer is a template arg

  • Expose public anonymous types

  • Fix the generated C# for fields of type function pointer

  • Fix the generated C# for const char*&

  • Fix the pass for duplicate names not to compare return parameters

  • Fix the generated C# when type arguments are mapped the same

  • Fix typo in options: chsarp -> csharp

  • Fix #1191 CppSharp.CLI.exe --rtti sets -fno-rtti to clang

  • Fix the generated C# for a case with 2 template args

  • Fix the generation of properties for locations in expressions

  • Added statement visiting to IAstVisitor

  • Fix the generated C# when a dependent param has a default value

  • Fix ambiguous code when a nested type and a property-like method with overloads have the same name

[0.9.0] - 2019-3-1

  • Extended the AST with C++ statements and expressions.

  • Made public the finding of enabled type maps by strings.

  • Fixed the renaming of properties with the same name as their owners.

  • Simplified the pass for properties.

  • Skip ignored bases in ClassExtensions.GetBaseProperty.

  • Fixed missing options copy in ParserOptions copy constructor.

  • Use MSBuild when building LLVM on Windows due to PDB issues with Ninja.

  • Improve robustness when parsing types and decls.

  • Fixed indentation regressions.

  • Deleted useless output.

  • Fixed naming edge case in GenerateProperties.GetReadWritePropertyName.

  • Added PrintModuleOutputNamespace option to CSharpTypePrinter.

  • Fixed extraneous new lines when generating multi-line comments.

  • Obsoleted all hand-written types for expressions.

  • Use takeError() when handling errors in parsing libraries.

  • Fixed a crash with TranslationUnit.FileName property.

  • Added ForceClangToolchainLookup option to force to use Clang's toolchain lookup code.

  • Extract ParserOptions cloning code into a copy constructor.

  • Improve ParserOptions.Verbose to print compiler arguments.

  • Fixed Options.DryRun to not generate any binding code.

  • Added some helper methods in Enumeration to work with scoped enumerations.

  • Added a parsing option to skip gathering of native layout info.

  • Fixed the generated C# when an instance method has a parameter named "instance".

  • Fixed the generated C# for const/non-const overloads with > 1 param.

  • Fixed the generated C# when a ref parameter is named after a keyword.

  • Fixed the generation for parameters of type void**.

  • Fixed the generated C# for indexers in templates specialized with void*.

  • Fixed the generated C# for template specializations of pointers.

  • Fixed the generated C# for const void*& in parameters.

  • Fixed the generated C# when returning a non-const char*.

  • Fixed the generated C# for parameters initialized with {}.

  • Fixed the generated C# when a template is specialized with T and const T.

  • Fixed the generated C# when an unsigned enum is assigned a negative value.

[0.8.23] - 2019-1-31

  • Keep Clang libTooling libs when packaging LLVM.

  • Improve error handling in build scripts UseClang().

  • Added .NET Core build folder to Git Ignore .

  • Initial integration of Clang AST viewer GUI tool.

  • Made an exception serializable and removed another.

  • Fixed the warnings in the test C++ for C# only.

  • Fixed a crash when parsing libraries on macOS.

  • Fixed error handling when parsing non-existent libraries.

  • Added support for building with Clang and LLD.

  • Switched to use csc.exe Roslyn compiler under Mono

  • Disable most of the support for explicit pre-C++11 ABI since we do not need it anymore

  • Fixed warnings in native test code.

  • Fixed the generation of dependent virtual methods.

  • Fixed overloading of operators with parameters mapped to the same type.

  • Extended the type maps for primitive strings to C++/CLI.

  • Handled int and long in maps to help resolve ambiguity.

  • Simplified type maps by unlinking them from declarations.

  • Properly hashed types to optimize their storage in maps.

  • Fixed right-value references creating ambiguous overloads.

  • Fixed the generated code in a case of ambiguous overloads.

  • Added type maps for primitive strings (pointers to char).

  • Added an option for skipping private declarations.

  • Tested indirect calls from native code of overrides in the target language.

  • Initial support for building under .NET Core.

  • Updated the CI on Linux to use GCC 7.

  • Exported all additional symbols on macOS.

  • Fixed error handling and message when parsing non-existent files.

  • Added a test for passing an std::string by value.

  • Fixed the marshalling of std::string with GCC 6+ on Linux.

  • Added a type map for char.

  • Make Windows10SDK detection more robust

  • Cached found type maps for faster look-ups.

  • Deleted unused and slow code.

  • Fixed the parsing of functions with integral template args.

  • Decreased the build time on the Linux CI.

  • Fixed a crash when parsing type aliases.

  • Fixed the build of the parser when its path has spaces.

  • Changed type maps to only return types - no strings.

  • Simplified type maps by using static objects to disable as needed.

  • Optimized the walking of the managed AST.

  • Optimized the generation of C# by not splitting any strings.

  • Optimized the walking of the AST by simplifying its search.

  • Fixed the late parsing of templates.

  • Fixed LLVM/Clang tar.gz archive extraction using 7-Zip on Windows.

  • Fixed Windows SDK version detection in build scripts.

  • Resolved ambiguity between char-like types in the generated C#.

  • Fixed the generated C# for templates with > 1 ctor taking a pointer to a class.

  • Fixed the generated C# for pure virtual functions with default arguments.

  • Fixed the generated C# for default arguments of type pointer to a function.

  • Fixed the generated C# for a certain case of two default parameters.

  • Fixed the generated C# for arguments with default values of "nullptr".

  • Fixed the generated C# for setters with default parameters.

  • Fixed the generated C# for public fields with types mapped to primitive.

  • Fixed the generated C# for constant references to primitives.

  • Upgraded the CI script to use Ubuntu 16.04.

  • Fixed ambiguity when the type of a parameter is mapped to a type in an overload.

[0.8.22] - 2018-9-15

  • Fixed renaming when items of an enum only differ by case.

  • Fixed the generated C# for destructors of abstract classes.

  • Stopped using methods deprecated in recent Clang.

  • Excluded many unused modules when building LLVM and Clang.

  • Worked around a missing symbol from a template specialization on macOS.

  • Updated to LLVM/Clang revisions 339502/339494 respectively.

  • Fixed the generation when a secondary base is used in more than one unit.

  • Fixed debugger display variable reference in Block class.

[0.8.21] - 2018-8-1

  • Only generated the system module in C# generators.

  • Fixed missing save of generated module template to outputs.

  • Fixed code generator to generate the system module even in single file per unit mode.

  • Silenced verbose duplicate constructor and operator warnings.

  • Improved the defaults of necessary generation options to improve accessibility.

  • Called the parser setup code in CLI.

  • Only included header files when scanning directories in CLI.

[0.8.20] - 2018-5-22

  • Fixed generation support for pointers to enums in C#.

  • Fixed a case of functions converted to methods.

  • Improve error handling in case of exceptions in CLI tool driver.

  • Added an option to the CLI tool for enabling RTTI.

  • Improved the messages for errors in the CLI tool.

  • Added parameter index to managed marshal variables.

  • Changed the generated C# for const references to primitives as just primitives.

  • Error messages are now written to stderr.

[0.8.19] - 2018-1-30

  • Added getting of the path to Xcode based on xcode-select.

[0.8.18] - 2018-1-28

  • Do not generate wrappers for template specializations if original method in template class is ignored.

  • Add one more include path which Linux usually expects.

  • Evaluate expressions for enums generated using GenerateEnumFromMacros

  • Evaluate expressions when generating enum from macros - ExpressionEvaluator taken from https://github.com/codingseb/ExpressionEvaluator

  • Set the name-space for enums generated from macros.

  • Preliminary script for building 32-bit Nuget package

  • Field property getter returns non-value types by reference instead of by copy.

  • Update VS check when downloading pre-compiled LLVM packages.

  • Add IgnoreConversionToProperty(pattern) and ForceConversionToProperty(pattern).

  • Add UsePropertyDetectionHeuristics option to DriverOptions.

  • Add "run" to verbs.txt

  • Added support for 16-bit wide characters (char16_t).

  • Fixed the generated C++ for symbols when protected classes need them.

  • Removed the possibility for conflicts between overloads when generating C++ for symbols.

[0.8.17] - 2017-12-25

  • Collected extra symbols in the order of their compilation.

  • Fixed the generated C# when a specialisation of a template used as a secondary base has an invalid function.

  • Fixed the generated C# when a template interface specialised with another specialisation returns a template parameter.

  • Fixed the generated C# when a default arg is assigned a specialisation also used as a secondary base.

  • Fixed a crash when a constructor takes a template or specialisation.

  • Fixed the generated C# for public fields with type a dependent pointer.

  • Enabled classes having specializations for secondary bases to call their extensions.

  • Fixed the generated C# for subclasses of specialisations used as secondary bases.

  • Fixed the generated C# when a template specialization with extensions is used for a secondary base.

  • Extended the multiple inheritance to work for templates.

  • Fixed a regression causing public fields of type specialization to be ignored.

  • Fixed the generated C# for templates with optional arguments.

  • Represented "void" with "object" for template arguments in the generated C#.

  • Fixed the generated C# for public fields with type a dependent function pointer.

  • Fixed the generated C# when a constructor has a default parameter with type an external specialisation.

  • Set an index when marshalling the value in setters of properties.

  • Fixed the generated C# when a function uses an external specialisation.

  • Fixed the generated C# when a base class is an external specialisation.

  • Fixed the generated C# for indexers with dependent keys.

  • Fixed the generated C# for templated indexers specialised with enums.

  • Add compiler/abi information to LLVM package names on linux.

  • Exported entire specialisations when they only have valid functions.

  • Considered dependent fields when generating internals for types nested in templates.

  • Removed extensions for non-generated template specialisations.

  • Fixed the generated C# when a template returns a specialisation with itself as a type arg.

  • Fixed the generated C# for members of types nested in templates.

  • Fixed the generated C# when a template is nested in another.

  • Add ability for managed module wrapper to reference extra assemblies.

  • Re-added linux include path that was removed by mistake.

  • Enable debug information generation for all tests.

  • Fix debug output not being generated when AST element had no comment.

  • Explicitly link to libstdc++ on linux.

  • All arguments passed to build/Compile.sh are passed to premake. Allows more fine-grained build customization when using this shell script for compiling.

  • Tweak linux include dirs, previous change broke GCC7 include dirs on archlinux.

  • Consistent class/struct keywords fixed for cases where wrapper class would contain members from several different translation units.

  • Fix debug output breaking generated binding code.

  • Completely remove GenerateUnformatted() method.

  • CI: x64 builds on msvc and sudo requirement for travis

  • Always generate formatted code.

  • Fix Delegates name-space being not generated. In some cases Delegates name-space could be attached to a name-space which is not wrapped and as a result of that Delegates name-space was also not generated in wrapper code resulting in a wrapper build errors. Change adds extra logic which tries to find the correct library name-space if more than one name-space is present.

  • Consistently declare classes/structs. Fixes issue where compilation error is produced due to file name containing constants matching class marked as value type.

  • Fix linking to LLVM libs on linux, when system has llvm/clang installed.

  • Enable cxx11 abi for GCC 4.9+ on linux.

  • Worked around a bug in the Mono C# compiler when casting generics.

  • Fixed a crash when the body of a templated function contains references to non-functions.

  • Use correct LLVM build dir for includes from unpackaged LLVM builds

  • get_llvm_build_dir() returns "build" subdir if it exists, if not - subdir with package name.

  • Fix linked libs for linux

  • Use correct LLVM build dir for includes from unpackaged LLVM builds.

  • Removed a duplicate explicit instantiation from the tests.

  • Cloning llvm from git replaced with downloading archives of exact commits from github. This is much faster.

  • Worked around duplication of types nested in templates and forwarded.

  • Fixed a crash when passing null as an std::string on Unix.

  • Force-set platform type to managed targets.

  • Fix linux include paths in ParserGen and CLI generator.

  • Fix build errors in CppSharp.Parser.Bootstrap target.

  • Fixed a crash when there are parsing errors.

  • Fixed the collection of additional symbols to ignore warnings.

  • Fixed the generated C# when a constructor takes a specialisation.

  • Fixed a possible crash when instantiating template functions in the parser.

  • Fixed the generated C# for templates with fields other templates not used anywhere else.

  • Fixed the generated C# when using std::map.

  • Fixed the generated C# for specialisations with an ignored specialisation as an arg.

  • Fixed the generated C# for specialisations only used as type arguments.

  • Removed extensions for internal template specialisations.

  • Fixed the parsing of an undeclared template specialisation with an extension method.

  • Validated bodies of instantiated template functions.

  • Added a new field accessor synth kind.

  • Improved IsSynthetized check to handle property setters.

  • Improve get base method and property methods to work with generalized declarations.

  • Added AssociatedDeclaration to Declaration copy constructor.

  • Included template specialisations only used as returned types.

  • Included the destructor of std::allocator to the C++ symbols.

  • Prevented C++ generation for invalid specialised functions.

  • Fixed the generated C# for fixed arrays of Booleans

  • Updated to LLVM/Clang revisions 318543/318538 respectively.

  • Fixed the script for LLVM to handle paths with spaces.

  • Generalized method fields to declaration associations.

  • Improved debugging display for declarations.

  • Added optional visiting of property accessors.

  • CodeGenerator is now an IAstVisitor.

  • Cleaned up the additional parser options after parsing headers.

  • Fixed the generated C++ for symbols to be compatible with Clang.

  • Fixed the generated C# when a type nested in a template is forwarded.

[0.8.16] - 2017-11-10

  • Fixed a crash when parsing unnamed declarations in name-spaces.

[0.8.15] - 2017-11-7

  • Handled any level of nesting when generating internals for specialisations in C#.

  • Fixed the generation of internals for template specialisations.

  • Ensured symbols for nested template specialisations.

  • Fixed the generated C++ for external template specialisations.

  • Completed just class template specialisations used in functions.

  • Fixed a regression of generating templates in C# with the option off.

  • Optimised the parser by skipping the system translation units.

  • Reused parameters between functions and their types (as Clang does).

  • Added an option for specifying STD types to bind.

  • Reduced time and memory during generation by skipping methods of most STD classes.

  • Improved the check for a layout on a record.

  • Fixed a crash when trying to get a source location for an implicit declaration.

  • Fixed the generated C# for a fixed array of pointers.

  • Removed unused STD enumerations from generation.

  • Fixed a crash when a comment contains regular text wrapped in <>.

  • Made only really used classes internal.

  • Fixed a typing error in the name of a function.

  • Ignored return parameters when fixing default arguments of overrides.

  • Ensured no overflown stack in the AST converter.

  • Fixed code generation for using template types.

  • Improved debugging display for Type type.

  • Fixed incorrectly generated bindings for class with non-type template arguments.

  • Fixed the generated C# for templates derived from regular dynamic classes.

  • Ensured all non-system template specialisations are complete.

  • Fixed a problem when walking the managed AST because friend templated classes were seen as declared multiple times and resulted into a crash.

  • Improved type notation in the manual.

  • Documented string marshaling behavior.

  • Fixed implicit class record walking in the parser.

  • Added a new verbose flag to the CLI tool and improved verbose handling.

  • Fixed duplicate generation of forward declared class.

  • Small cleanup and minor optimizations in ResolveIncompleteDeclsPass.

  • Improved the fix for handling non-type params in template specialisation types.

  • Fixed template parsing issue with processing of type locs.

  • Fixed a parser bug when dealing with DependentTemplateSpecializationTypeLoc.

  • Fixed an erroneous usage of LLVM cast with a regular C++ type. Only found with debug-mode LLVM build.

  • Fixed VS2017 system includes search error #957 (#958)

[0.8.14] - 2017-9-17

  • Added experimental support for templates.

  • Fixed the generated C# when a virtual function takes a fixed array.

  • Fixed the generated C# for fixed arrays in types of parameters.

  • Fixed the generated C# for virtuals taking arrays of objects.

  • Lookup Mono SDK path on Windows registry.

  • Fixed the generated C# when a virtual function takes an array.

  • Fixed the generated C# with 4+ modules and repetitive delegates.

  • Added C# marshalling of parameters of type array of const char* const.

  • Added C# marshalling of parameters of type array of const char*.

  • Fixed null arrays in C# to be passed as such to C/C++.

  • Added C# marshalling of parameters of type array of objects.

  • Added C# marshalling of parameters of type array of primitives.

  • Added marshalling of parameters of type array of pointers.

  • Fixed the generated C# for two anonymous types nested in another anonymous type.

  • Removed unused internals from the generated C#.

  • Added an example for the parser API-s.

  • Add C++17 to the parser options

  • Compile.sh script now has improved error handling.

  • Linux toolchain can be supplied in the same spirit in path probing on Mac.

  • Enabled empty arrays of non-primitives only when not using MSVC.

  • Ignore zero-sized constant C array types.

  • The compilation platform is now nullable by default and validated by the host platforms.

  • Added LLVM target initialization and supporting libraries for parsing inline assembly.

  • Fixed a crash when trying to use a VS version missing from the system.

  • Fixed the binding of multiple identical function pointers with a calling convention.

  • Got rid of anonymous names for delegates.

  • Fixed the calling conventions of delegates.

  • Ensures that if a delegate is used for a virtual as well as something else, it finally ends up as public.

  • Fixed the code generation when the return type of a method is a function pointer that has been used somewhere else as well.

  • Added Access and Calling convention to the delegate definition.

  • Generated properties from setters returning Booleans.

  • Added some aliases to options in the CLI tool.

  • [generator] Improved processing for C++ inline namespaces.

  • Fixed initial output messages in the CLI.

  • Generated properties from get()/void get() pairs.

  • Restored the option for generating one C# file per unit.

  • Fixed the sorting of modules to also work with manually added dependencies.

  • Do not generated unformatted code if debug mode is enabled.

  • Added an option to the CLI for enabling debug mode for generated output.

  • Improved the directory setup in the CLI in case the path is not a file path.

  • Adds a new option to the CLI for automatic compilation of generated code.

  • Adds a new dedicated "-exceptions" flag to enable C++ exceptions in the CLI.

  • Added a new -A option to the CLI to pass compiler arguments to Clang parser.

  • Fixed the name of an option in the CLI.

  • Removed the showing of help for the CLI if we have output an error previously.

  • Improved error messages in the CLI.

  • Improve platform detection in the CLI so the current platform is set by default.

  • Fixed a directory check in the CLI that was throwing exceptions in Mono.

  • Fixed the generated C# indexers for specialisations of pointers.

  • Fixed the generated C# for increment and decrement operators.

  • Removed leftovers in the comments from unsupported custom xml tags.

  • Fixed the generation of symbols to check all base classes up the chain.

  • Printed the text from unsupported comment tags.

  • Fixed the generated C# for a case of a typedef of a function pointer.

    Typedefs of function pointers can be written in two ways:

    typedef void (*typedefedFuncPtr)();
    
    int f(typedefedFuncPtr fptr);
    
    typedef void (typedefedFuncPtr)();
    
    int f(typedefedFuncPtr* fptr);
    
    Up until now we only supported the former.
    
  • Fixed the C# generation for functions with typedefed function pointers as params

  • Set the name-space of a parameter to its function.

  • Included the comments plain text to the remarks block.

  • Fix the typo in LLVM.lua

  • Prevented projects from being generated using GenerateProjects.bat

  • Fixed the generated C# for setters with a reference to a primitive type.

  • Ensured a single element for remarks in the generated XML documentation comments.

  • Fixed the renaming of methods in forwarded types from secondary bases in dependencies.

  • Added to a method a list of its overridden methods.

  • Generated internals of external specialisations only if the template has template fields.

  • Equalised the access of overrides and their base methods.

  • Fixed the code generation for indexers returning a void pointer.

  • Fixed the generated C# when a protected constructor has a parameter with a protected type.

  • Fixed the generated C# when an external specialisation with a dependent field is used as a field.

  • Made Function a DeclarationContext to match the Clang AST.

  • Made the C/C++ language switches adjustable in managed code.

  • Added an option to enable or disable RTTI.

  • Fixed the generation of inlines to handle types in classes in name-spaces.