Repository navigation
Silk.NET 3.0 - #864
Draft
Perksey wants to merge 535 commits into
Draft
Silk.NET 3.0#864Perksey wants to merge 535 commits into
Perksey wants to merge 535 commits into
Conversation
This was referenced May 7, 2022
Merged
Merged
Merged
Bumps [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet) from 0.13.6 to 0.13.7. - [Release notes](https://github.com/dotnet/BenchmarkDotNet/releases) - [Commits](dotnet/BenchmarkDotNet@v0.13.6...v0.13.7) --- updated-dependencies: - dependency-name: BenchmarkDotNet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [Microsoft.CodeAnalysis.CSharp.Scripting](https://github.com/dotnet/roslyn) from 4.6.0 to 4.7.0. - [Release notes](https://github.com/dotnet/roslyn/releases) - [Changelog](https://github.com/dotnet/roslyn/blob/main/docs/Breaking%20API%20Changes.md) - [Commits](https://github.com/dotnet/roslyn/commits) --- updated-dependencies: - dependency-name: Microsoft.CodeAnalysis.CSharp.Scripting dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps `RoslynPackageVersion` from 4.6.0 to 4.7.0. Updates `Microsoft.CodeAnalysis.CSharp` from 4.6.0 to 4.7.0 - [Release notes](https://github.com/dotnet/roslyn/releases) - [Changelog](https://github.com/dotnet/roslyn/blob/main/docs/Breaking%20API%20Changes.md) - [Commits](https://github.com/dotnet/roslyn/commits) Updates `Microsoft.CodeAnalysis.CSharp.Workspaces` from 4.6.0 to 4.7.0 - [Release notes](https://github.com/dotnet/roslyn/releases) - [Changelog](https://github.com/dotnet/roslyn/blob/main/docs/Breaking%20API%20Changes.md) - [Commits](https://github.com/dotnet/roslyn/commits) Updates `Microsoft.CodeAnalysis.Workspaces.MSBuild` from 4.6.0 to 4.7.0 - [Release notes](https://github.com/dotnet/roslyn/releases) - [Changelog](https://github.com/dotnet/roslyn/blob/main/docs/Breaking%20API%20Changes.md) - [Commits](https://github.com/dotnet/roslyn/commits) --- updated-dependencies: - dependency-name: Microsoft.CodeAnalysis.CSharp dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.CodeAnalysis.CSharp.Workspaces dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.CodeAnalysis.Workspaces.MSBuild dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [HtmlAgilityPack](https://github.com/zzzprojects/html-agility-pack) from 1.11.51 to 1.11.52. - [Release notes](https://github.com/zzzprojects/html-agility-pack/releases) - [Commits](zzzprojects/html-agility-pack@v1.11.51...v1.11.52) --- updated-dependencies: - dependency-name: HtmlAgilityPack dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dylan Perks <11160611+Perksey@users.noreply.github.com>
Bumps [Microsoft.Build.Framework](https://github.com/dotnet/msbuild) from 17.7.0 to 17.7.2. - [Release notes](https://github.com/dotnet/msbuild/releases) - [Changelog](https://github.com/dotnet/msbuild/blob/main/documentation/Changelog.md) - [Commits](https://github.com/dotnet/msbuild/commits) --- updated-dependencies: - dependency-name: Microsoft.Build.Framework dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.7.1 to 17.7.2. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](microsoft/vstest@v17.7.1...v17.7.2) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [Microsoft.Build.Locator](https://github.com/microsoft/MSBuildLocator) from 1.5.5 to 1.6.1. - [Release notes](https://github.com/microsoft/MSBuildLocator/releases) - [Commits](https://github.com/microsoft/MSBuildLocator/commits) --- updated-dependencies: - dependency-name: Microsoft.Build.Locator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.7.1 to 17.7.2. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](microsoft/vstest@v17.7.1...v17.7.2) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [xunit.runner.visualstudio](https://github.com/xunit/xunit) from 2.4.5 to 2.5.1. - [Commits](https://github.com/xunit/xunit/commits/2.5.1) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [Microsoft.Build.Locator](https://github.com/microsoft/MSBuildLocator) from 1.6.1 to 1.6.10. - [Release notes](https://github.com/microsoft/MSBuildLocator/releases) - [Commits](https://github.com/microsoft/MSBuildLocator/commits) --- updated-dependencies: - dependency-name: Microsoft.Build.Locator dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [xunit](https://github.com/xunit/xunit) from 2.4.2 to 2.5.1. - [Commits](xunit/xunit@2.4.2...2.5.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [xunit.runner.visualstudio](https://github.com/xunit/xunit) from 2.5.0 to 2.5.1. - [Commits](xunit/xunit@2.5.0...2.5.1) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [xunit](https://github.com/xunit/xunit) from 2.5.0 to 2.5.1. - [Commits](xunit/xunit@2.5.0...2.5.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dylan Perks <11160611+Perksey@users.noreply.github.com>
Bumps [HtmlAgilityPack](https://github.com/zzzprojects/html-agility-pack) from 1.11.53 to 1.11.54. - [Release notes](https://github.com/zzzprojects/html-agility-pack/releases) - [Commits](zzzprojects/html-agility-pack@v1.11.53...v1.11.54) --- updated-dependencies: - dependency-name: HtmlAgilityPack dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Evaluate Apple Silicon for CI * Let's see what happens if we don't install old .NET versions * sus error message on .NET 6 * BinaryFormatter 🤮🤮🤮 * Work around some deficiencies in the RC1 SDK (dotnet/sdk#35811) * oops * github.dev find+replace does not work * Maths unit tests are now .NET 8 * Vulkan unit tests are now .NET 8 * Ok let's just disable tests for now * Don't forget the public API! * Attempt to fix android, as well as cache to make faster maybe * Install Android platforms * Reenable .NET 6? * Install workloads for .NET 6 and .NET 8 * Comical hack * ANNIHILATE .NET 8 * Install Android 31 * Maybe the tests are fine on .NET 6? * they were not fine * Forgo Apple Silicon for now * Apparently caching is slower than JUST DOING IT * Fix a very sus unit test failure * Just testing something... * Update build.yml * attempt 2 * Tinker with Apple Silicon again * Detailed verbosity, will probably regret this * Update .NET 6 * Update build/nuke/Build.Support.cs
Bumps [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet) from 0.13.8 to 0.13.9. - [Release notes](https://github.com/dotnet/BenchmarkDotNet/releases) - [Commits](dotnet/BenchmarkDotNet@v0.13.8...v0.13.9) --- updated-dependencies: - dependency-name: BenchmarkDotNet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet) from 0.13.8 to 0.13.9. - [Release notes](https://github.com/dotnet/BenchmarkDotNet/releases) - [Commits](dotnet/BenchmarkDotNet@v0.13.8...v0.13.9) --- updated-dependencies: - dependency-name: BenchmarkDotNet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix pooled array leak in string marshalling * fix pooled array leak in string marshalling
* Update OpenAL name overrides to match the 2 character acronym threshold used by other bindings The default acronym threshold was changed during Exanite#29, which was merged as part of #2503. * Start of feature/nested-struct-name-affixes branch * Cleanup leftover return statement * Split TransformHandles into two mods * Rename UseDSL to UseDsl Considering we decided to follow Microsoft's Framework Design Guidelines (acronym threshold of 2) for the bindings and rest of the API, might as well be consistent here. * Cleanup unused property in TransformHandles * Cleanup usages of redundant collections expressions in TransformHandles * Add NameAffixer.AddResolvedNameAffix() for handling compound names * Use AddResolvedNameAffix for extracted function pointer delegate types * Use AddResolvedNameAffix for extracted nested structs and remove name separation hack (no longer necessary) * Rename resolved affix to referenced affix and add parsing code for referenced affixes * Add extra ConsecutiveNumbers test case documenting that Xs between numbers are normalized * Fix incorrect declarationOrder implementation * Change Prettify to not prefix identifiers starting with numbers This lets us handle prefixing and prettification separately, which notably is important if we add prefixes after prettification. We want to prefix the final name, not the intermediate name in this case. * Change the list and order of INameTrimmers used to be statically configured (cherry picked from commit bc94260) * Replace now outdated comment * Move PrettifyNamesTrimmer higher up in the class to make it more obvious that it is not the last trimmer * Remove INameTrimmer.Version This no longer makes sense to keep and enabling features by baseline version seems fiddly. If we need to toggle features for newer versions, we can explicitly add a boolean config option. * Add PrefixIfStartsWithNumberTrimmer * Remove TrimmerBaseline config option * Rename INameTrimmer to INameProcessor and update rest of codebase * Simplify name affixer name processor names to be StripAffixesNameProcessor and ReapplyAffixesNameProcessor * Shorten names a bit more for readability * Decide to only support references within the same scope depth Kinda a cop out decision, but it keeps thing simple (and thus maintainable) and implementing it fully seems overkill for what we need. * Restrict feature set of AddReferencedNameAffix even more for simplicity * Implement referenced affixes and change how -Delegate types generated for function pointer types are named * Update OpenAL name overrides in generator.json This is because we no longer output the separating underscore in ExtractNestedTyping * Update doc comment in ServiceCollectionExtensions to indicate removal of INameTrimmer registrations * Update name overrides for OpenAL to match new Delegate type naming convention Note that the goal is to eventually remove the name overrides for the `EFXEAXREVERBPROPERTIESflLateReverbPan` and `-Delegate` cases entirely. This is because these are theoretically possible to handle automatically and the reason it doesn't work is due to an edge case interaction with the name override system. See the "Tasks" section here for more info: #2555 * Optimize comparison by hoisting the calculation * Add topological sort to ReapplyAffixesProcessor This covers cases where there are multiple levels of nested structs, such as in SDL: GamepadBinding contains GamepadBindingInput which contains GamepadBindingInputAxis * Improve error handling by checking for case where dependencies are not fully fulfilled * Edit error message * Add test: PrettifyNamesTests.SuccessfullyUsesReferencedAffixes * Use "SDL.gen.cs" for test document name This is just to hint that these structs come from SDL * Add tests for referenced affix behavior MissingReferencedAffix_Throws currently fails, but seems to be an unrelated issue. * Alphabetically sort the mod names * Add start of IdentifySharedPrefixes mod * Work on IdentifySharedPrefixes * Remove ApplyPrettifyOnlyPipeline * Rename BreakIntoWords as SplitIntoWords * Remove the double legacy NameTrimmers * Fix compile errors * Temporary: Disable all mods after PrettifyNames * Add SharedPrefix affix config to Vulkan job * Remove unused isContainer param from GetTrimmingName * Work on IdentifySharedPrefixes * Replace regex based NameUtils.LenientUnderscore() with NameSplitter.Underscore() * Fix compile errors due to changes * Remove NonDeterminant/Transformed attribute handling from PrettifyNames * Slightly simplify NameTrimmer * Remove NameTrimmer usage from ExtractNestedTyping and slightly optimize the foreach loops * Slightly cleanup NameTrimmer * Annotate the param names for NameTrimmer's GetPrefix call for readability * Implement visitor for IdentifySharedPrefixes * Properly store scopes * Handle filtering of non C-prefixed names * Work on migrating the NameTrimmer code over to IdentifySharedPrefixes * Cleanup * Add affix handling to IdentifySharedPrefixes * Implement shared prefix identification output to name affixes * Fix incorrect Rewriter implementation * Simplify code * Add missing ModConfiguration attribute * Fix incorrect method call * Fix incorrect member name output for identified prefixes * Fix duplicate key exception caused by functions being able to have duplicate names * Revert "Temporary: Disable all mods after PrettifyNames" This reverts commit 3ec90a7. * Update generator config for OpenAL, OpenGL, and SDL to use IdentifySharedPrefixes * Add another test case as an example of how "2D" is split * Add another prefix override for SeparableTargetEXT This is because 2D isn't trimmed properly by my new name splitter, but I decided that this case was not worth handling in favor of keeping the trimming code simple. See my thoughts here: https://discord.com/channels/521092042781229087/1485943448069738608/1489457083857506336 * Migrate over most prefix trimming/identification tests from PrettifyNamesTests to IdentifySharedPrefixesTests * Update PrettifyNamesTests now that prefix identification is done separately * Migrate over the NameTrimmerTests * Remove IdentifiesSharedPrefix_WhenPrefixesDeclared See #2557 for full reasoning, but the short is that this edge case is purely theoretical and can be handled later on when actually necessary. * Also remove the snapshot for IdentifiesSharedPrefix_WhenPrefixesDeclared * Change INameProcessor to be private to PrettifyNames * Change nPasses to be a class constant to allow usage of doc comments * Rename _forbiddenTrimmings to _forbiddenPrefixes and adjust docs * Change GetPrefix to use a non-null scope parameter for consistency * Add comment explaining why the topological sort exists * Begin replacing the "container" terminology with "scope" * Fix failing tests since the global scope is now represented with an empty string instead of null * Cleanup IdentifySharedPrefixes * Combine EnumInProgress with TypeInProgress * Simplify affix data storage and retrieval * Update docs for Visitor.AffixData * Edit docs for IdentifySharedPrefixes * Swap parameter order on ReportName in IdentifySharedPrefixes * Rewrite PrettifyNames.Visitor to match IdentifySharedPrefixes.Visitor This reduces the amount of code by ~100 lines (1331 -> 1227 lines), which is pretty significant. * Reorder PrettifyNames.Configuration members to improve scannability * Begin rewriting the name processing part of PrettifyNames.ExecuteAsync * Adjust error message for cycle detection * Fix missing method declaration data * Fix missing name data * Add todos and work on updating docs * Change code and comments to refer to trimming names as original names (and some other cleanup) * Move CandidateNames into PrettifyNames * Fix typo * Rename DiscrimStr to GetMethodDiscriminator * Cleanup naming * Use if statements instead of ternaries for populating dictionaries If statements are generally easier to read and debug for this. That said, I do find the original ternary approach better for the method discriminator tuple case, but I decided to use it for all 3 cases for consistency. * Update name conflict resolution code to account for non-method and method names being mixed together now * Add another todo * Change NameProcessorContext to be a class * Begin exposing the entire set of names to name processors and rewriting the rest of the pipeline as INameProcessors * Roughly outline the final implementation and move code to where it roughly belongs * Define name processor inputs * Also provide affix config to ReapplyAffixesProcessor * Implement HandleOverridesProcessor * Cleanup NameProcessorContext * Remove helper data retrieval methods from ScrapedNameData since it can lead to inefficient data access * Remove ScrapedNameData since it's now just an empty wrapper class * Reimplement StripAffixesProcessor * Reimplement PrettifyProcessor * Reimplement ReapplyAffixesProcessor * Reimplement PrefixIfStartsWithNumberProcessor * Edit documentation and add RemoveUnmodifiedFinalNamesProcessor * Add docs for PrefixIfStartsWithNumberProcessor * Implement ResolveConflictsProcessor using adapted name conflict resolution code * Add remark doc comment on ResolveConflictsProcessor about it copying names from the final to working set * Add NameSymbolVisitor for gathering symbols to rename * Add remark comment on nested type support in PrettifyNames * Fix constructors not getting renamed * Add PrettifyNamesTests.ConflictsAreResolved_ForMethodsAndConstants (currently fails) * Work on non-method/method conflict resolution * Also add test case: ConflictsAreResolved_ForMethodsAndConstants_WithAdditionalDiscriminatorAffixes * Ensure conflicts are iterated deterministically This wasn't an actual observed issue, but is a possible edge case I noticed when I was reading the code. The underlying data collection is a hashset or dictionary, both of which have non-deterministic iteration order. This commit adds a tie-breaker to prevent this issue from possibly happening. * Add ConflictsAreResolved_ForMethodsAndConstants_WithAdditionalDiscriminatorAffixes_ReversedPriority and add more comments on why the tests exist * Implement non-method/method conflict resolution and fix secondaries not getting chosen properly * Ensure that the temporary data collections are allocated once and edit comments/variable names to be clearer * Implement "-Value" suffixing for non-methods conflicting with methods and update test cases to reflect expected behavior * Decide it's not worth implementing cross-scope name referencing for affixes yet * Remove unused RenamedType struct and unused MemberData.Name property * Fix -Value suffixing not working properly I expected this to be an issue *eventually*, but apparently it also affects the SDL output already. This is probably because SDL has multiple overloads of the SDL_main method, which my test case does not test for. * Update test snapshot This new snapshot matches the expected output that I wrote in the comments earlier. I just forgot to update the snapshot. * Also resolve referenced affixes from the final set of names and the OpenAL overrides that are now unnecessary * Add ReapplyAffixesProcessor.TryResolveName method (refactor) * Change ReapplyAffixesProcessor to use one global topological sort and update test to indicate that one level of scoping is now supported * Fix issue where overrides break the topological sort * Reorder tests in file * Add test case: SuccessfullyUsesReferencedAffixes_WhenOverridden * Rename NameProcessorContext/NameDataVisitor.Scopes to Names * Work on refactoring name affix processors * Add local OutputName function * Implement the option to prettify individual affixes * Update generator config now that affixes are prettified by default * Don't prettify referenced affixes by default since we usually want the verbatim value of the referenced name * Change affixes to not be prettified by default since it simplifies the code and config * Empty commit * Update snapshot to match expected stated by comment * Adjust doc comment wording for IdentifySharedPrefixes._passCount
* Update ClangSharp.PInvokeGenerator * Update comment on ModifyAllReferencesAsync in TransformHandles * Format files using CSharpier These were written before I installed the CSharpier plugin so they were not formatted. * Remove GetTypeInfo call GetTypeInfo should be unnecessary since it gets the type of an expression. For non-type expressions (eg: `5` is an int), this isn't useful for us. This is arguably an indirect reference to int, but the current Silk generator only cares about modifying direct references. For type expressions (eg: `int` refers to int), GetSymbolInfo will also return the same symbol. * Get the compilation once* *Roslyn already caches this internally. This is mainly for avoiding the async method call. Difference is probably not measurable, but theoretically this is faster. * Compare against _relevantIdentifiers set before calling GetSymbolInfo * Skip using directives * Add ProfilingScope * Add comment on _relevantIdentifiers * Fix field naming convention in ProfilingScope * Optimize document renaming in PrettifyNames Conflict checking was O(n), now it is O(1). * Use normalized relative paths during conflict checking This is to prevent false negatives from mismatched path formats. * Remove NormalizeWhitespace calls (much faster, but breaks generator) (cherry picked from commit 8cf1324) * Fix issue where the syntax tree gets corrupted due to reparsing (cherry picked from commit 2c48fb6) * Edit comment and error message (cherry picked from commit 6b12c69) * Avoid normalizing the syntax node twice when formatting * Avoid rebuilding the _relevantIdentifiers set for every document * Move collections in ResolveConflictsProcessor to be closer to where they are used * Preserve original line ending behavior (cherry picked from commit 66d0daa) * Update SDL to v3.44 from v3.2.4 to fix compile error * Revert change to get the compilation once during ModifyAllReferencesAsync This change caused incorrect behavior since the document ids can come from projects other than the source project (namely the test project). This broken when semantic models were requested for test project documents from the source project compilation. * Revert "Update SDL to v3.44 from v3.2.4 to fix compile error" This reverts commit 00d83bc. * Revert "Update ClangSharp.PInvokeGenerator" This reverts commit 7938a0c. * Revert "Preserve original line ending behavior" This reverts commit 364015d. * Add comment on why UsingDirectiveSyntaxes are skipped
* Update SDL submodule * Update ClangSharp.PInvokeGenerator (cherry picked from commit 7938a0c) * Add comment on where the SDL Linux dependency list comes from (cherry picked from commit e4f8325) * Update dependency list (cherry picked from commit b0db2ba) * Disable building SDL tests (cherry picked from commit 156aa5c) * Don't build for ios armv7s armv7s seems to be legacy. (cherry picked from commit 25b0e27) * Set CMAKE_LIBRARY_ARCHITECTURE and remove pkg-config settings CMAKE_LIBRARY_ARCHITECTURE fixes the issue where system libraries weren't being found. Eg: "SDL_X11 (Wanted: ON): ON" was OFF without this setting. Eg: "Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so " was a not found error without this setting. I removed the pkg-config settings since they didn't seem to do anything and I couldn't figure out if they were correct in the first place. I'm assuming CMake figures these out automatically (it should automatically find the host version of the pkg-config executable and I'm *assuming* (please verify) it uses the CMAKE_LIBRARY_ARCHITECTURE variable to figure out which set of .pc files to use). * Install the architecture specific version of each compile dependency x64/amd64 is handled the same way for consistency. * Fix apt-get commands * Fix incorrect architecture code (should be armhf instead of arm) * Enable ports repository * Forgot a sudo * Use tee instead of cat due to sudo only applying to cat and not the subsequent write * Don't hardcode the release codename * Oops * Update existing ubuntu.sources file to specify the architecture to fix package resolution issues * Change the ubuntu.source update command to be idempotent * Add the pkg config lines back * Fix missing sudo again * Use amd64_arm64 when calling vcvarsall instead of arm64 * Update native binaries for bf3883f * Empty commit to trigger experimental packages * Update native binaries for 3053e41 * Update native binaries for d5c877d * Update native binaries for 1c16a52 * Update native binaries for 5acd54c * Add license header to OpenAL example * Add basic SDL example * Prefix the project names with the library name This is because it otherwise gets confusing in the "run project" dropdown. * Decide to not prefix the folders since the rest of the codebase doesn't * Update SDL bindings * Add marker comments to build scripts for skimmability (cherry picked from commit ecc5677) * Reorder build steps so dependencies are always first (can special case, but dependencies first by default is most consistent) (cherry picked from commit ad2d940) * Organize Linux package installs * Flip if statement so that it matches execution order * Change SDL Linux native build to use Docker so that it matches OpenAL's native build process * Fix incorrect path * Install python before downloading zig * Remove now unnecessary sudo * Use apt-get over apt apt-get seems to be recommended over apt for scripting purposes. apt is designed for humans and does not guarantee backwards compatibility. See https://manpages.debian.org/stretch/apt/apt.8.en.html * Update native binaries for 2e6fde5 * Update native binaries for 128a9b8 * Update native binaries for d1b6965 * Empty commit since the native builds break the checks --------- Co-authored-by: The Silk.NET Automaton <9011267+dotnet-bot@users.noreply.github.com>
…the-box (#2573) * Fix OpenAL loading on Windows and make the examples run out-of-the-box * Fix incorrect PackageLicenseExpression
* Update docs for TransformProperties to prepare for my boolean transformation change * Adjust doc wording * Cleanup and add missing file header * Change TransformFunctions.Configuration.BoolTypes to be non-nullable for simplicity The performance difference is negligible. * Add MaybeBool transformation to fields and properties * Update generator.json to use TransformProperties.BoolTypes * Add stdbool condition from BoolTransformer Not actually sure if this is ever going to be used, but I guess it will at least be consistent in behavior with BoolTransformer * Regenerate OpenAL, OpenGL, SDL, Vulkan using Windows * Add test: TransformPropertiesTests.Transforms_MaybeBool_FieldsAndProperties * Add test: TransformPropertiesTests.Transforms_Utf8String_StaticConstProperties * Add note on the bitfield case * Remove unused ModUtils.MemberIdentifiers() This was used by the syntax-based renamer (extremely old at this point) * Add MaybeBoolUtils.MaybeBoolType() factory method
* Gather information about structure type members * Remove unnecessary condition (NativeName is no longer nullable) * Add RewriterPhase4 for adding default field values for structure type members * Use VisitStructDeclaration instead of VisitFieldDeclaration since we need to modify the struct as well * Add explicit constructor since we are using struct field initializers * Enable VK_ENABLE_BETA_EXTENSIONS by default TerraFX also does the same: https://github.com/terrafx/terrafx.interop.vulkan/blob/86629a4d0afc1de12d10111b4d1e8bbd4be4363b/generation/settings.rsp#L36 * Generate on Linux
* Add WIP documentation for using the Silk 3 generator * Add for-contributors/Generator folder * Work on an outline for two new generator docs pages * Work on high-level overview section * Edit the overview section and begin writing about PrettifyNames * Work on PrettifyNames section * Omit the name processor parameters since they don't provide much additional info * Edit wording * Work on Name Splitting and Name Prettification sections * Revise the name processing docs * More editing * Write the Acronym Indeterminate Inputs section * Finish writing the Name Prettification section * Work on name affixes section * Add PrettifyNames - Notable Decisions section * Write the Referenced Affixes section * Add Name Affixes - Metadata Format section * Add Referenced Affixes - Metadata Format section * Remove completed todo * Add test cases to cover ID3D12Device shared prefix identification behavior * Write the Symbol-based Renamer section * Edit name processing docs * Reflow the text * Add note on where the referenced affix example comes from * Add example where only one of the two consecutive acronyms is preserved * Begin working on generator mods docs * Write the Mod Configuration section * Add empty sections for each mod * Clarify what information will go in the Available Mods section * List out the name affix categories and work on outlining the rest of the docs * Add information about usage recommendations section * Work on docs and write the AddApiProfiles section * Work on docs and attempt to write AddVTables usage recommendation * Remove the WIP usage recommendations for AddVTables since I don't know enough to explain it * Work on mods docs * Add light docs for ClangScraper mod * Add docs for ExtractHandles and add ExtractHandlesTests matching the example given in the docs * Document that the example has a matching test case * Change ModUtils.RelativePath() to work when no project path is available This is because project path is null during unit tests and I can't figure out if it is possible to set the project path of an AdhocWorkspace project. * Add TestUtils.VerifyDocumentsAsync * Use Single instead of First since we expect one matching doc * Work on ExtractNestedTyping docs and add SuccessfullyExtractsNestedInlineArray test case * Work on docs and add SuccessfullyExtractsFunctionPointer test case * Add SuccessfullyExtractsCStyleEnumConstants test case * Add passing SuccessfullyExtractsCStyleEnumConstants_Pointer and failing SuccessfullyExtractsCStyleEnumConstants_ReturnType test case * Add SuccessfullyExtractsCStyleEnumConstants_Field test case * Rename snapshot to match renamed test * Write the IdentifySharedPrefixes section * Add note about IdentifySharedPrefixes's history * Fix incorrect test document name * Add more information to the IdentifySharedPrefixes section * Fix and edit wording * Add InterceptNativeFunctionsTests * Write the InterceptNativeFunctions section * Work on docs for MarkNativeNames * Work on MixKhronosData docs * Work on documenting the name affixes used by MixKhronosData * Write docs for KhronosNonExclusiveVendor * Finish writing the name affix docs for MixKhronosData * Finish up the MixKhronosData section * Write the PrettifyNames section * Write the StripAttributes section * Write the TransformEnums section and add note about ClangScraper platform differences * Edit wording * Attempt to write some docs for TransformFunctions * Work on TransformHandles docs * Write docs for TransformProperties and finish the first pass of the generator mod docs Probably not going to too much of a second pass since I'm tired of writing docs and the idea is that these docs will improve over time. Going from no docs to almost everything documented is already a really good step forward. * Adjust wording * Add OpenAL and Vulkan to changelog * Remove todos relating to PR #2574 * Document ClangScraper platform-specific differences and edit generator mod docs * Add Library-Specific Notes doc * Add link for more information * Add link from ClangScraper section to Library-Specific Notes doc * Fix incorrect title for Static vs Instance Bindings doc * Add link from AddVTables section to Static vs Instance Bindings doc * Prefer referring to native APIs using the term "API" rather than "library" I saw that static-vs-instance-bindings.md used the terms "API" and "native API" to describe the APIs being bound to using SilkTouch. I'm deciding to keep this pattern moving forward for consistency. * Add links to Using the Generator and remap-stdint.rsp to generator-mods.md * Work on Using the Generator docs * Continue editing the Using the Generator docs * Don't surround ClangSharpPInvokeGenerator in backticks * Cleanup section on general eng/silktouch folder structure * Finish editing the Using the Generator docs * Cleanup * Update test cases to use TestUtils.VerifyDocumentsAsync * Cleanup * Edit the intro to the Using the Generator docs * Edit docs and avoid using inline code snippets in headers * Add <see> reference to ClangScraper (cherry picked from commit 3192da8be03dffedae9319636018ee901f959716) * Change ExtractHandlesTests to not filter the verified documents list * Add some spacing to the KhronosNonExclusiveVendor section * Edit Generator Mods docs * Edit MarkNativeNames to clarify who is responsible for adding NativeName attributes * [3.0] Split up ExtractNestedTyping and add tests for TransformHandles (#2587) * Start of generator fixes and polish branch * Add stubs for ExtractEnumConstants and ExtractFunctionPointers * Fix invalid interface implementation * Work on splitting ExtractNestedTyping into 3 separate mods * Continue to move code to their new locations * Further cleanup * Rename ExtractNestedTyping to ExtractNestedTypes This is be more consistent with C#'s terminology now that ExtractNestedTypes strictly only handles NestedTypes and not other forms of "nested typing". * Split ExtractNestedTypes tests into 3 sets of tests and ensure project is compilable (if not correct) This is so I can start testing for expected behavior. * Get ExtractNestedTypes working * Update test snapshot names * Get ExtractFunctionPointers working * Fix subtly incorrect behavior and remove dependency on Mod for ExtractFunctionPointers/NestedTypes * Move GetNativeTypeNameForPredefinedType to ExtractEnumConstants and cleanup * Fix incorrect file name * Prefer IMod over Mod where possible This also means free performance since Mod sneakily creates a compilation and walks through it * Document where ExtractFunctionPointers and ExtractNestedTypes output their extracted files Also add todo for doing the same in ExtractEnumConstants * Get ExtractEnumConstants working * Update config * Add remark comment on ExtractNestedTypes only handling ClangScraper's special structs * Generate on Windows (apparently accidentally fixed a namespace bug) * Remove unused code * Cleanup GetNativeTypeNameForPredefinedType * Use constructor and avoid nullable properties We always allocate these so this is strictly a readability and performance improvement. * Refactor code to use record structs * Work on deciphering tuple usages * Figure out what _numericTypeNames does * Add support for requiredTargetSpecifier to TryParseNativeTypeName * Handle method return types properly and fix SuccessfullyExtractsCStyleEnumConstants_ReturnType * Cleanup todos * Handle fields properly and fix SuccessfullyExtractsCStyleEnumConstants_Field * Generate on Windows * Cleanup * Annotate extracted enums with [NativeName] * Generate on Windows * Add IEquatable to transformed handle types These already implemented all the required members for IEquatable, so I found it weird that they didn't also implement the interface. * Generate on Windows for IEquatable handles change * Add TransformHandlesTests * Reorder code for clarity * Update docs with sections for the 3 mods ExtractNestedTyping was split into * Change Sdl in ExtractEnumConstantsTests to be a class, not a struct This is more representative of the actual bindings even though it doesn't affect the tests. * Fix incorrect variable name and type name
* Start of only-option branch * Change SilkTouch entrypoint to use an actual Program class I've always felt the Program-class-less entrypoint approach to be less readable. It's fine if it's only a few lines, but logic, methods, and constants start to blur together. * Add back the --only option
* Start of feature/update-dependencies branch * Update CSharpier and Roslyn packages * Generate SLNX using Rider's save as SLNX feature * Remove .sln version of the solution file Note: The Silk.NET.sln.DotSettings files must not be renamed. Rider still looks for the .sln version. * Update Nuke and build system dependencies * Update rest of dependencies in Directory.Packages.props * Fix error caused by updating Microsoft.Build.Locator Error in question: Microsoft.Build.Locator.targets(19,5): Error MSBL001 : A PackageReference to the package 'Microsoft.NET.StringTools' at version '18.7.1' is present in this project without ExcludeAssets="runtime" and PrivateAssets="all" set. This can cause errors at run-time due to MSBuild assembly-loading. I'm not sure what's the proper way to solve this, but I also had this error in my personal repos and this was how I solved it there. * Revert update to System.CommandLine The code copied verbatim from ClangSharp uses an old version of System.CommandLine (v2.0.0-beta3.22114.1). Since this code is copied verbatim, I don't want to update it to compile with the new version of System.CommandLine (v2.0.9). This commit reverts the package to use v2.0.0-beta4.22272.1, which is the one we used before this PR. * Update solution path in generator.json
* Start of khronos-bindings branch * Add initial set of required submodules * Explain that the API-Specific Notes sections may be empty * Change OpenXR XML spec link in docs * Set new submodules to use their latest tagged commit * Update existing Khronos submodules * Regenerate OpenAL on Linux after updating submodule * Regenerate OpenGL on Linux after updating submodule * Regenerate Vulkan on Linux after updating submodule * Add prefix override for VkImageCreateFlags2KHR * Cleanup XML spec links in docs * Update Vulkan copyright year * Regenerate Vulkan on Linux after updating header copyright year * Add OpenXR to API notes and reorganize so that Khronos-like bindings are together * Add initial OpenXR .rsp files * Add OpenXR to generator.json * Add Initial Project Creation section to Using the Generator docs * Create initial OpenXR .csproj file * Fix formatting of solution file (oops) * Configure IdentifySharedPrefixes for OpenXR * Configure TransformEnums for OpenXR * Add naive symbol resolution to MetadataUtils.GetTypeDetails to fix OpenXR XML parsing * Update OpenXR API notes * Regenerate OpenXR on Linux to create initial bindings * Rename Khronos submodules so that they use the full name of the repo * Add opencl-headers submodule * Add section for OpenCL in API notes * Add response files for OpenCL * Create project for OpenCL * Add OpenCL SilkTouch configuration * Fix OpenCL include path * Change opencl-headers submodule to point to latest tag * Add information about CL_TARGET_OPENCL_VERSION warning to API notes * Enable -Wno-invalid-constexpr for OpenCL * Regenerate OpenCL on Linux to create initial bindings * Disable IdentifyFunctionDataTypes and IdentifyEnumTypeNonExclusiveVendors for OpenCL * Update vendor suffix identification (but not preservation/prettification) to work with OpenCL * Regenerate OpenCL on Linux for vendor suffix identification fix (not ideal behavior yet though) * Clarify that non `.gen.cs` files are not modified * Add ReapplyAffixesProcessor tests (indirect) These tests indirectly test ReapplyAffixesProcessor since these actually run the entire PrettyNames mod. * Add option to capitalize name affixes * Enable Capitalize for OpenCL KhronosVendor suffixes * Regenerate OpenCL on Linux for capitalize KhronosVendor change * Replace EndingsNotToTrim with EndingsToNotIdentifyInto * Update vendor suffix identification to use CanIdentifySuffix * Regenerate OpenCL on Linux for ContEXT fix * Fix unwanted change in OpenGL bindings caused by EndingsToNotIdentifyInto change * Also include cl_ext.h * Regenerate OpenCL on Linux after including cl_ext.h * Add _cl as a global prefix hint for OpenCL * Regenerate OpenCL on Linux after adding _cl as global prefix hint * Rename variable to not collide with C# keyword * Add typemappings for OpenCL enum base types * Rework how OpenCL enum type nodes are parsed * Fix issue where we were losing enum base type information for OpenCL Doesn't actually affect bindings output though. * Rename VendorFromString to VendorFromName and add docs * Move FixupGroupNameForOpenCL out of ReadGroups This is mainly so it's not in the middle of everything and to prove it doesn't use local state. * Add docs on ReadGroups helper methods * Edit doc comment wording for MixKhronosData ReadGroups helpers * Add base type for ErrorCodes enum * Regenerate OpenCL on Linux for ErrorCodes change * Manually add base types for all remaining OpenCL enums This was done by assuming they were all uints (they indeed are) and checking against the XML and C headers. * Add OpenCL to solution * Regenerate OpenCL on Linux after defining enum base types * Typemap intptr_t to long for OpenCL (see commit description) Silk 2 maps intptr_t to ulong, but Silk 2's enum backing types have consistently been incorrect when it comes to signs. long should be the better choice, but I'm purely basing this decision off the fact that intptr_t is also signed. Ideally we use nint, but that's not valid as an enum backing type. * Regenerate OpenCL on Linux for intptr_t change * Trim whitespace from non-namespaced enum names to handle OpenCL enum name issue This doesn't actually affect generation output since the the correct name is read elsewhere from the XML, but it does prevent some faulty data from being processed by MixKhronosData. Notably, it fixes these two errors: fail: Silk.NET.SilkTouch.Mods.MixKhronosData[0] Enum "cl_platform_command_buffer_capabilities_khr " has no base type. Please add TypeMap entry to the configuration. This enum group will be skipped. fail: Silk.NET.SilkTouch.Mods.MixKhronosData[0] Enum "cl_device_command_buffer_capabilities_khr " has no base type. Please add TypeMap entry to the configuration. This enum group will be skipped. Also note that providing base types for these two enums would lead to an incorrectly generated duplicate of an existing enum corresponding to the incorrect name. * Expand OpenCL ErrorCodes handling to apply for all enums with block numbers * Regenerate OpenCL on Linux for block number trimming change * Add NativeName attribute to structs generated by AddOpaqueStructs * Regenerate OpenGL on Linux for AddOpaqueStructs change * Add AddOpaqueStructs to OpenCL config * Regenerate OpenCL on Linux for AddOpaqueStructs change * Restore ErrorCodes block in FixupGroupNameForOpenCL since it's needed to handle ErrorCodes.future * Add TransformHandles mod to OpenGL and OpenCL * Regenerate OpenCL on Linux for TransformHandles change * Regenerate OpenGL on Linux for TransformHandles change * Fix TransformHandles overwriting existing attributes * Fix ExtractHandles not adding the NativeName attribute to generated structs * Change OpenCL to use ExtractHandles instead of AddOpaqueStructs * Regenerate OpenCL on Linux due to handle type changes * Exclude XR_NULL_HANDLE * Regenerate OpenXR on Linux for XR_NULL_HANDLE change * Clarify MixKhronosData FlagsTypes remark comment * Add constants for the name affixes used by MixKhronosData * Change NativeName for ErrorCodes to be "ErrorCodes" instead of "ErrorCodes.0" * Regenerate OpenCL on Linux for ErrorCodes NativeName change * Change GetMissingEnums to use the native name when typemapping This is easier to work with since the names match the names given in the spec. Also, apparently TypeMap was always supposed to use the native name. The docs for TypeMap imply that it was. That said, I didn't realize until after I made the change. * Potentially controversial: Cleanup OpenCL names that have the format "extension_name.group.name" * Regenerate OpenCL on Linux after OpenCL enum name cleanup* *Still needs some additional cleanup to have proper vendor suffix identification, but that's a separate task. * Add todo for changing the Groups dictionary to be keyed by native name instead of managed name * Change enum vendor suffix identification to consistently always use the managed name I already made the change in ProcessAndGetNewAttributes in a previous PR, but apparently didn't do the same for the VisitEnumDeclaration method. * Regenerate OpenCL on Linux after fixing vendor suffix identification for transformed OpenCL enum names * Undo the Vulkan header change since it makes review tedious * Regenerate Vulkan on Linux for header change * Rename Khronos-like Bindings section to be just for Khronos Bindings * Add doc section on how to run the generator * Fix extra space in SkipOption description * Cleanup VendorFromEnumName * Don't merge cl_intel_advanced_motion_estimation.cl_motion_detect_desc_intel.2 with the non-2 version of the enum * Regenerate OpenCL on Linux for block merging change * Change RewriterPhase1 to track native names instead of managed names * Add OpenCL and XR to the changelog * Update native binaries for 42ae407 * Clarify comment for OpenCL group name processing * Add info about nuget.config file to experimental feed docs * Format Vk.cs (was written before I had CSharpier configured) * Remove duplicate RegisterHook call in Vk (hack) This is a hack because it does not solve the fundamental issue. The fundamental issue is that the code in Vk and Vk.DllImport both have to run exactly once if the bindings are used. In other words, if one runs, the other should run. * Implement Xr.cs * Update opencl-docs submodule for trailing space fix * Regenerate OpenCL on Linux after trailing space fix and submodule update * Improve document rename collision detection to account for casing differences * Edit path collision error message This is to clarify that the rename was not done. * Document ClangScraper handling of C long * Also link to ClangSharp's README in Using the Generator docs * Update opencl-docs submodule * Regenerate OpenCL on Linux after updating submodule * Update ClangSharp.PInvokeGenerator * Regenerate OpenCL on Linux after updating ClangSharp Also regenerated everything else except for Microsoft and SDL, but no changes so excluded from commit title. * Document why DllImport is used over LibraryImport * Implement Cl.cs * Edit OpenCL AddVTables.ThisThread settings * Regenerate OpenCL on Linux after modifying AddVTables settings * Update Cl.cs to work with new AddVTables settings * Remove duplicate RegisterHook call in OpenCL/XR * Register alternative library names for OpenCL * Add OpenCL.Tutorial001.SimpleKernel project * Fix index out of bounds error * Add ExtractNestedTypes and ExtractFunctionPointers to OpenCL mod order * Regenerate OpenCL on Linux after adding ExtractNestedTypes and ExtractFunctionPointers * Remove resolved todos in OpenCL Tutorial001 * Add the underscore back to extracted struct names * Accept changes to OpenCL MixKhronosData snapshots These are intentional and caused by my renaming of OpenCL groups in MixKhronosData. This change allows the vendor affix to be preserved and processed in a manner consistent with other vendor suffixes. We should discuss this more during review, but I believe these names are "prettier". * Accept changes to Extract/TransformHandlesTests snapshots These are intentional since the responsibility of adding the NativeName attribute has now been moved to ExtractHandles from TransformHandles. * Fix IdentifiesNamespaceEnumPrefix test case by handling native and managed names separately * Document that we prefer the Flags version of the name for Flags/FlagBits enums This will be implemented in the next few commits. * Rework MixKhronosData to identify enums by native names and prefer Flags version of Flags/FlagBits names for [NativeName] This also affects the regression test cases, but I will commit the changes in the next commit. * Update MixKhronosData parsing test cases now that groups are keyed by native name instead of managed name * Fix typo * Add LocationTransformationTests and fix method group reference not getting renamed * Add support for handling qualified referenced name affixes to NameAffixer * Add support for qualified referenced affixes Eg: nameof(Cl.EnqueueSvmFreeARM) This is used to ensure that names like EnqueueSvmFreeARMPfnFreeFunc have the ARM vendor suffix capitalized correctly. The next commit will add the correct NameAffix attributes needed for this case. * Add NameAffix referenced affixes for the extracted function pointer structs * Update name processing docs to reflect that qualified name affix references are now supported * Add FunctionPointerNameFallbackParent to ExtractFunctionPointers mod docs and edit related referenced affix docs * Remove prefix trimming todos These are fine, but don't match Silk 2. * Fall back to DefaultNativeContext for loading OpenCL functions * Add todo about how ICl should be disposable * Add todo for potentially exposing INativeContext * Add todo for potentially returning the concrete API object type instead of the interface * Silk 2 overrides DeviceInfo and ContextProperties, so this ports them over * Add a few more OpenCL headers to generation process * Add todo for discussing INativeContext.LoadFunction * Regenerate all except Core/Microsoft on Windows * Add ALTERA as OpenCL vendor suffix * Regenerate OpenCL on Windows for ALTERA vendor suffix * Add prefix overrides for cl_context_properties and cl_device_integer_dot_product_capabilities * Note that OpenXR is not usable yet * Fix bad grammar * Remove todo * Disable ExtractEnumConstants for OpenXR and Vulkan Not necessary and causes incorrect output. * Regenerate OpenXR, Vulkan bindings on Windows for ExtractEnumConstants change Vulkan has no changes this commit, but was regenerated. * Remove recommendation about including all Extract- mods together ExtractEnumConstants should only be used if C-style enums are used. * Add prefix override for XrPerfSettingsNotificationLevelEXT * Add prefix override for XrSceneMarkerQRCodeSymbolTypeMSFT * Add prefix override for XrStructureType * Manually add cast to Xr.gen.cs * Add todo marking manual cast in Xr.gen.cs * Change error strings in AL/CL/XR/Vulkan to be private * Use nameof for defining NameAffix category constants * Add additional clarification to why DllImport is used over LibraryImport * Clarify that test projects are optional in the generator config * Don't believe there are any other required properties ImplicitUsings doesn't seem to be required for the bindings, probably because ClangSharp outputs everything that's needed already. * Remove todo on packing bindings section verification dotnet pack does indeed work, which is how I pack my Silk 3 fork. * Add OpenCL to static vs instance bindings docs * Cleanup todos in OpenCL example program Some unresolved todos were added to my tracker: #2586 * Add license headers to files missing them in OpenCL SimpleKernel example and SilkTouch --------- Co-authored-by: The Silk.NET Automaton <9011267+dotnet-bot@users.noreply.github.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#209
#529 was accidentally closed when I unf**ked the Git history for
develop/3.0.